96 lines
2.1 KiB
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
|
|
}
|