package usecase import ( "context" "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity" "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission" "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository" "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/usecase" ) type PermissionUseCaseParam struct { permissionRepository repository.PermissionRepository } type PermissionUseCase struct { PermissionUseCaseParam } func NewPermissionUseCase(param PermissionUseCaseParam) usecase.PermissionUseCase { return &PermissionUseCase{ PermissionUseCaseParam: param, } } func (use *PermissionUseCase) Insert(ctx context.Context, req usecase.CreatePermissionReq) error { insert := entity.Permission{ Name: req.Name, HTTPMethod: req.HTTPMethod, HTTPPath: req.HTTPPath, Status: req.Status, Type: req.Type, } if req.Parent != nil { insert.Parent = *req.Parent } err := use.permissionRepository.Insert(ctx, insert) if err != nil { return err } return nil } func (use *PermissionUseCase) Del(ctx context.Context, id string) error { err := use.Del(ctx, id) if err != nil { return err } return nil } func (use *PermissionUseCase) Update(ctx context.Context, id string, req usecase.UpdatePermissionReq) error { update := repository.UpdatePermission{ Name: req.Name, HTTPMethod: req.HTTPMethod, HTTPPath: req.HTTPPath, Status: req.Status, Type: req.Type, } err := use.permissionRepository.Update(ctx, id, update) if err != nil { return err } return nil } func (use *PermissionUseCase) All(ctx context.Context, status *permission.Status) ([]entity.Permission, error) { all, err := use.permissionRepository.GetAll(ctx, status) if err != nil { return nil, err } return all, nil } func (use *PermissionUseCase) FilterAll(ctx context.Context) ([]entity.Permission, error) { all, err := use.permissionRepository.GetAll(ctx, nil) if err != nil { return nil, err } nodes, err := GeneratePermissionTree(all).filterOpenNodes() if err != nil { return nil, err } result := make([]entity.Permission, 0, len(nodes)) for _, item := range nodes { result = append(result, item) } return result, nil }