package role import ( "busniess-user-center/config" roleModel "busniess-user-center/internal/models/role" "busniess-user-center/internal/repo" "context" "fmt" "github.com/jinzhu/copier" "github.com/samber/do" "go.uber.org/zap" "gorm.io/gorm" ) func init() { do.Provide(nil, NewRoleService) } type roleService struct { logger *zap.SugaredLogger roleRepo repo.RoleRepo conf *config.AppConfig } func NewRoleService(i *do.Injector) (RoleService, error) { return &roleService{ logger: do.MustInvoke[*zap.SugaredLogger](i), roleRepo: do.MustInvoke[repo.RoleRepo](i), conf: do.MustInvoke[*config.AppConfig](i), }, nil } func (o *roleService) Create(ctx context.Context, info *roleModel.CreateReq) error { dbRole := repo.Role{ Code: info.Code, Name: info.Name, } exist, err := o.roleRepo.ExistCode(ctx, info.Code) if err != nil { return err } if exist { return fmt.Errorf("角色code:%s已经存在", info.Code) } return o.roleRepo.Create(ctx, dbRole) } func (o *roleService) Save(ctx context.Context, info *roleModel.SaveReq) error { dbRole, err := o.roleRepo.GetById(ctx, info.Id) if err != nil && err != gorm.ErrRecordNotFound { return err } if err == gorm.ErrRecordNotFound { return fmt.Errorf("角色:%s不存在", info.Code) } dbRole.Name = info.Name return o.roleRepo.Save(ctx, dbRole) } func (o *roleService) Delete(ctx context.Context, info *roleModel.DelReq) error { return o.roleRepo.DelById(ctx, info.Id) } func (o *roleService) Role(ctx context.Context, info *roleModel.GetReq) (role roleModel.Role, err error) { dbRole, err := o.roleRepo.GetById(ctx, info.Id) if err != nil { return } err = copier.Copy(role, dbRole) return } func (o *roleService) Search(ctx context.Context, info *roleModel.Query) ([]roleModel.Role, error) { dbQuery := repo.Query{} copier.Copy(dbQuery, info) dbRoles, err := o.roleRepo.Search(ctx, dbQuery) if err != nil { return nil, err } roles := make([]roleModel.Role, len(dbRoles)) for _, role := range dbRoles { roles = append(roles, convertDTM(role)) } return roles, nil }