package schema import ( "context" "fmt" gen "<project>/ent" "<project>/ent/hook" "entgo.io/ent" ) // Card holds the schema definition for the CreditCard entity. type Card struct { ent.Schema } // Hooks of the Card. func (Card) Hooks() []ent.Hook { return []ent.Hook{ // First hook. hook.On( func(next ent.Mutator) ent.Mutator { return hook.CardFunc(func(ctx context.Context, m *gen.CardMutation) (ent.Value, error) { if num, ok := m.Number(); ok && len(num) < 10 { return nil, fmt.Errorf("card number is too short") } return next.Mutate(ctx, m) }) }, // Limit the hook only for these operations. ent.OpCreate|ent.OpUpdate|ent.OpUpdateOne, ), // Second hook. func(next ent.Mutator) ent.Mutator { return ent.MutateFunc(func(ctx context.Context, m ent.Mutation) (ent.Value, error) { if s, ok := m.(interface{ SetName(string) }); ok { s.SetName("Boring") } v, err := next.Mutate(ctx, m) // Post mutation action. fmt.Println("new value:", v) return v, err }) }, } }
时间: 2024-02-10 14:21:18 浏览: 173
这是一个关于 CreditCard 实体的 ent schema 定义,其中定义了两个 hook。第一个 hook 是一个 CardFunc,它检查信用卡号是否满足要求,如果不满足,则返回一个错误。第二个 hook 是一个 MutateFunc,它将 CreditCard 的名称设置为 "Boring",并在 mutation 完成后打印出新值。两个 hook 分别在创建、更新和更新单个操作中触发。
阅读全文