fix(WEB): 계정 관리 페이지 API 연동 개선
- AccountInfoManagement/actions.ts: 내 정보 관리 API 연동 - AccountManagement/actions.ts: 계정 관리 API 연동 개선
This commit is contained in:
@@ -1,6 +1,81 @@
|
|||||||
'use server';
|
'use server';
|
||||||
|
|
||||||
import { serverFetch } from '@/lib/api/fetch-wrapper';
|
import { serverFetch } from '@/lib/api/fetch-wrapper';
|
||||||
|
import type { AccountInfo, TermsAgreement, MarketingConsent } from './types';
|
||||||
|
|
||||||
|
// ===== 계정 정보 조회 =====
|
||||||
|
export async function getAccountInfo(): Promise<{
|
||||||
|
success: boolean;
|
||||||
|
data?: {
|
||||||
|
accountInfo: AccountInfo;
|
||||||
|
termsAgreements: TermsAgreement[];
|
||||||
|
marketingConsent: MarketingConsent;
|
||||||
|
};
|
||||||
|
error?: string;
|
||||||
|
__authError?: boolean;
|
||||||
|
}> {
|
||||||
|
try {
|
||||||
|
const { response, error } = await serverFetch(
|
||||||
|
`${process.env.NEXT_PUBLIC_API_URL}/api/v1/users/me`,
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
error: error.message,
|
||||||
|
__authError: error.code === 'UNAUTHORIZED',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!response) {
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
error: '계정 정보를 불러올 수 없습니다.',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await response.json();
|
||||||
|
|
||||||
|
if (!response.ok || !result.success) {
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
error: result.message || '계정 정보 조회에 실패했습니다.',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const user = result.data;
|
||||||
|
|
||||||
|
return {
|
||||||
|
success: true,
|
||||||
|
data: {
|
||||||
|
accountInfo: {
|
||||||
|
id: user.id?.toString() || '',
|
||||||
|
email: user.email || '',
|
||||||
|
profileImage: user.profile_image || undefined,
|
||||||
|
role: user.role?.name || user.role || '',
|
||||||
|
status: user.status || 'active',
|
||||||
|
isTenantMaster: user.is_tenant_master || false,
|
||||||
|
createdAt: user.created_at || '',
|
||||||
|
updatedAt: user.updated_at || '',
|
||||||
|
},
|
||||||
|
termsAgreements: user.terms_agreements || [],
|
||||||
|
marketingConsent: user.marketing_consent || {
|
||||||
|
email: { agreed: false },
|
||||||
|
sms: { agreed: false },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error('[AccountInfoActions] getAccountInfo error:', error);
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
error: '서버 오류가 발생했습니다.',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ===== 계정 탈퇴 =====
|
// ===== 계정 탈퇴 =====
|
||||||
export async function withdrawAccount(): Promise<{
|
export async function withdrawAccount(): Promise<{
|
||||||
|
|||||||
@@ -26,11 +26,18 @@ interface PaginationMeta {
|
|||||||
total: number;
|
total: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface PaginatedData {
|
||||||
|
current_page: number;
|
||||||
|
last_page: number;
|
||||||
|
per_page: number;
|
||||||
|
total: number;
|
||||||
|
data: BankAccountApiData[];
|
||||||
|
}
|
||||||
|
|
||||||
interface ApiListResponse {
|
interface ApiListResponse {
|
||||||
success: boolean;
|
success: boolean;
|
||||||
message?: string;
|
message?: string;
|
||||||
data: BankAccountApiData[];
|
data: PaginatedData;
|
||||||
meta?: PaginationMeta;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ApiSingleResponse {
|
interface ApiSingleResponse {
|
||||||
@@ -112,8 +119,14 @@ export async function getBankAccounts(params?: {
|
|||||||
return { success: false, error: result.message || '계좌 목록 조회에 실패했습니다.' };
|
return { success: false, error: result.message || '계좌 목록 조회에 실패했습니다.' };
|
||||||
}
|
}
|
||||||
|
|
||||||
const accounts = result.data.map(transformApiToFrontend);
|
const accounts = result.data.data.map(transformApiToFrontend);
|
||||||
return { success: true, data: accounts, meta: result.meta };
|
const meta: PaginationMeta = {
|
||||||
|
current_page: result.data.current_page,
|
||||||
|
last_page: result.data.last_page,
|
||||||
|
per_page: result.data.per_page,
|
||||||
|
total: result.data.total,
|
||||||
|
};
|
||||||
|
return { success: true, data: accounts, meta };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('[getBankAccounts] Error:', error);
|
console.error('[getBankAccounts] Error:', error);
|
||||||
return { success: false, error: '서버 오류가 발생했습니다.' };
|
return { success: false, error: '서버 오류가 발생했습니다.' };
|
||||||
|
|||||||
Reference in New Issue
Block a user