## 核心功能 - 添加 AdminUpdateAPIKeyGroupID 服务方法,支持绑定/解绑/保持不变三态语义 - 实现 UserRepository.AddGroupToAllowedGroups 接口,自动同步专属分组权限 - 添加 HTTP PUT /api-keys/:id handler 端点,支持管理员直接修改 API Key 分组 ## 事务一致性 - 使用 ent Tx 保证专属分组绑定时「添加权限」和「更新 Key」的原子性 - Repository 方法支持 clientFromContext,兼容事务内调用 - 事务失败时自动回滚,避免权限孤立 ## 业务逻辑 - 订阅类型分组阻断,需通过订阅管理流程 - 非活跃分组拒绝绑定 - 负 ID 和非法 ID 验证 - 自动授权响应,告知管理员成功授权的分组 ## 代码质量 - 16 个单元测试覆盖所有业务路径和边界用例 - 7 个 handler 集成测试覆盖 HTTP 层 - GroupRepo stub 返回克隆副本,防止测试间数据泄漏 - API 类型安全修复(PaginatedResponse<ApiKey>) - 前端 ref 回调类型对齐 Vue 规范 ## 国际化支持 - 中英文提示信息完整 - 自动授权成功/失败提示
34 lines
878 B
TypeScript
34 lines
878 B
TypeScript
/**
|
|
* Admin API Keys API endpoints
|
|
* Handles API key management for administrators
|
|
*/
|
|
|
|
import { apiClient } from '../client'
|
|
import type { ApiKey } from '@/types'
|
|
|
|
export interface UpdateApiKeyGroupResult {
|
|
api_key: ApiKey
|
|
auto_granted_group_access: boolean
|
|
granted_group_id?: number
|
|
granted_group_name?: string
|
|
}
|
|
|
|
/**
|
|
* Update an API key's group binding
|
|
* @param id - API Key ID
|
|
* @param groupId - Group ID (0 to unbind, positive to bind, null/undefined to skip)
|
|
* @returns Updated API key with auto-grant info
|
|
*/
|
|
export async function updateApiKeyGroup(id: number, groupId: number | null): Promise<UpdateApiKeyGroupResult> {
|
|
const { data } = await apiClient.put<UpdateApiKeyGroupResult>(`/admin/api-keys/${id}`, {
|
|
group_id: groupId === null ? 0 : groupId
|
|
})
|
|
return data
|
|
}
|
|
|
|
export const apiKeysAPI = {
|
|
updateApiKeyGroup
|
|
}
|
|
|
|
export default apiKeysAPI
|