github.com/ngocphuongnb/tetua@v0.0.7-alpha/packages/entrepository/ent/role_update.go (about)

     1  // Code generated by entc, DO NOT EDIT.
     2  
     3  package ent
     4  
     5  import (
     6  	"context"
     7  	"errors"
     8  	"fmt"
     9  	"time"
    10  
    11  	"entgo.io/ent/dialect/sql"
    12  	"entgo.io/ent/dialect/sql/sqlgraph"
    13  	"entgo.io/ent/schema/field"
    14  	"github.com/ngocphuongnb/tetua/packages/entrepository/ent/permission"
    15  	"github.com/ngocphuongnb/tetua/packages/entrepository/ent/predicate"
    16  	"github.com/ngocphuongnb/tetua/packages/entrepository/ent/role"
    17  	"github.com/ngocphuongnb/tetua/packages/entrepository/ent/user"
    18  )
    19  
    20  // RoleUpdate is the builder for updating Role entities.
    21  type RoleUpdate struct {
    22  	config
    23  	hooks    []Hook
    24  	mutation *RoleMutation
    25  }
    26  
    27  // Where appends a list predicates to the RoleUpdate builder.
    28  func (ru *RoleUpdate) Where(ps ...predicate.Role) *RoleUpdate {
    29  	ru.mutation.Where(ps...)
    30  	return ru
    31  }
    32  
    33  // SetUpdatedAt sets the "updated_at" field.
    34  func (ru *RoleUpdate) SetUpdatedAt(t time.Time) *RoleUpdate {
    35  	ru.mutation.SetUpdatedAt(t)
    36  	return ru
    37  }
    38  
    39  // SetDeletedAt sets the "deleted_at" field.
    40  func (ru *RoleUpdate) SetDeletedAt(t time.Time) *RoleUpdate {
    41  	ru.mutation.SetDeletedAt(t)
    42  	return ru
    43  }
    44  
    45  // SetNillableDeletedAt sets the "deleted_at" field if the given value is not nil.
    46  func (ru *RoleUpdate) SetNillableDeletedAt(t *time.Time) *RoleUpdate {
    47  	if t != nil {
    48  		ru.SetDeletedAt(*t)
    49  	}
    50  	return ru
    51  }
    52  
    53  // ClearDeletedAt clears the value of the "deleted_at" field.
    54  func (ru *RoleUpdate) ClearDeletedAt() *RoleUpdate {
    55  	ru.mutation.ClearDeletedAt()
    56  	return ru
    57  }
    58  
    59  // SetName sets the "name" field.
    60  func (ru *RoleUpdate) SetName(s string) *RoleUpdate {
    61  	ru.mutation.SetName(s)
    62  	return ru
    63  }
    64  
    65  // SetDescription sets the "description" field.
    66  func (ru *RoleUpdate) SetDescription(s string) *RoleUpdate {
    67  	ru.mutation.SetDescription(s)
    68  	return ru
    69  }
    70  
    71  // SetNillableDescription sets the "description" field if the given value is not nil.
    72  func (ru *RoleUpdate) SetNillableDescription(s *string) *RoleUpdate {
    73  	if s != nil {
    74  		ru.SetDescription(*s)
    75  	}
    76  	return ru
    77  }
    78  
    79  // ClearDescription clears the value of the "description" field.
    80  func (ru *RoleUpdate) ClearDescription() *RoleUpdate {
    81  	ru.mutation.ClearDescription()
    82  	return ru
    83  }
    84  
    85  // SetRoot sets the "root" field.
    86  func (ru *RoleUpdate) SetRoot(b bool) *RoleUpdate {
    87  	ru.mutation.SetRoot(b)
    88  	return ru
    89  }
    90  
    91  // SetNillableRoot sets the "root" field if the given value is not nil.
    92  func (ru *RoleUpdate) SetNillableRoot(b *bool) *RoleUpdate {
    93  	if b != nil {
    94  		ru.SetRoot(*b)
    95  	}
    96  	return ru
    97  }
    98  
    99  // ClearRoot clears the value of the "root" field.
   100  func (ru *RoleUpdate) ClearRoot() *RoleUpdate {
   101  	ru.mutation.ClearRoot()
   102  	return ru
   103  }
   104  
   105  // AddPermissionIDs adds the "permissions" edge to the Permission entity by IDs.
   106  func (ru *RoleUpdate) AddPermissionIDs(ids ...int) *RoleUpdate {
   107  	ru.mutation.AddPermissionIDs(ids...)
   108  	return ru
   109  }
   110  
   111  // AddPermissions adds the "permissions" edges to the Permission entity.
   112  func (ru *RoleUpdate) AddPermissions(p ...*Permission) *RoleUpdate {
   113  	ids := make([]int, len(p))
   114  	for i := range p {
   115  		ids[i] = p[i].ID
   116  	}
   117  	return ru.AddPermissionIDs(ids...)
   118  }
   119  
   120  // AddUserIDs adds the "users" edge to the User entity by IDs.
   121  func (ru *RoleUpdate) AddUserIDs(ids ...int) *RoleUpdate {
   122  	ru.mutation.AddUserIDs(ids...)
   123  	return ru
   124  }
   125  
   126  // AddUsers adds the "users" edges to the User entity.
   127  func (ru *RoleUpdate) AddUsers(u ...*User) *RoleUpdate {
   128  	ids := make([]int, len(u))
   129  	for i := range u {
   130  		ids[i] = u[i].ID
   131  	}
   132  	return ru.AddUserIDs(ids...)
   133  }
   134  
   135  // Mutation returns the RoleMutation object of the builder.
   136  func (ru *RoleUpdate) Mutation() *RoleMutation {
   137  	return ru.mutation
   138  }
   139  
   140  // ClearPermissions clears all "permissions" edges to the Permission entity.
   141  func (ru *RoleUpdate) ClearPermissions() *RoleUpdate {
   142  	ru.mutation.ClearPermissions()
   143  	return ru
   144  }
   145  
   146  // RemovePermissionIDs removes the "permissions" edge to Permission entities by IDs.
   147  func (ru *RoleUpdate) RemovePermissionIDs(ids ...int) *RoleUpdate {
   148  	ru.mutation.RemovePermissionIDs(ids...)
   149  	return ru
   150  }
   151  
   152  // RemovePermissions removes "permissions" edges to Permission entities.
   153  func (ru *RoleUpdate) RemovePermissions(p ...*Permission) *RoleUpdate {
   154  	ids := make([]int, len(p))
   155  	for i := range p {
   156  		ids[i] = p[i].ID
   157  	}
   158  	return ru.RemovePermissionIDs(ids...)
   159  }
   160  
   161  // ClearUsers clears all "users" edges to the User entity.
   162  func (ru *RoleUpdate) ClearUsers() *RoleUpdate {
   163  	ru.mutation.ClearUsers()
   164  	return ru
   165  }
   166  
   167  // RemoveUserIDs removes the "users" edge to User entities by IDs.
   168  func (ru *RoleUpdate) RemoveUserIDs(ids ...int) *RoleUpdate {
   169  	ru.mutation.RemoveUserIDs(ids...)
   170  	return ru
   171  }
   172  
   173  // RemoveUsers removes "users" edges to User entities.
   174  func (ru *RoleUpdate) RemoveUsers(u ...*User) *RoleUpdate {
   175  	ids := make([]int, len(u))
   176  	for i := range u {
   177  		ids[i] = u[i].ID
   178  	}
   179  	return ru.RemoveUserIDs(ids...)
   180  }
   181  
   182  // Save executes the query and returns the number of nodes affected by the update operation.
   183  func (ru *RoleUpdate) Save(ctx context.Context) (int, error) {
   184  	var (
   185  		err      error
   186  		affected int
   187  	)
   188  	ru.defaults()
   189  	if len(ru.hooks) == 0 {
   190  		affected, err = ru.sqlSave(ctx)
   191  	} else {
   192  		var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
   193  			mutation, ok := m.(*RoleMutation)
   194  			if !ok {
   195  				return nil, fmt.Errorf("unexpected mutation type %T", m)
   196  			}
   197  			ru.mutation = mutation
   198  			affected, err = ru.sqlSave(ctx)
   199  			mutation.done = true
   200  			return affected, err
   201  		})
   202  		for i := len(ru.hooks) - 1; i >= 0; i-- {
   203  			if ru.hooks[i] == nil {
   204  				return 0, fmt.Errorf("ent: uninitialized hook (forgotten import ent/runtime?)")
   205  			}
   206  			mut = ru.hooks[i](mut)
   207  		}
   208  		if _, err := mut.Mutate(ctx, ru.mutation); err != nil {
   209  			return 0, err
   210  		}
   211  	}
   212  	return affected, err
   213  }
   214  
   215  // SaveX is like Save, but panics if an error occurs.
   216  func (ru *RoleUpdate) SaveX(ctx context.Context) int {
   217  	affected, err := ru.Save(ctx)
   218  	if err != nil {
   219  		panic(err)
   220  	}
   221  	return affected
   222  }
   223  
   224  // Exec executes the query.
   225  func (ru *RoleUpdate) Exec(ctx context.Context) error {
   226  	_, err := ru.Save(ctx)
   227  	return err
   228  }
   229  
   230  // ExecX is like Exec, but panics if an error occurs.
   231  func (ru *RoleUpdate) ExecX(ctx context.Context) {
   232  	if err := ru.Exec(ctx); err != nil {
   233  		panic(err)
   234  	}
   235  }
   236  
   237  // defaults sets the default values of the builder before save.
   238  func (ru *RoleUpdate) defaults() {
   239  	if _, ok := ru.mutation.UpdatedAt(); !ok {
   240  		v := role.UpdateDefaultUpdatedAt()
   241  		ru.mutation.SetUpdatedAt(v)
   242  	}
   243  }
   244  
   245  func (ru *RoleUpdate) sqlSave(ctx context.Context) (n int, err error) {
   246  	_spec := &sqlgraph.UpdateSpec{
   247  		Node: &sqlgraph.NodeSpec{
   248  			Table:   role.Table,
   249  			Columns: role.Columns,
   250  			ID: &sqlgraph.FieldSpec{
   251  				Type:   field.TypeInt,
   252  				Column: role.FieldID,
   253  			},
   254  		},
   255  	}
   256  	if ps := ru.mutation.predicates; len(ps) > 0 {
   257  		_spec.Predicate = func(selector *sql.Selector) {
   258  			for i := range ps {
   259  				ps[i](selector)
   260  			}
   261  		}
   262  	}
   263  	if value, ok := ru.mutation.UpdatedAt(); ok {
   264  		_spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{
   265  			Type:   field.TypeTime,
   266  			Value:  value,
   267  			Column: role.FieldUpdatedAt,
   268  		})
   269  	}
   270  	if value, ok := ru.mutation.DeletedAt(); ok {
   271  		_spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{
   272  			Type:   field.TypeTime,
   273  			Value:  value,
   274  			Column: role.FieldDeletedAt,
   275  		})
   276  	}
   277  	if ru.mutation.DeletedAtCleared() {
   278  		_spec.Fields.Clear = append(_spec.Fields.Clear, &sqlgraph.FieldSpec{
   279  			Type:   field.TypeTime,
   280  			Column: role.FieldDeletedAt,
   281  		})
   282  	}
   283  	if value, ok := ru.mutation.Name(); ok {
   284  		_spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{
   285  			Type:   field.TypeString,
   286  			Value:  value,
   287  			Column: role.FieldName,
   288  		})
   289  	}
   290  	if value, ok := ru.mutation.Description(); ok {
   291  		_spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{
   292  			Type:   field.TypeString,
   293  			Value:  value,
   294  			Column: role.FieldDescription,
   295  		})
   296  	}
   297  	if ru.mutation.DescriptionCleared() {
   298  		_spec.Fields.Clear = append(_spec.Fields.Clear, &sqlgraph.FieldSpec{
   299  			Type:   field.TypeString,
   300  			Column: role.FieldDescription,
   301  		})
   302  	}
   303  	if value, ok := ru.mutation.Root(); ok {
   304  		_spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{
   305  			Type:   field.TypeBool,
   306  			Value:  value,
   307  			Column: role.FieldRoot,
   308  		})
   309  	}
   310  	if ru.mutation.RootCleared() {
   311  		_spec.Fields.Clear = append(_spec.Fields.Clear, &sqlgraph.FieldSpec{
   312  			Type:   field.TypeBool,
   313  			Column: role.FieldRoot,
   314  		})
   315  	}
   316  	if ru.mutation.PermissionsCleared() {
   317  		edge := &sqlgraph.EdgeSpec{
   318  			Rel:     sqlgraph.O2M,
   319  			Inverse: false,
   320  			Table:   role.PermissionsTable,
   321  			Columns: []string{role.PermissionsColumn},
   322  			Bidi:    false,
   323  			Target: &sqlgraph.EdgeTarget{
   324  				IDSpec: &sqlgraph.FieldSpec{
   325  					Type:   field.TypeInt,
   326  					Column: permission.FieldID,
   327  				},
   328  			},
   329  		}
   330  		_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
   331  	}
   332  	if nodes := ru.mutation.RemovedPermissionsIDs(); len(nodes) > 0 && !ru.mutation.PermissionsCleared() {
   333  		edge := &sqlgraph.EdgeSpec{
   334  			Rel:     sqlgraph.O2M,
   335  			Inverse: false,
   336  			Table:   role.PermissionsTable,
   337  			Columns: []string{role.PermissionsColumn},
   338  			Bidi:    false,
   339  			Target: &sqlgraph.EdgeTarget{
   340  				IDSpec: &sqlgraph.FieldSpec{
   341  					Type:   field.TypeInt,
   342  					Column: permission.FieldID,
   343  				},
   344  			},
   345  		}
   346  		for _, k := range nodes {
   347  			edge.Target.Nodes = append(edge.Target.Nodes, k)
   348  		}
   349  		_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
   350  	}
   351  	if nodes := ru.mutation.PermissionsIDs(); len(nodes) > 0 {
   352  		edge := &sqlgraph.EdgeSpec{
   353  			Rel:     sqlgraph.O2M,
   354  			Inverse: false,
   355  			Table:   role.PermissionsTable,
   356  			Columns: []string{role.PermissionsColumn},
   357  			Bidi:    false,
   358  			Target: &sqlgraph.EdgeTarget{
   359  				IDSpec: &sqlgraph.FieldSpec{
   360  					Type:   field.TypeInt,
   361  					Column: permission.FieldID,
   362  				},
   363  			},
   364  		}
   365  		for _, k := range nodes {
   366  			edge.Target.Nodes = append(edge.Target.Nodes, k)
   367  		}
   368  		_spec.Edges.Add = append(_spec.Edges.Add, edge)
   369  	}
   370  	if ru.mutation.UsersCleared() {
   371  		edge := &sqlgraph.EdgeSpec{
   372  			Rel:     sqlgraph.M2M,
   373  			Inverse: false,
   374  			Table:   role.UsersTable,
   375  			Columns: role.UsersPrimaryKey,
   376  			Bidi:    false,
   377  			Target: &sqlgraph.EdgeTarget{
   378  				IDSpec: &sqlgraph.FieldSpec{
   379  					Type:   field.TypeInt,
   380  					Column: user.FieldID,
   381  				},
   382  			},
   383  		}
   384  		_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
   385  	}
   386  	if nodes := ru.mutation.RemovedUsersIDs(); len(nodes) > 0 && !ru.mutation.UsersCleared() {
   387  		edge := &sqlgraph.EdgeSpec{
   388  			Rel:     sqlgraph.M2M,
   389  			Inverse: false,
   390  			Table:   role.UsersTable,
   391  			Columns: role.UsersPrimaryKey,
   392  			Bidi:    false,
   393  			Target: &sqlgraph.EdgeTarget{
   394  				IDSpec: &sqlgraph.FieldSpec{
   395  					Type:   field.TypeInt,
   396  					Column: user.FieldID,
   397  				},
   398  			},
   399  		}
   400  		for _, k := range nodes {
   401  			edge.Target.Nodes = append(edge.Target.Nodes, k)
   402  		}
   403  		_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
   404  	}
   405  	if nodes := ru.mutation.UsersIDs(); len(nodes) > 0 {
   406  		edge := &sqlgraph.EdgeSpec{
   407  			Rel:     sqlgraph.M2M,
   408  			Inverse: false,
   409  			Table:   role.UsersTable,
   410  			Columns: role.UsersPrimaryKey,
   411  			Bidi:    false,
   412  			Target: &sqlgraph.EdgeTarget{
   413  				IDSpec: &sqlgraph.FieldSpec{
   414  					Type:   field.TypeInt,
   415  					Column: user.FieldID,
   416  				},
   417  			},
   418  		}
   419  		for _, k := range nodes {
   420  			edge.Target.Nodes = append(edge.Target.Nodes, k)
   421  		}
   422  		_spec.Edges.Add = append(_spec.Edges.Add, edge)
   423  	}
   424  	if n, err = sqlgraph.UpdateNodes(ctx, ru.driver, _spec); err != nil {
   425  		if _, ok := err.(*sqlgraph.NotFoundError); ok {
   426  			err = &NotFoundError{role.Label}
   427  		} else if sqlgraph.IsConstraintError(err) {
   428  			err = &ConstraintError{err.Error(), err}
   429  		}
   430  		return 0, err
   431  	}
   432  	return n, nil
   433  }
   434  
   435  // RoleUpdateOne is the builder for updating a single Role entity.
   436  type RoleUpdateOne struct {
   437  	config
   438  	fields   []string
   439  	hooks    []Hook
   440  	mutation *RoleMutation
   441  }
   442  
   443  // SetUpdatedAt sets the "updated_at" field.
   444  func (ruo *RoleUpdateOne) SetUpdatedAt(t time.Time) *RoleUpdateOne {
   445  	ruo.mutation.SetUpdatedAt(t)
   446  	return ruo
   447  }
   448  
   449  // SetDeletedAt sets the "deleted_at" field.
   450  func (ruo *RoleUpdateOne) SetDeletedAt(t time.Time) *RoleUpdateOne {
   451  	ruo.mutation.SetDeletedAt(t)
   452  	return ruo
   453  }
   454  
   455  // SetNillableDeletedAt sets the "deleted_at" field if the given value is not nil.
   456  func (ruo *RoleUpdateOne) SetNillableDeletedAt(t *time.Time) *RoleUpdateOne {
   457  	if t != nil {
   458  		ruo.SetDeletedAt(*t)
   459  	}
   460  	return ruo
   461  }
   462  
   463  // ClearDeletedAt clears the value of the "deleted_at" field.
   464  func (ruo *RoleUpdateOne) ClearDeletedAt() *RoleUpdateOne {
   465  	ruo.mutation.ClearDeletedAt()
   466  	return ruo
   467  }
   468  
   469  // SetName sets the "name" field.
   470  func (ruo *RoleUpdateOne) SetName(s string) *RoleUpdateOne {
   471  	ruo.mutation.SetName(s)
   472  	return ruo
   473  }
   474  
   475  // SetDescription sets the "description" field.
   476  func (ruo *RoleUpdateOne) SetDescription(s string) *RoleUpdateOne {
   477  	ruo.mutation.SetDescription(s)
   478  	return ruo
   479  }
   480  
   481  // SetNillableDescription sets the "description" field if the given value is not nil.
   482  func (ruo *RoleUpdateOne) SetNillableDescription(s *string) *RoleUpdateOne {
   483  	if s != nil {
   484  		ruo.SetDescription(*s)
   485  	}
   486  	return ruo
   487  }
   488  
   489  // ClearDescription clears the value of the "description" field.
   490  func (ruo *RoleUpdateOne) ClearDescription() *RoleUpdateOne {
   491  	ruo.mutation.ClearDescription()
   492  	return ruo
   493  }
   494  
   495  // SetRoot sets the "root" field.
   496  func (ruo *RoleUpdateOne) SetRoot(b bool) *RoleUpdateOne {
   497  	ruo.mutation.SetRoot(b)
   498  	return ruo
   499  }
   500  
   501  // SetNillableRoot sets the "root" field if the given value is not nil.
   502  func (ruo *RoleUpdateOne) SetNillableRoot(b *bool) *RoleUpdateOne {
   503  	if b != nil {
   504  		ruo.SetRoot(*b)
   505  	}
   506  	return ruo
   507  }
   508  
   509  // ClearRoot clears the value of the "root" field.
   510  func (ruo *RoleUpdateOne) ClearRoot() *RoleUpdateOne {
   511  	ruo.mutation.ClearRoot()
   512  	return ruo
   513  }
   514  
   515  // AddPermissionIDs adds the "permissions" edge to the Permission entity by IDs.
   516  func (ruo *RoleUpdateOne) AddPermissionIDs(ids ...int) *RoleUpdateOne {
   517  	ruo.mutation.AddPermissionIDs(ids...)
   518  	return ruo
   519  }
   520  
   521  // AddPermissions adds the "permissions" edges to the Permission entity.
   522  func (ruo *RoleUpdateOne) AddPermissions(p ...*Permission) *RoleUpdateOne {
   523  	ids := make([]int, len(p))
   524  	for i := range p {
   525  		ids[i] = p[i].ID
   526  	}
   527  	return ruo.AddPermissionIDs(ids...)
   528  }
   529  
   530  // AddUserIDs adds the "users" edge to the User entity by IDs.
   531  func (ruo *RoleUpdateOne) AddUserIDs(ids ...int) *RoleUpdateOne {
   532  	ruo.mutation.AddUserIDs(ids...)
   533  	return ruo
   534  }
   535  
   536  // AddUsers adds the "users" edges to the User entity.
   537  func (ruo *RoleUpdateOne) AddUsers(u ...*User) *RoleUpdateOne {
   538  	ids := make([]int, len(u))
   539  	for i := range u {
   540  		ids[i] = u[i].ID
   541  	}
   542  	return ruo.AddUserIDs(ids...)
   543  }
   544  
   545  // Mutation returns the RoleMutation object of the builder.
   546  func (ruo *RoleUpdateOne) Mutation() *RoleMutation {
   547  	return ruo.mutation
   548  }
   549  
   550  // ClearPermissions clears all "permissions" edges to the Permission entity.
   551  func (ruo *RoleUpdateOne) ClearPermissions() *RoleUpdateOne {
   552  	ruo.mutation.ClearPermissions()
   553  	return ruo
   554  }
   555  
   556  // RemovePermissionIDs removes the "permissions" edge to Permission entities by IDs.
   557  func (ruo *RoleUpdateOne) RemovePermissionIDs(ids ...int) *RoleUpdateOne {
   558  	ruo.mutation.RemovePermissionIDs(ids...)
   559  	return ruo
   560  }
   561  
   562  // RemovePermissions removes "permissions" edges to Permission entities.
   563  func (ruo *RoleUpdateOne) RemovePermissions(p ...*Permission) *RoleUpdateOne {
   564  	ids := make([]int, len(p))
   565  	for i := range p {
   566  		ids[i] = p[i].ID
   567  	}
   568  	return ruo.RemovePermissionIDs(ids...)
   569  }
   570  
   571  // ClearUsers clears all "users" edges to the User entity.
   572  func (ruo *RoleUpdateOne) ClearUsers() *RoleUpdateOne {
   573  	ruo.mutation.ClearUsers()
   574  	return ruo
   575  }
   576  
   577  // RemoveUserIDs removes the "users" edge to User entities by IDs.
   578  func (ruo *RoleUpdateOne) RemoveUserIDs(ids ...int) *RoleUpdateOne {
   579  	ruo.mutation.RemoveUserIDs(ids...)
   580  	return ruo
   581  }
   582  
   583  // RemoveUsers removes "users" edges to User entities.
   584  func (ruo *RoleUpdateOne) RemoveUsers(u ...*User) *RoleUpdateOne {
   585  	ids := make([]int, len(u))
   586  	for i := range u {
   587  		ids[i] = u[i].ID
   588  	}
   589  	return ruo.RemoveUserIDs(ids...)
   590  }
   591  
   592  // Select allows selecting one or more fields (columns) of the returned entity.
   593  // The default is selecting all fields defined in the entity schema.
   594  func (ruo *RoleUpdateOne) Select(field string, fields ...string) *RoleUpdateOne {
   595  	ruo.fields = append([]string{field}, fields...)
   596  	return ruo
   597  }
   598  
   599  // Save executes the query and returns the updated Role entity.
   600  func (ruo *RoleUpdateOne) Save(ctx context.Context) (*Role, error) {
   601  	var (
   602  		err  error
   603  		node *Role
   604  	)
   605  	ruo.defaults()
   606  	if len(ruo.hooks) == 0 {
   607  		node, err = ruo.sqlSave(ctx)
   608  	} else {
   609  		var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
   610  			mutation, ok := m.(*RoleMutation)
   611  			if !ok {
   612  				return nil, fmt.Errorf("unexpected mutation type %T", m)
   613  			}
   614  			ruo.mutation = mutation
   615  			node, err = ruo.sqlSave(ctx)
   616  			mutation.done = true
   617  			return node, err
   618  		})
   619  		for i := len(ruo.hooks) - 1; i >= 0; i-- {
   620  			if ruo.hooks[i] == nil {
   621  				return nil, fmt.Errorf("ent: uninitialized hook (forgotten import ent/runtime?)")
   622  			}
   623  			mut = ruo.hooks[i](mut)
   624  		}
   625  		if _, err := mut.Mutate(ctx, ruo.mutation); err != nil {
   626  			return nil, err
   627  		}
   628  	}
   629  	return node, err
   630  }
   631  
   632  // SaveX is like Save, but panics if an error occurs.
   633  func (ruo *RoleUpdateOne) SaveX(ctx context.Context) *Role {
   634  	node, err := ruo.Save(ctx)
   635  	if err != nil {
   636  		panic(err)
   637  	}
   638  	return node
   639  }
   640  
   641  // Exec executes the query on the entity.
   642  func (ruo *RoleUpdateOne) Exec(ctx context.Context) error {
   643  	_, err := ruo.Save(ctx)
   644  	return err
   645  }
   646  
   647  // ExecX is like Exec, but panics if an error occurs.
   648  func (ruo *RoleUpdateOne) ExecX(ctx context.Context) {
   649  	if err := ruo.Exec(ctx); err != nil {
   650  		panic(err)
   651  	}
   652  }
   653  
   654  // defaults sets the default values of the builder before save.
   655  func (ruo *RoleUpdateOne) defaults() {
   656  	if _, ok := ruo.mutation.UpdatedAt(); !ok {
   657  		v := role.UpdateDefaultUpdatedAt()
   658  		ruo.mutation.SetUpdatedAt(v)
   659  	}
   660  }
   661  
   662  func (ruo *RoleUpdateOne) sqlSave(ctx context.Context) (_node *Role, err error) {
   663  	_spec := &sqlgraph.UpdateSpec{
   664  		Node: &sqlgraph.NodeSpec{
   665  			Table:   role.Table,
   666  			Columns: role.Columns,
   667  			ID: &sqlgraph.FieldSpec{
   668  				Type:   field.TypeInt,
   669  				Column: role.FieldID,
   670  			},
   671  		},
   672  	}
   673  	id, ok := ruo.mutation.ID()
   674  	if !ok {
   675  		return nil, &ValidationError{Name: "id", err: errors.New(`ent: missing "Role.id" for update`)}
   676  	}
   677  	_spec.Node.ID.Value = id
   678  	if fields := ruo.fields; len(fields) > 0 {
   679  		_spec.Node.Columns = make([]string, 0, len(fields))
   680  		_spec.Node.Columns = append(_spec.Node.Columns, role.FieldID)
   681  		for _, f := range fields {
   682  			if !role.ValidColumn(f) {
   683  				return nil, &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)}
   684  			}
   685  			if f != role.FieldID {
   686  				_spec.Node.Columns = append(_spec.Node.Columns, f)
   687  			}
   688  		}
   689  	}
   690  	if ps := ruo.mutation.predicates; len(ps) > 0 {
   691  		_spec.Predicate = func(selector *sql.Selector) {
   692  			for i := range ps {
   693  				ps[i](selector)
   694  			}
   695  		}
   696  	}
   697  	if value, ok := ruo.mutation.UpdatedAt(); ok {
   698  		_spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{
   699  			Type:   field.TypeTime,
   700  			Value:  value,
   701  			Column: role.FieldUpdatedAt,
   702  		})
   703  	}
   704  	if value, ok := ruo.mutation.DeletedAt(); ok {
   705  		_spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{
   706  			Type:   field.TypeTime,
   707  			Value:  value,
   708  			Column: role.FieldDeletedAt,
   709  		})
   710  	}
   711  	if ruo.mutation.DeletedAtCleared() {
   712  		_spec.Fields.Clear = append(_spec.Fields.Clear, &sqlgraph.FieldSpec{
   713  			Type:   field.TypeTime,
   714  			Column: role.FieldDeletedAt,
   715  		})
   716  	}
   717  	if value, ok := ruo.mutation.Name(); ok {
   718  		_spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{
   719  			Type:   field.TypeString,
   720  			Value:  value,
   721  			Column: role.FieldName,
   722  		})
   723  	}
   724  	if value, ok := ruo.mutation.Description(); ok {
   725  		_spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{
   726  			Type:   field.TypeString,
   727  			Value:  value,
   728  			Column: role.FieldDescription,
   729  		})
   730  	}
   731  	if ruo.mutation.DescriptionCleared() {
   732  		_spec.Fields.Clear = append(_spec.Fields.Clear, &sqlgraph.FieldSpec{
   733  			Type:   field.TypeString,
   734  			Column: role.FieldDescription,
   735  		})
   736  	}
   737  	if value, ok := ruo.mutation.Root(); ok {
   738  		_spec.Fields.Set = append(_spec.Fields.Set, &sqlgraph.FieldSpec{
   739  			Type:   field.TypeBool,
   740  			Value:  value,
   741  			Column: role.FieldRoot,
   742  		})
   743  	}
   744  	if ruo.mutation.RootCleared() {
   745  		_spec.Fields.Clear = append(_spec.Fields.Clear, &sqlgraph.FieldSpec{
   746  			Type:   field.TypeBool,
   747  			Column: role.FieldRoot,
   748  		})
   749  	}
   750  	if ruo.mutation.PermissionsCleared() {
   751  		edge := &sqlgraph.EdgeSpec{
   752  			Rel:     sqlgraph.O2M,
   753  			Inverse: false,
   754  			Table:   role.PermissionsTable,
   755  			Columns: []string{role.PermissionsColumn},
   756  			Bidi:    false,
   757  			Target: &sqlgraph.EdgeTarget{
   758  				IDSpec: &sqlgraph.FieldSpec{
   759  					Type:   field.TypeInt,
   760  					Column: permission.FieldID,
   761  				},
   762  			},
   763  		}
   764  		_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
   765  	}
   766  	if nodes := ruo.mutation.RemovedPermissionsIDs(); len(nodes) > 0 && !ruo.mutation.PermissionsCleared() {
   767  		edge := &sqlgraph.EdgeSpec{
   768  			Rel:     sqlgraph.O2M,
   769  			Inverse: false,
   770  			Table:   role.PermissionsTable,
   771  			Columns: []string{role.PermissionsColumn},
   772  			Bidi:    false,
   773  			Target: &sqlgraph.EdgeTarget{
   774  				IDSpec: &sqlgraph.FieldSpec{
   775  					Type:   field.TypeInt,
   776  					Column: permission.FieldID,
   777  				},
   778  			},
   779  		}
   780  		for _, k := range nodes {
   781  			edge.Target.Nodes = append(edge.Target.Nodes, k)
   782  		}
   783  		_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
   784  	}
   785  	if nodes := ruo.mutation.PermissionsIDs(); len(nodes) > 0 {
   786  		edge := &sqlgraph.EdgeSpec{
   787  			Rel:     sqlgraph.O2M,
   788  			Inverse: false,
   789  			Table:   role.PermissionsTable,
   790  			Columns: []string{role.PermissionsColumn},
   791  			Bidi:    false,
   792  			Target: &sqlgraph.EdgeTarget{
   793  				IDSpec: &sqlgraph.FieldSpec{
   794  					Type:   field.TypeInt,
   795  					Column: permission.FieldID,
   796  				},
   797  			},
   798  		}
   799  		for _, k := range nodes {
   800  			edge.Target.Nodes = append(edge.Target.Nodes, k)
   801  		}
   802  		_spec.Edges.Add = append(_spec.Edges.Add, edge)
   803  	}
   804  	if ruo.mutation.UsersCleared() {
   805  		edge := &sqlgraph.EdgeSpec{
   806  			Rel:     sqlgraph.M2M,
   807  			Inverse: false,
   808  			Table:   role.UsersTable,
   809  			Columns: role.UsersPrimaryKey,
   810  			Bidi:    false,
   811  			Target: &sqlgraph.EdgeTarget{
   812  				IDSpec: &sqlgraph.FieldSpec{
   813  					Type:   field.TypeInt,
   814  					Column: user.FieldID,
   815  				},
   816  			},
   817  		}
   818  		_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
   819  	}
   820  	if nodes := ruo.mutation.RemovedUsersIDs(); len(nodes) > 0 && !ruo.mutation.UsersCleared() {
   821  		edge := &sqlgraph.EdgeSpec{
   822  			Rel:     sqlgraph.M2M,
   823  			Inverse: false,
   824  			Table:   role.UsersTable,
   825  			Columns: role.UsersPrimaryKey,
   826  			Bidi:    false,
   827  			Target: &sqlgraph.EdgeTarget{
   828  				IDSpec: &sqlgraph.FieldSpec{
   829  					Type:   field.TypeInt,
   830  					Column: user.FieldID,
   831  				},
   832  			},
   833  		}
   834  		for _, k := range nodes {
   835  			edge.Target.Nodes = append(edge.Target.Nodes, k)
   836  		}
   837  		_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
   838  	}
   839  	if nodes := ruo.mutation.UsersIDs(); len(nodes) > 0 {
   840  		edge := &sqlgraph.EdgeSpec{
   841  			Rel:     sqlgraph.M2M,
   842  			Inverse: false,
   843  			Table:   role.UsersTable,
   844  			Columns: role.UsersPrimaryKey,
   845  			Bidi:    false,
   846  			Target: &sqlgraph.EdgeTarget{
   847  				IDSpec: &sqlgraph.FieldSpec{
   848  					Type:   field.TypeInt,
   849  					Column: user.FieldID,
   850  				},
   851  			},
   852  		}
   853  		for _, k := range nodes {
   854  			edge.Target.Nodes = append(edge.Target.Nodes, k)
   855  		}
   856  		_spec.Edges.Add = append(_spec.Edges.Add, edge)
   857  	}
   858  	_node = &Role{config: ruo.config}
   859  	_spec.Assign = _node.assignValues
   860  	_spec.ScanValues = _node.scanValues
   861  	if err = sqlgraph.UpdateNode(ctx, ruo.driver, _spec); err != nil {
   862  		if _, ok := err.(*sqlgraph.NotFoundError); ok {
   863  			err = &NotFoundError{role.Label}
   864  		} else if sqlgraph.IsConstraintError(err) {
   865  			err = &ConstraintError{err.Error(), err}
   866  		}
   867  		return nil, err
   868  	}
   869  	return _node, nil
   870  }