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
}
name = strings.ReplaceAll(name, "_id", "_ID")
name = strings.ReplaceAll(name, "_", " ")
return upperFirst(name)
parts := strings.Split(name, "_")
for i := 0; i < len(parts); i++ {
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 {
@ -67,6 +75,7 @@ func fieldIsPointer(f *gen.Field) bool {
return false
case f.Optional,
f.Default,
f.Sensitive(),
f.Nillable:
return true
}

View file

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

View file

@ -122,10 +122,22 @@
op := entity.Update()
{{- range $f := $n.Fields }}
{{- if not $f.Immutable }}
{{- if (fieldIsPointer $f) }}
{{- if $f.Sensitive }}
if payload.{{ fieldName $f.Name }} != nil {
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 }}
op.Set{{ fieldName $f.Name }}(payload.{{ fieldName $f.Name }})
{{- end }}

View file

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

View file

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