busniess-user-center/internal/service/role/role.go

96 lines
2.1 KiB
Go

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
}