From dfee04f703585ecaf7cff594e17d506abfe9c744 Mon Sep 17 00:00:00 2001 From: HYOJIN Date: Tue, 14 Apr 2026 13:58:40 +0900 Subject: [PATCH] =?UTF-8?q?feat(apikey):=20API=20Key=20=EA=B2=80=ED=86=A0?= =?UTF-8?q?=20=EB=AA=A8=EB=8B=AC=20=EC=98=88=EC=83=81=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=EB=9F=89=20=EC=88=98=EC=A0=95=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 검토 모달에서 예상 요청량 셀렉트박스로 수정 가능 - 승인 시 adjustedDailyRequestLimit 전달 Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/pages/apikeys/KeyAdminPage.tsx | 32 +++++++++++++++++---- frontend/src/types/apikey.ts | 1 + 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/frontend/src/pages/apikeys/KeyAdminPage.tsx b/frontend/src/pages/apikeys/KeyAdminPage.tsx index 14d9d85..bfe9dea 100644 --- a/frontend/src/pages/apikeys/KeyAdminPage.tsx +++ b/frontend/src/pages/apikeys/KeyAdminPage.tsx @@ -75,6 +75,7 @@ const KeyAdminPage = () => { const [reviewComment, setReviewComment] = useState(''); const [adjustedFromDate, setAdjustedFromDate] = useState(''); const [adjustedToDate, setAdjustedToDate] = useState(''); + const [adjustedDailyLimit, setAdjustedDailyLimit] = useState(''); const [activeReviewTab, setActiveReviewTab] = useState<'info' | 'apis'>('info'); const [showRejectConfirm, setShowRejectConfirm] = useState(false); const [showApproveConfirm, setShowApproveConfirm] = useState(false); @@ -169,6 +170,7 @@ const KeyAdminPage = () => { setReviewComment(req.reviewComment || ''); setAdjustedFromDate(req.usageFromDate ? req.usageFromDate.split('T')[0] : ''); setAdjustedToDate(req.usageToDate ? req.usageToDate.split('T')[0] : ''); + setAdjustedDailyLimit(req.dailyRequestEstimate != null ? String(req.dailyRequestEstimate) : ''); setActiveReviewTab('info'); setShowRejectConfirm(false); setShowApproveConfirm(false); @@ -185,6 +187,7 @@ const KeyAdminPage = () => { setReviewComment(''); setAdjustedFromDate(req.usageFromDate ? req.usageFromDate.split('T')[0] : ''); setAdjustedToDate(req.usageToDate ? req.usageToDate.split('T')[0] : ''); + setAdjustedDailyLimit(req.dailyRequestEstimate != null ? String(req.dailyRequestEstimate) : ''); setActiveReviewTab('info'); setShowRejectConfirm(false); setShowApproveConfirm(false); @@ -217,6 +220,7 @@ const KeyAdminPage = () => { adjustedApiIds: status === 'APPROVED' ? Array.from(adjustedApiIds) : undefined, adjustedFromDate: status === 'APPROVED' && adjustedFromDate ? adjustedFromDate : undefined, adjustedToDate: status === 'APPROVED' && adjustedToDate ? adjustedToDate : undefined, + adjustedDailyRequestLimit: status === 'APPROVED' && adjustedDailyLimit ? Number(adjustedDailyLimit) : undefined, }); if (res.success) { @@ -896,11 +900,29 @@ const KeyAdminPage = () => { 예상 요청량 -

- {selectedRequest.dailyRequestEstimate != null - ? `${Number(selectedRequest.dailyRequestEstimate).toLocaleString()}건/일` - : '-'} -

+ {isReviewReadOnly ? ( +

+ {selectedRequest.dailyRequestEstimate != null + ? `${Number(selectedRequest.dailyRequestEstimate).toLocaleString()}건/일` + : '-'} +

+ ) : ( +
+ +
+ )}

{totalApiCount}개 API

diff --git a/frontend/src/types/apikey.ts b/frontend/src/types/apikey.ts index 3e43d57..25e7af1 100644 --- a/frontend/src/types/apikey.ts +++ b/frontend/src/types/apikey.ts @@ -65,6 +65,7 @@ export interface ApiKeyRequestReviewDto { adjustedApiIds?: number[]; adjustedFromDate?: string; adjustedToDate?: string; + adjustedDailyRequestLimit?: number; } export interface Permission {