Add dynamic admin panel for managing entities (#108)

This commit is contained in:
Mike Stefanello 2025-04-22 08:26:35 -04:00 committed by GitHub
parent 60009df0bf
commit 1a6874fd82
47 changed files with 2173 additions and 320 deletions

View file

@ -2,11 +2,13 @@ package schema
import (
"context"
"net/mail"
"strings"
"time"
ge "github.com/mikestefanello/pagoda/ent"
"github.com/mikestefanello/pagoda/ent/hook"
"golang.org/x/crypto/bcrypt"
"entgo.io/ent"
"entgo.io/ent/schema/edge"
@ -25,12 +27,18 @@ func (User) Fields() []ent.Field {
NotEmpty(),
field.String("email").
NotEmpty().
Unique(),
Unique().
Validate(func(s string) error {
_, err := mail.ParseAddress(s)
return err
}),
field.String("password").
Sensitive().
NotEmpty(),
field.Bool("verified").
Default(false),
field.Bool("admin").
Default(false),
field.Time("created_at").
Default(time.Now).
Immutable(),
@ -54,6 +62,14 @@ func (User) Hooks() []ent.Hook {
if v, exists := m.Email(); exists {
m.SetEmail(strings.ToLower(v))
}
if v, exists := m.Password(); exists {
hash, err := bcrypt.GenerateFromPassword([]byte(v), bcrypt.DefaultCost)
if err != nil {
return "", err
}
m.SetPassword(string(hash))
}
return next.Mutate(ctx, m)
})
},