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

95 lines
2.1 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 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)
}