Files
atom/modules/auth/service/role.go
2023-02-05 14:23:57 +08:00

103 lines
2.5 KiB
Go
Executable File

package service
import (
"atom/common/request"
"atom/common/response"
"atom/database/models"
"atom/modules/auth/dao"
"atom/modules/auth/dto"
"atom/providers/uuid"
"context"
)
type RoleService interface {
GetByFilter(context.Context, dto.RoleRequestFilter, request.PageFilter) (*response.PageResponse[*models.SysRole], error)
Create(context.Context, dto.RoleRequestForm) (*models.SysRole, error)
Tree(context.Context) ([]*dto.RoleTree, error)
UpdateByID(context.Context, uint64, dto.RoleRequestForm) (*models.SysRole, error)
DeleteByID(context.Context, uint64) error
}
type roleService struct {
dao dao.RoleDao
uuid *uuid.Generator
}
func NewRoleService(
dao dao.RoleDao,
uuid *uuid.Generator,
) RoleService {
return &roleService{
dao: dao,
uuid: uuid,
}
}
func (svc *roleService) GetByFilter(
ctx context.Context,
filter dto.RoleRequestFilter,
page request.PageFilter,
) (*response.PageResponse[*models.SysRole], error) {
items, count, err := svc.dao.GetByFilter(ctx, filter, page)
if err != nil {
return nil, err
}
return &response.PageResponse[*models.SysRole]{
Items: items,
Total: count,
}, nil
}
func (svc *roleService) treeMaker(ctx context.Context, models []*models.SysRole, pid uint64) []*dto.RoleTree {
items := []*dto.RoleTree{}
for _, model := range models {
if model.ParentID == pid {
items = append(items, &dto.RoleTree{
ID: model.ID,
UUID: model.UUID,
Name: model.Name,
ParentID: 0,
DefaultRouter: model.DefaultRouter,
Children: svc.treeMaker(ctx, models, model.ID),
})
}
}
return items
}
func (svc *roleService) Tree(ctx context.Context) ([]*dto.RoleTree, error) {
models, err := svc.dao.All(ctx)
if err != nil {
return nil, err
}
return svc.treeMaker(ctx, models, 0), nil
}
func (svc *roleService) Create(ctx context.Context, req dto.RoleRequestForm) (*models.SysRole, error) {
model := models.SysRole{
UUID: svc.uuid.MustGenerate(),
Name: req.Name,
ParentID: uint64(req.ParentID),
DefaultRouter: req.DefaultRouter,
}
return svc.dao.Create(ctx, &model)
}
func (svc *roleService) UpdateByID(ctx context.Context, id uint64, req dto.RoleRequestForm) (*models.SysRole, error) {
model, err := svc.dao.FindByID(ctx, id)
if err != nil {
return nil, err
}
model.Name = req.Name
model.ParentID = uint64(req.ParentID)
model.DefaultRouter = req.DefaultRouter
return svc.dao.UpdateByID(ctx, model)
}
func (svc *roleService) DeleteByID(ctx context.Context, id uint64) error {
return svc.dao.DeleteByID(ctx, id)
}