71 lines
2.4 KiB
Go
71 lines
2.4 KiB
Go
package usecase
|
|
|
|
import (
|
|
"backend/pkg/permission/domain/permission"
|
|
"context"
|
|
)
|
|
|
|
// RoleUseCase 角色業務邏輯介面
|
|
type RoleUseCase interface {
|
|
// Create 建立角色
|
|
Create(ctx context.Context, req CreateRoleRequest) (*RoleResponse, error)
|
|
// Update 更新角色
|
|
Update(ctx context.Context, uid string, req UpdateRoleRequest) (*RoleResponse, error)
|
|
// Delete 刪除角色
|
|
Delete(ctx context.Context, uid string) error
|
|
// Get 取得角色
|
|
Get(ctx context.Context, uid string) (*RoleResponse, error)
|
|
// List 列出所有角色
|
|
List(ctx context.Context, filter RoleFilterRequest) ([]*RoleResponse, error)
|
|
// Page 分頁查詢角色
|
|
Page(ctx context.Context, filter RoleFilterRequest, page, size int) (*RolePageResponse, error)
|
|
}
|
|
|
|
// CreateRoleRequest 建立角色請求
|
|
type CreateRoleRequest struct {
|
|
ClientID int `json:"client_id" binding:"required"`
|
|
Name string `json:"name" binding:"required"`
|
|
Permissions permission.Permissions `json:"permissions"`
|
|
}
|
|
|
|
// UpdateRoleRequest 更新角色請求
|
|
type UpdateRoleRequest struct {
|
|
Name *string `json:"name"`
|
|
Status *permission.RecordState `json:"status"`
|
|
Permissions permission.Permissions `json:"permissions"`
|
|
}
|
|
|
|
// RoleFilterRequest 角色查詢過濾請求
|
|
type RoleFilterRequest struct {
|
|
ClientID int `json:"client_id"`
|
|
Name string `json:"name"`
|
|
Status *permission.RecordState `json:"status"`
|
|
Permissions []string `json:"permissions"`
|
|
}
|
|
|
|
// RoleResponse 角色回應
|
|
type RoleResponse struct {
|
|
ID string `json:"id"`
|
|
UID string `json:"uid"`
|
|
ClientID int `json:"client_id"`
|
|
Name string `json:"name"`
|
|
Status permission.RecordState `json:"status"`
|
|
Permissions permission.Permissions `json:"permissions"`
|
|
CreateTime string `json:"create_time"`
|
|
UpdateTime string `json:"update_time"`
|
|
}
|
|
|
|
// RoleWithUserCountResponse 角色回應 (含使用者數量)
|
|
type RoleWithUserCountResponse struct {
|
|
RoleResponse
|
|
UserCount int `json:"user_count"`
|
|
}
|
|
|
|
// RolePageResponse 角色分頁回應
|
|
type RolePageResponse struct {
|
|
List []*RoleWithUserCountResponse `json:"list"`
|
|
Total int64 `json:"total"`
|
|
Page int `json:"page"`
|
|
Size int `json:"size"`
|
|
}
|