Add db support for workspaces

This commit is contained in:
2024-10-14 21:08:37 +02:00
parent b36c5b30c6
commit 2d2b596f2c
8 changed files with 212 additions and 38 deletions

View File

@@ -17,42 +17,30 @@ type UserSettings struct {
GitCommitMsgTemplate string `json:"gitCommitMsgTemplate"`
}
type Settings struct {
UserID int `json:"userId" validate:"required,min=1"`
Settings UserSettings `json:"settings" validate:"required"`
}
var defaultUserSettings = UserSettings{
Theme: "light",
AutoSave: false,
GitEnabled: false,
GitCommitMsgTemplate: "Update ${filename}",
type WorkspaceSettings struct {
WorkspaceID int `json:"workspaceId" validate:"required,min=1"`
Settings UserSettings `json:"settings" validate:"required"`
}
var validate = validator.New()
func (s *Settings) Validate() error {
func (s *UserSettings) Validate() error {
return validate.Struct(s)
}
func (s *Settings) SetDefaults() {
if s.Settings.Theme == "" {
s.Settings.Theme = defaultUserSettings.Theme
}
if s.Settings.GitCommitMsgTemplate == "" {
s.Settings.GitCommitMsgTemplate = defaultUserSettings.GitCommitMsgTemplate
}
func (ws *WorkspaceSettings) Validate() error {
return validate.Struct(ws)
}
func (s *Settings) UnmarshalJSON(data []byte) error {
type Alias Settings
func (ws *WorkspaceSettings) UnmarshalJSON(data []byte) error {
type Alias WorkspaceSettings
aux := &struct {
*Alias
}{
Alias: (*Alias)(s),
Alias: (*Alias)(ws),
}
if err := json.Unmarshal(data, &aux); err != nil {
return err
}
return s.Validate()
}
return ws.Validate()
}

View File

@@ -0,0 +1,17 @@
package models
import (
"time"
)
type User struct {
ID int `json:"id" validate:"required,min=1"`
Username string `json:"username" validate:"required"`
Email string `json:"email" validate:"required,email"`
PasswordHash string `json:"-"`
CreatedAt time.Time `json:"createdAt"`
}
func (u *User) Validate() error {
return validate.Struct(u)
}

View File

@@ -0,0 +1,16 @@
package models
import (
"time"
)
type Workspace struct {
ID int `json:"id" validate:"required,min=1"`
UserID int `json:"userId" validate:"required,min=1"`
Name string `json:"name" validate:"required"`
CreatedAt time.Time `json:"createdAt"`
}
func (w *Workspace) Validate() error {
return validate.Struct(w)
}