Hooks
Run logic before or after database operations. Two levels: engine-wide (all models) and model-level (per struct).
Available Hook Types
BeforeCreate · AfterCreate · BeforeUpdate · AfterUpdate · BeforeDelete · AfterDelete · BeforeFind · AfterFind
Engine-Level Hooks
Applied to all operations across all models:
db.RegisterHook(gormicx.BeforeCreate, func(ctx context.Context, model any) error {
if u, ok := model.(*User); ok {
u.CreatedAt = time.Now()
}
return nil
})
db.RegisterHook(gormicx.AfterCreate, func(ctx context.Context, model any) error {
log.Printf("created: %+v", model)
return nil
})Model-Level Hooks
Implement hook methods directly on your struct:
func (u *User) BeforeCreate(ctx context.Context) error {
u.Email = strings.ToLower(u.Email)
return nil
}
func (u *User) AfterCreate(ctx context.Context) error {
log.Printf("user %d created", u.ID)
return nil
}Execution Order
Model-level hooks run before engine-level hooks. A non-nil error return aborts the operation.