chore(WEB): 다수 컴포넌트 개선 및 CEO 대시보드 추가

- CEO 대시보드 컴포넌트 추가
- AuthenticatedLayout 개선
- 각 모듈 actions.ts 에러 핸들링 개선
- API fetch-wrapper, refresh-token 로직 개선
- ReceivablesStatus 컴포넌트 업데이트
- globals.css 스타일 업데이트
- 기타 다수 컴포넌트 수정

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
byeongcheolryu
2026-01-08 17:15:42 +09:00
parent 387672b5b2
commit 29e7b41615
92 changed files with 7695 additions and 409 deletions

View File

@@ -1,5 +1,7 @@
'use server';
import { isRedirectError } from 'next/dist/client/components/redirect';
import { serverFetch } from '@/lib/api/fetch-wrapper';
import type { SubscriptionApiData, UsageApiData, SubscriptionInfo } from './types';
import { transformApiToFrontend } from './utils';
@@ -52,6 +54,7 @@ export async function getCurrentSubscription(): Promise<{
data: result.data,
};
} catch (error) {
if (isRedirectError(error)) throw error;
console.error('[SubscriptionActions] getCurrentSubscription error:', error);
return {
success: false,
@@ -109,6 +112,7 @@ export async function getUsage(): Promise<{
data: result.data,
};
} catch (error) {
if (isRedirectError(error)) throw error;
console.error('[SubscriptionActions] getUsage error:', error);
return {
success: false,
@@ -162,6 +166,7 @@ export async function cancelSubscription(
return { success: true };
} catch (error) {
if (isRedirectError(error)) throw error;
console.error('[SubscriptionActions] cancelSubscription error:', error);
return {
success: false,
@@ -220,6 +225,7 @@ export async function requestDataExport(
},
};
} catch (error) {
if (isRedirectError(error)) throw error;
console.error('[SubscriptionActions] requestDataExport error:', error);
return {
success: false,
@@ -258,6 +264,7 @@ export async function getSubscriptionData(): Promise<{
data,
};
} catch (error) {
if (isRedirectError(error)) throw error;
console.error('[SubscriptionActions] getSubscriptionData error:', error);
return {
success: false,