Support optional fields being empty.
This commit is contained in:
parent
356cf21b3e
commit
56f8a619a5
5 changed files with 46 additions and 27 deletions
|
|
@ -8,6 +8,7 @@ import (
|
||||||
|
|
||||||
"entgo.io/ent/entc"
|
"entgo.io/ent/entc"
|
||||||
"entgo.io/ent/entc/gen"
|
"entgo.io/ent/entc/gen"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -24,8 +25,9 @@ func (*Extension) Templates() []*gen.Template {
|
||||||
gen.MustParse(
|
gen.MustParse(
|
||||||
gen.NewTemplate("admin").
|
gen.NewTemplate("admin").
|
||||||
Funcs(template.FuncMap{
|
Funcs(template.FuncMap{
|
||||||
"fieldName": fieldName,
|
"fieldName": fieldName,
|
||||||
"fieldLabel": fieldLabel,
|
"fieldLabel": fieldLabel,
|
||||||
|
"fieldIsPointer": fieldIsPointer,
|
||||||
}).
|
}).
|
||||||
ParseFS(templateDir, "templates/*tmpl"),
|
ParseFS(templateDir, "templates/*tmpl"),
|
||||||
),
|
),
|
||||||
|
|
@ -58,6 +60,17 @@ func fieldLabel(name string) string {
|
||||||
return upperFirst(out)
|
return upperFirst(out)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func fieldIsPointer(f *gen.Field) bool {
|
||||||
|
switch {
|
||||||
|
case f.Type.Type == field.TypeBool:
|
||||||
|
return false
|
||||||
|
case f.Optional,
|
||||||
|
f.Default:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func upperFirst(s string) string {
|
func upperFirst(s string) string {
|
||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return s
|
return s
|
||||||
|
|
|
||||||
|
|
@ -90,8 +90,9 @@ func (h *Handler) PasswordTokenCreate(ctx echo.Context) error {
|
||||||
op := h.client.PasswordToken.Create()
|
op := h.client.PasswordToken.Create()
|
||||||
op.SetHash(payload.Hash)
|
op.SetHash(payload.Hash)
|
||||||
op.SetUserID(payload.UserID)
|
op.SetUserID(payload.UserID)
|
||||||
op.SetCreatedAt(payload.CreatedAt)
|
if payload.CreatedAt != nil {
|
||||||
// op.SetUserID(payload.User)
|
op.SetCreatedAt(*payload.CreatedAt)
|
||||||
|
}
|
||||||
_, err := op.Save(ctx.Request().Context())
|
_, err := op.Save(ctx.Request().Context())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -110,8 +111,9 @@ func (h *Handler) PasswordTokenUpdate(ctx echo.Context, id int) error {
|
||||||
op := entity.Update()
|
op := entity.Update()
|
||||||
op.SetHash(payload.Hash)
|
op.SetHash(payload.Hash)
|
||||||
op.SetUserID(payload.UserID)
|
op.SetUserID(payload.UserID)
|
||||||
op.SetCreatedAt(payload.CreatedAt)
|
if payload.CreatedAt != nil {
|
||||||
// op.SetUserID(payload.User)
|
op.SetCreatedAt(*payload.CreatedAt)
|
||||||
|
}
|
||||||
_, err = op.Save(ctx.Request().Context())
|
_, err = op.Save(ctx.Request().Context())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -176,7 +178,9 @@ func (h *Handler) UserCreate(ctx echo.Context) error {
|
||||||
op.SetEmail(payload.Email)
|
op.SetEmail(payload.Email)
|
||||||
op.SetPassword(payload.Password)
|
op.SetPassword(payload.Password)
|
||||||
op.SetVerified(payload.Verified)
|
op.SetVerified(payload.Verified)
|
||||||
op.SetCreatedAt(payload.CreatedAt)
|
if payload.CreatedAt != nil {
|
||||||
|
op.SetCreatedAt(*payload.CreatedAt)
|
||||||
|
}
|
||||||
_, err := op.Save(ctx.Request().Context())
|
_, err := op.Save(ctx.Request().Context())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -96,11 +96,12 @@
|
||||||
|
|
||||||
op := h.client.{{ $n.Name }}.Create()
|
op := h.client.{{ $n.Name }}.Create()
|
||||||
{{- range $f := $n.Fields }}
|
{{- range $f := $n.Fields }}
|
||||||
op.Set{{ fieldName $f.Name }}(payload.{{ fieldName $f.Name }})
|
{{- if (fieldIsPointer $f) }}
|
||||||
{{- end }}
|
if payload.{{ fieldName $f.Name }} != nil {
|
||||||
{{- range $e := $n.Edges }}
|
op.Set{{ fieldName $f.Name }}(*payload.{{ fieldName $f.Name }})
|
||||||
{{- if not $e.Inverse}}
|
}
|
||||||
// op.Set{{ fieldName $e.Name }}ID(payload.{{ fieldName $e.Name }})
|
{{- else }}
|
||||||
|
op.Set{{ fieldName $f.Name }}(payload.{{ fieldName $f.Name }})
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
_, err := op.Save(ctx.Request().Context())
|
_, err := op.Save(ctx.Request().Context())
|
||||||
|
|
@ -121,12 +122,13 @@
|
||||||
op := entity.Update()
|
op := entity.Update()
|
||||||
{{- range $f := $n.Fields }}
|
{{- range $f := $n.Fields }}
|
||||||
{{- if not $f.Immutable }}
|
{{- if not $f.Immutable }}
|
||||||
op.Set{{ fieldName $f.Name }}(payload.{{ fieldName $f.Name }})
|
{{- if (fieldIsPointer $f) }}
|
||||||
{{- end }}
|
if payload.{{ fieldName $f.Name }} != nil {
|
||||||
{{- end }}
|
op.Set{{ fieldName $f.Name }}(*payload.{{ fieldName $f.Name }})
|
||||||
{{- range $e := $n.Edges }}
|
}
|
||||||
{{- if not $e.Inverse}}
|
{{- else }}
|
||||||
// op.Set{{ fieldName $e.Name }}ID(payload.{{ fieldName $e.Name }})
|
op.Set{{ fieldName $f.Name }}(payload.{{ fieldName $f.Name }})
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
_, err = op.Save(ctx.Request().Context())
|
_, err = op.Save(ctx.Request().Context())
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
{{ range $n := $.Nodes }}
|
{{ range $n := $.Nodes }}
|
||||||
type {{ $n.Name }} struct {
|
type {{ $n.Name }} struct {
|
||||||
{{- range $f := $n.Fields }}
|
{{- range $f := $n.Fields }}
|
||||||
{{ fieldName $f.Name }} {{ $f.Type }} `form:"{{ $f.Name }}"`
|
{{ fieldName $f.Name }} {{ if (fieldIsPointer $f) }}*{{ end }}{{ $f.Type }} `form:"{{ $f.Name }}"`
|
||||||
{{- end }}
|
{{- end }}
|
||||||
}
|
}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
|
||||||
|
|
@ -4,17 +4,17 @@ 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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type EntityList struct {
|
type EntityList struct {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue