entc/gen: restructure hooks execution (#741)

Closed #739
This commit is contained in:
Ariel Mashraki
2020-09-09 10:41:17 +03:00
committed by GitHub
parent 3a2c897143
commit b4b4fa95d7
136 changed files with 2248 additions and 1081 deletions

View File

@@ -8,6 +8,7 @@ package ent
import (
"context"
"errors"
"fmt"
"github.com/facebook/ent/dialect/sql/sqlgraph"
@@ -44,14 +45,15 @@ func (tc *TaskCreate) Mutation() *TaskMutation {
// Save creates the Task in the database.
func (tc *TaskCreate) Save(ctx context.Context) (*Task, error) {
if err := tc.preSave(); err != nil {
return nil, err
}
var (
err error
node *Task
)
tc.defaults()
if len(tc.hooks) == 0 {
if err = tc.check(); err != nil {
return nil, err
}
node, err = tc.sqlSave(ctx)
} else {
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
@@ -59,6 +61,9 @@ func (tc *TaskCreate) Save(ctx context.Context) (*Task, error) {
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err = tc.check(); err != nil {
return nil, err
}
tc.mutation = mutation
node, err = tc.sqlSave(ctx)
mutation.done = true
@@ -83,11 +88,19 @@ func (tc *TaskCreate) SaveX(ctx context.Context) *Task {
return v
}
func (tc *TaskCreate) preSave() error {
// defaults sets the default values of the builder before save.
func (tc *TaskCreate) defaults() {
if _, ok := tc.mutation.Priority(); !ok {
v := task.DefaultPriority
tc.mutation.SetPriority(v)
}
}
// check runs all checks and user-defined validators on the builder.
func (tc *TaskCreate) check() error {
if _, ok := tc.mutation.Priority(); !ok {
return &ValidationError{Name: "priority", err: errors.New("ent: missing required field \"priority\"")}
}
if v, ok := tc.mutation.Priority(); ok {
if err := task.PriorityValidator(int(v)); err != nil {
return &ValidationError{Name: "priority", err: fmt.Errorf("ent: validator failed for field \"priority\": %w", err)}
@@ -145,14 +158,15 @@ func (tcb *TaskCreateBulk) Save(ctx context.Context) ([]*Task, error) {
for i := range tcb.builders {
func(i int, root context.Context) {
builder := tcb.builders[i]
builder.defaults()
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
if err := builder.preSave(); err != nil {
return nil, err
}
mutation, ok := m.(*TaskMutation)
if !ok {
return nil, fmt.Errorf("unexpected mutation type %T", m)
}
if err := builder.check(); err != nil {
return nil, err
}
builder.mutation = mutation
nodes[i], specs[i] = builder.createSpec()
var err error