package repository import ( "context" "permission/reborn/domain/entity" ) // PermissionRepository 權限 Repository 介面 type PermissionRepository interface { // Get 取得單一權限 Get(ctx context.Context, id int64) (*entity.Permission, error) // GetByName 根據名稱取得權限 GetByName(ctx context.Context, name string) (*entity.Permission, error) // GetByNames 批量根據名稱取得權限 GetByNames(ctx context.Context, names []string) ([]*entity.Permission, error) // GetByHTTP 根據 HTTP Path 和 Method 取得權限 GetByHTTP(ctx context.Context, path, method string) (*entity.Permission, error) // List 列出所有權限 List(ctx context.Context, filter PermissionFilter) ([]*entity.Permission, error) // ListActive 列出所有啟用的權限 (常用,可快取) ListActive(ctx context.Context) ([]*entity.Permission, error) // GetChildren 取得子權限 GetChildren(ctx context.Context, parentID int64) ([]*entity.Permission, error) } // PermissionFilter 權限查詢過濾條件 type PermissionFilter struct { Type *entity.PermissionType Status *entity.Status ParentID *int64 } // RolePermissionRepository 角色權限關聯 Repository 介面 type RolePermissionRepository interface { // Create 建立角色權限關聯 Create(ctx context.Context, roleID int64, permissionIDs []int64) error // Update 更新角色權限關聯 (先刪除再建立) Update(ctx context.Context, roleID int64, permissionIDs []int64) error // Delete 刪除角色的所有權限 Delete(ctx context.Context, roleID int64) error // GetByRoleID 取得角色的所有權限關聯 GetByRoleID(ctx context.Context, roleID int64) ([]*entity.RolePermission, error) // GetByRoleIDs 批量取得多個角色的權限關聯 (優化 N+1 查詢) GetByRoleIDs(ctx context.Context, roleIDs []int64) (map[int64][]*entity.RolePermission, error) // GetByPermissionIDs 根據權限 ID 取得所有角色關聯 GetByPermissionIDs(ctx context.Context, permissionIDs []int64) ([]*entity.RolePermission, error) // GetRolesByPermission 根據權限 ID 取得所有角色 ID GetRolesByPermission(ctx context.Context, permissionID int64) ([]int64, error) }