generated from gc/template-java-maven
백엔드: - AES-256-GCM 암호화 (ApiKey 생성/복호화 조회) - API Key 직접 생성 (ADMIN) + 신청→승인/반려 워크플로우 - 신청 필드 추가 (사용기간, 서비스IP, 서비스용도, 예상요청량) - Permission CRUD (bulk delete+recreate, @Modifying JPQL) - API Key 폐기, expires_at 자동 설정 - ErrorCode 5개 추가 프론트엔드: - MyKeysPage: 키 목록, 상태 배지, 폐기, raw key 모달 - KeyRequestPage: 기간 프리셋/직접선택 토글, 서비스IP, 용도, 예상요청량, API 체크박스 - KeyAdminPage: 신청 검토(필드 노출+기간 조정) + 키 관리(복호화 조회, 권한 편집) Closes #8 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
import { get, post, put } from './apiClient';
|
|
import type {
|
|
ApiKey,
|
|
ApiKeyDetail,
|
|
ApiKeyCreateResponse,
|
|
CreateApiKeyRequest,
|
|
ApiKeyRequest,
|
|
ApiKeyRequestCreateDto,
|
|
ApiKeyRequestReviewDto,
|
|
Permission,
|
|
UpdatePermissionsRequest,
|
|
} from '../types/apikey';
|
|
|
|
// My Keys
|
|
export const getMyKeys = () => get<ApiKey[]>('/keys');
|
|
export const getAllKeys = () => get<ApiKey[]>('/keys/all');
|
|
export const getKeyDetail = (id: number) => get<ApiKeyDetail>(`/keys/${id}`);
|
|
export const createKey = (req: CreateApiKeyRequest) => post<ApiKeyCreateResponse>('/keys', req);
|
|
export const revokeKey = (id: number) => put<void>(`/keys/${id}/revoke`);
|
|
|
|
// Requests
|
|
export const createKeyRequest = (req: ApiKeyRequestCreateDto) =>
|
|
post<ApiKeyRequest>('/keys/requests', req);
|
|
export const getMyRequests = () => get<ApiKeyRequest[]>('/keys/requests/my');
|
|
export const getAllRequests = () => get<ApiKeyRequest[]>('/keys/requests');
|
|
export const reviewRequest = (id: number, req: ApiKeyRequestReviewDto) =>
|
|
put<ApiKeyCreateResponse | null>(`/keys/requests/${id}/review`, req);
|
|
|
|
// Permissions
|
|
export const getPermissions = (keyId: number) => get<Permission[]>(`/keys/${keyId}/permissions`);
|
|
export const updatePermissions = (keyId: number, req: UpdatePermissionsRequest) =>
|
|
put<Permission[]>(`/keys/${keyId}/permissions`, req);
|