diff --git a/src/components/settings/SubscriptionManagement/SubscriptionManagement.tsx b/src/components/settings/SubscriptionManagement/SubscriptionManagement.tsx index bbd9051f..12a19bcd 100644 --- a/src/components/settings/SubscriptionManagement/SubscriptionManagement.tsx +++ b/src/components/settings/SubscriptionManagement/SubscriptionManagement.tsx @@ -22,6 +22,9 @@ import type { SubscriptionInfo } from './types'; import { PLAN_LABELS } from './types'; import { requestDataExport, cancelSubscription } from './actions'; +// ===== 기본 저장공간 (10GB) ===== +const DEFAULT_STORAGE_LIMIT = 10 * 1024 * 1024 * 1024; // 10GB in bytes + // ===== 기본값 (API 실패시 사용) ===== const defaultSubscription: SubscriptionInfo = { lastPaymentDate: '', @@ -31,9 +34,11 @@ const defaultSubscription: SubscriptionInfo = { userCount: 0, userLimit: null, storageUsed: 0, - storageLimit: 0, + storageLimit: DEFAULT_STORAGE_LIMIT, + storageUsedFormatted: '0 B', + storageLimitFormatted: '10 GB', apiCallsUsed: 0, - apiCallsLimit: 0, + apiCallsLimit: 10000, }; // ===== 날짜 포맷 함수 ===== @@ -202,8 +207,8 @@ export function SubscriptionManagement({ initialData }: SubscriptionManagementPr
-
- {subscription.storageUsed} TB /{subscription.storageLimit} TB +
+ {subscription.storageUsedFormatted} / {subscription.storageLimitFormatted}
diff --git a/src/components/settings/SubscriptionManagement/types.ts b/src/components/settings/SubscriptionManagement/types.ts index 770390e1..584138d3 100644 --- a/src/components/settings/SubscriptionManagement/types.ts +++ b/src/components/settings/SubscriptionManagement/types.ts @@ -44,6 +44,11 @@ export interface UsageApiData { used_formatted: string; limit_formatted: string; }; + api_calls?: { + used: number; + limit: number; + percentage: number; + }; } // ===== 플랜 코드 → 타입 변환 ===== diff --git a/src/components/settings/SubscriptionManagement/utils.ts b/src/components/settings/SubscriptionManagement/utils.ts index 8a87929b..d29ab0c3 100644 --- a/src/components/settings/SubscriptionManagement/utils.ts +++ b/src/components/settings/SubscriptionManagement/utils.ts @@ -6,6 +6,24 @@ import type { } from './types'; import { mapPlanCodeToType } from './types'; +// ===== 기본 저장공간 제한 (10GB in bytes) ===== +const DEFAULT_STORAGE_LIMIT = 10 * 1024 * 1024 * 1024; // 10GB + +// ===== 바이트 → 읽기 쉬운 단위 변환 ===== +export function formatBytes(bytes: number): string { + if (bytes === 0) return '0 B'; + + const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; + const k = 1024; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + const value = bytes / Math.pow(k, i); + + // 소수점 처리: 정수면 소수점 없이, 아니면 최대 2자리 + const formatted = value % 1 === 0 ? value.toString() : value.toFixed(2).replace(/\.?0+$/, ''); + + return `${formatted} ${units[i]}`; +} + // ===== API → Frontend 변환 ===== export function transformApiToFrontend( subscriptionData: SubscriptionApiData | null, @@ -50,9 +68,13 @@ export function transformApiToFrontend( userCount: usageData?.users?.used ?? 0, userLimit: usageData?.users?.limit === 0 ? null : (usageData?.users?.limit ?? null), storageUsed: usageData?.storage?.used ?? 0, - storageLimit: usageData?.storage?.limit ?? 0, - storageUsedFormatted: usageData?.storage?.used_formatted ?? '0 GB', - storageLimitFormatted: usageData?.storage?.limit_formatted ?? '0 GB', + storageLimit: usageData?.storage?.limit || DEFAULT_STORAGE_LIMIT, + storageUsedFormatted: usageData?.storage?.used_formatted || formatBytes(usageData?.storage?.used ?? 0), + storageLimitFormatted: usageData?.storage?.limit_formatted || formatBytes(usageData?.storage?.limit || DEFAULT_STORAGE_LIMIT), + + // API 호출 사용량 (일간) + apiCallsUsed: usageData?.api_calls?.used ?? 0, + apiCallsLimit: usageData?.api_calls?.limit ?? 10000, }; }