Handle updates on pointer fields.

This commit is contained in:
mikestefanello 2025-04-13 13:58:50 -04:00
parent 8c3f04e859
commit aacb3d358f
5 changed files with 45 additions and 13 deletions

View file

@ -56,9 +56,17 @@ func FieldLabel(name string) string {
return name return name
} }
name = strings.ReplaceAll(name, "_id", "_ID") parts := strings.Split(name, "_")
name = strings.ReplaceAll(name, "_", " ") for i := 0; i < len(parts); i++ {
return upperFirst(name) if parts[i] == "id" {
parts[i] = "ID"
}
if i == 0 {
parts[i] = upperFirst(parts[i])
}
}
return strings.Join(parts, " ")
} }
func fieldIsPointer(f *gen.Field) bool { func fieldIsPointer(f *gen.Field) bool {
@ -67,6 +75,7 @@ func fieldIsPointer(f *gen.Field) bool {
return false return false
case f.Optional, case f.Optional,
f.Default, f.Default,
f.Sensitive(),
f.Nillable: f.Nillable:
return true return true
} }

View file

@ -89,7 +89,9 @@ func (h *Handler) PasswordTokenCreate(ctx echo.Context) error {
} }
op := h.client.PasswordToken.Create() op := h.client.PasswordToken.Create()
op.SetHash(payload.Hash) if payload.Hash != nil {
op.SetHash(*payload.Hash)
}
op.SetUserID(payload.UserID) op.SetUserID(payload.UserID)
if payload.CreatedAt != nil { if payload.CreatedAt != nil {
op.SetCreatedAt(*payload.CreatedAt) op.SetCreatedAt(*payload.CreatedAt)
@ -110,9 +112,14 @@ func (h *Handler) PasswordTokenUpdate(ctx echo.Context, id int) error {
} }
op := entity.Update() op := entity.Update()
op.SetHash(payload.Hash) if payload.Hash != nil {
op.SetHash(*payload.Hash)
}
op.SetUserID(payload.UserID) op.SetUserID(payload.UserID)
if payload.CreatedAt != nil { if payload.CreatedAt == nil {
var empty time.Time
op.SetCreatedAt(empty)
} else {
op.SetCreatedAt(*payload.CreatedAt) op.SetCreatedAt(*payload.CreatedAt)
} }
_, err = op.Save(ctx.Request().Context()) _, err = op.Save(ctx.Request().Context())
@ -179,7 +186,9 @@ func (h *Handler) UserCreate(ctx echo.Context) error {
op := h.client.User.Create() op := h.client.User.Create()
op.SetName(payload.Name) op.SetName(payload.Name)
op.SetEmail(payload.Email) op.SetEmail(payload.Email)
op.SetPassword(payload.Password) if payload.Password != nil {
op.SetPassword(*payload.Password)
}
op.SetVerified(payload.Verified) op.SetVerified(payload.Verified)
if payload.CreatedAt != nil { if payload.CreatedAt != nil {
op.SetCreatedAt(*payload.CreatedAt) op.SetCreatedAt(*payload.CreatedAt)
@ -202,7 +211,9 @@ func (h *Handler) UserUpdate(ctx echo.Context, id int) error {
op := entity.Update() op := entity.Update()
op.SetName(payload.Name) op.SetName(payload.Name)
op.SetEmail(payload.Email) op.SetEmail(payload.Email)
op.SetPassword(payload.Password) if payload.Password != nil {
op.SetPassword(*payload.Password)
}
op.SetVerified(payload.Verified) op.SetVerified(payload.Verified)
_, err = op.Save(ctx.Request().Context()) _, err = op.Save(ctx.Request().Context())
return err return err

View file

@ -122,10 +122,22 @@
op := entity.Update() op := entity.Update()
{{- range $f := $n.Fields }} {{- range $f := $n.Fields }}
{{- if not $f.Immutable }} {{- if not $f.Immutable }}
{{- if (fieldIsPointer $f) }} {{- if $f.Sensitive }}
if payload.{{ fieldName $f.Name }} != nil { if payload.{{ fieldName $f.Name }} != nil {
op.Set{{ fieldName $f.Name }}(*payload.{{ fieldName $f.Name }}) op.Set{{ fieldName $f.Name }}(*payload.{{ fieldName $f.Name }})
} }
{{- else if $f.Nillable }}
op.SetNillable{{ fieldName $f.Name }}(payload.{{ fieldName $f.Name }})
if payload.{{ fieldName $f.Name }} != nil {
op.Clear{{ fieldName $f.Name }}()
}
{{- else if (fieldIsPointer $f) }}
if payload.{{ fieldName $f.Name }} == nil {
var empty {{ $f.Type }}
op.Set{{ fieldName $f.Name }}(empty)
} else {
op.Set{{ fieldName $f.Name }}(*payload.{{ fieldName $f.Name }})
}
{{- else }} {{- else }}
op.Set{{ fieldName $f.Name }}(payload.{{ fieldName $f.Name }}) op.Set{{ fieldName $f.Name }}(payload.{{ fieldName $f.Name }})
{{- end }} {{- end }}

View file

@ -25,9 +25,9 @@
} }
type HandlerConfig struct { type HandlerConfig struct {
ItemsPerPage int ItemsPerPage int
PageQueryKey string PageQueryKey string
TimeFormat string TimeFormat string
} }
{{ end }} {{ end }}

View file

@ -4,7 +4,7 @@ package admin
import "time" import "time"
type PasswordToken struct { type PasswordToken struct {
Hash string `form:"hash"` Hash *string `form:"hash"`
UserID int `form:"user_id"` UserID int `form:"user_id"`
CreatedAt *time.Time `form:"created_at"` CreatedAt *time.Time `form:"created_at"`
} }
@ -12,7 +12,7 @@ type PasswordToken struct {
type User struct { type User struct {
Name string `form:"name"` Name string `form:"name"`
Email string `form:"email"` Email string `form:"email"`
Password string `form:"password"` Password *string `form:"password"`
Verified bool `form:"verified"` Verified bool `form:"verified"`
CreatedAt *time.Time `form:"created_at"` CreatedAt *time.Time `form:"created_at"`
} }