95 lines
2.1 KiB
Go
Executable File
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)
|
|
}
|