github.com/ngocphuongnb/tetua@v0.0.7-alpha/packages/entrepository/role.go (about) 1 package entrepository 2 3 import ( 4 "context" 5 "fmt" 6 7 e "github.com/ngocphuongnb/tetua/app/entities" 8 "github.com/ngocphuongnb/tetua/packages/entrepository/ent" 9 "github.com/ngocphuongnb/tetua/packages/entrepository/ent/role" 10 ) 11 12 type RoleRepository struct { 13 *BaseRepository[e.Role, ent.Role, *ent.RoleQuery, *e.RoleFilter] 14 } 15 16 func (p *RoleRepository) ByName(ctx context.Context, name string) (*e.Role, error) { 17 r, err := p.Client.Role.Query().Where(role.NameEQ(name)).Only(ctx) 18 if err != nil { 19 return nil, EntError(err, fmt.Sprintf("role not found with name: %s", name)) 20 } 21 return entRoleToRole(r), err 22 } 23 24 func (p *RoleRepository) SetPermissions(ctx context.Context, id int, permissions []*e.PermissionValue) error { 25 var builders []*ent.PermissionCreate 26 27 for _, permission := range permissions { 28 us := p.Client.Permission. 29 Create(). 30 SetRoleID(id). 31 SetAction(permission.Action). 32 SetValue(string(permission.Value)) 33 builders = append(builders, us) 34 } 35 36 return p.Client.Permission. 37 CreateBulk(builders...). 38 OnConflict(). 39 UpdateNewValues(). 40 Exec(ctx) 41 } 42 43 func CreateRoleRepository(client *ent.Client) *RoleRepository { 44 return &RoleRepository{ 45 BaseRepository: &BaseRepository[e.Role, ent.Role, *ent.RoleQuery, *e.RoleFilter]{ 46 Name: "role", 47 Client: client, 48 ConvertFn: entRoleToRole, 49 ByIDFn: func(ctx context.Context, client *ent.Client, id int) (*ent.Role, error) { 50 return client.Role.Query().WithPermissions().Where(role.IDEQ(id)).Only(ctx) 51 }, 52 DeleteByIDFn: func(ctx context.Context, client *ent.Client, id int) error { 53 return client.Role.DeleteOneID(id).Exec(ctx) 54 }, 55 CreateFn: func(ctx context.Context, client *ent.Client, data *e.Role) (*ent.Role, error) { 56 return client.Role.Create(). 57 SetName(data.Name). 58 SetDescription(data.Description). 59 SetRoot(data.Root). 60 Save(ctx) 61 }, 62 UpdateFn: func(ctx context.Context, client *ent.Client, data *e.Role) (*ent.Role, error) { 63 return client.Role.UpdateOneID(data.ID). 64 SetName(data.Name). 65 SetDescription(data.Description). 66 SetRoot(data.Root). 67 Save(ctx) 68 }, 69 QueryFilterFn: func(client *ent.Client, filters ...*e.RoleFilter) *ent.RoleQuery { 70 query := client.Role.Query().WithPermissions() 71 72 if len(filters) > 0 && filters[0].Search != "" { 73 query = query.Where(role.NameContainsFold(filters[0].Search)) 74 } 75 76 return query 77 }, 78 FindFn: func(ctx context.Context, query *ent.RoleQuery, filters ...*e.RoleFilter) ([]*ent.Role, error) { 79 page, limit, sorts := getPaginateParams(filters...) 80 return query. 81 WithPermissions(). 82 Limit(limit). 83 Offset((page - 1) * limit). 84 Order(sorts...).All(ctx) 85 }, 86 }, 87 } 88 }