Handle updates on pointer fields.
This commit is contained in:
parent
8c3f04e859
commit
aacb3d358f
5 changed files with 45 additions and 13 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 }}
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@
|
|||
}
|
||||
|
||||
type HandlerConfig struct {
|
||||
ItemsPerPage int
|
||||
ItemsPerPage int
|
||||
PageQueryKey string
|
||||
TimeFormat string
|
||||
TimeFormat string
|
||||
}
|
||||
|
||||
{{ end }}
|
||||
|
|
@ -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"`
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue