diff --git a/src/components/dashboard/platform/PlatformRoasTable.tsx b/src/components/dashboard/platform/PlatformRoasTable.tsx index e5f42cbe..181cd0e4 100644 --- a/src/components/dashboard/platform/PlatformRoasTable.tsx +++ b/src/components/dashboard/platform/PlatformRoasTable.tsx @@ -5,13 +5,13 @@ import type { IPlatformRankingItem } from "@/types/dashboard/overview"; import { TrendBadge } from "@/components/common/card/StatCard"; import GoogleLogo from "@/assets/logo/social-logo/circle/google-circle.svg?react"; +import MetaLogo from "@/assets/logo/social-logo/circle/meta-circle.svg?react"; import NaverLogo from "@/assets/logo/social-logo/circle/naver-circle.svg?react"; -import KakaoLogo from "@/assets/logo/social-logo/plain/kakao.svg?react"; const platformLogoMap = { Google: , NAVER: , - Kakao: , + Meta: , }; type TPlatformName = keyof typeof platformLogoMap; @@ -19,7 +19,7 @@ type TPlatformName = keyof typeof platformLogoMap; const providerDisplayMap: Record = { GOOGLE: "Google", NAVER: "NAVER", - KAKAO: "Kakao", + META: "Meta", }; function getDisplayName(provider: string): string { diff --git a/src/hooks/dashboard/useOverviewRoasRankings.ts b/src/hooks/dashboard/useOverviewRoasRankings.ts index ab9d1d86..0504864f 100644 --- a/src/hooks/dashboard/useOverviewRoasRankings.ts +++ b/src/hooks/dashboard/useOverviewRoasRankings.ts @@ -8,17 +8,17 @@ import { useCoreQuery } from "@/hooks/customQuery"; import { getOverview, getRoasRankings } from "@/api/dashboard/overview"; import useWorkspaceStore from "@/store/useWorkspaceStore"; -const PROVIDERS: TProviderType[] = ["GOOGLE", "NAVER", "KAKAO"]; +const PROVIDERS: TProviderType[] = ["GOOGLE", "NAVER", "META"]; -// 플랫폼별 ROAS 순위 + CTR/CVR 지표 병렬 조회 후 병합 export function useOverviewRoasRankings() { const orgId = useWorkspaceStore((s) => s.selectedOrgId); return useCoreQuery( ["overview", "roasRankings", orgId], async (): Promise => { + // ROAS 순위 + 플랫폼별 지표 병렬 조회 const [rankingsRes, ...metricsResults] = await Promise.all([ - // TODO: 백엔드 빈 배열 이슈 확인용 임시 날짜 범위 — 정상화 후 제거 + // TODO: 백엔드 빈 배열 이슈 — 임시 날짜 범위 getRoasRankings(orgId!, { startDate: "2026-01-22", endDate: "2026-03-22", @@ -26,13 +26,14 @@ export function useOverviewRoasRankings() { ...PROVIDERS.map((p) => getOverview(orgId!, p).catch(() => null)), ]); + // provider → metrics 매핑 const metricsMap = Object.fromEntries( PROVIDERS.map((p, i) => [p, metricsResults[i]]), ); return rankingsRes.rankings.map((item) => { const metrics = metricsMap[item.provider.toUpperCase()]; - // CTR = 클릭수 / 노출수 * 100 + // CTR = 클릭수 ÷ 노출수 × 100 const clickRate = metrics && metrics.impressions > 0 ? (metrics.clicks / metrics.impressions) * 100 diff --git a/src/hooks/dashboard/usePlatformAdCount.ts b/src/hooks/dashboard/usePlatformAdCount.ts index 93dc3024..64cb87b8 100644 --- a/src/hooks/dashboard/usePlatformAdCount.ts +++ b/src/hooks/dashboard/usePlatformAdCount.ts @@ -1,17 +1,10 @@ -import type { - IAdStatusData, - TPlatformProvider, -} from "@/types/dashboard/platform"; +import type { IAdStatusData } from "@/types/dashboard/platform"; import { useCoreQuery } from "@/hooks/customQuery"; import { getAdCount } from "@/api/dashboard/platform"; import useWorkspaceStore from "@/store/useWorkspaceStore"; -// TODO: 추후 제거 -const normalizeProvider = (provider: string): TPlatformProvider => - provider === "KAKAO" ? "META" : (provider as TPlatformProvider); - // 광고 소재 현황 export function usePlatformAdCount() { const orgId = useWorkspaceStore((s) => s.selectedOrgId); @@ -19,15 +12,6 @@ export function usePlatformAdCount() { return useCoreQuery( ["platform", "adCount", orgId], () => getAdCount(orgId!), - { - enabled: !!orgId, - select: (data): IAdStatusData => ({ - ...data, - providerCount: data.providerCount.map((item) => ({ - ...item, - provider: normalizeProvider(item.provider), - })), - }), - }, + { enabled: !!orgId }, ); } diff --git a/src/hooks/dashboard/usePlatformPerformance.ts b/src/hooks/dashboard/usePlatformPerformance.ts index 3c73e39e..5803056b 100644 --- a/src/hooks/dashboard/usePlatformPerformance.ts +++ b/src/hooks/dashboard/usePlatformPerformance.ts @@ -1,19 +1,12 @@ import type { TProviderType } from "@/types/dashboard/overview"; -import type { - IPlatformPerformance, - TPlatformProvider, -} from "@/types/dashboard/platform"; +import type { IPlatformPerformance } from "@/types/dashboard/platform"; import { useCoreQuery } from "@/hooks/customQuery"; import { getOverview } from "@/api/dashboard/overview"; import useWorkspaceStore from "@/store/useWorkspaceStore"; -// TODO: 추후 제거 -const normalizeProvider = (provider: string): TPlatformProvider => - provider === "KAKAO" ? "META" : (provider as TPlatformProvider); - -const PROVIDERS: TProviderType[] = ["GOOGLE", "NAVER", "KAKAO"]; +const PROVIDERS: TProviderType[] = ["GOOGLE", "NAVER", "META"]; // 플랫폼별 성과 효율 (3개 플랫폼 병렬 조회 후 병합) export function usePlatformPerformance() { @@ -26,7 +19,7 @@ export function usePlatformPerformance() { PROVIDERS.map((provider) => getOverview(orgId!, provider).then((metrics) => ({ ...metrics, - provider: normalizeProvider(provider), + provider, })), ), ); diff --git a/src/hooks/dashboard/usePlatformRoasRankings.ts b/src/hooks/dashboard/usePlatformRoasRankings.ts index 589b5a10..a32b12ec 100644 --- a/src/hooks/dashboard/usePlatformRoasRankings.ts +++ b/src/hooks/dashboard/usePlatformRoasRankings.ts @@ -4,15 +4,12 @@ import { useCoreQuery } from "@/hooks/customQuery"; import { getRoasRankings } from "@/api/dashboard/overview"; import useWorkspaceStore from "@/store/useWorkspaceStore"; -// TODO: 추후 제거 -const normalizeProvider = (provider: string): string => - provider === "KAKAO" ? "META" : provider; + // ROAS 성과 순위 (상위 3개) export function usePlatformRoasRankings() { const orgId = useWorkspaceStore((s) => s.selectedOrgId); return useCoreQuery( ["platform", "roasRankings", orgId], - // TODO: 추후 제거 () => getRoasRankings(orgId!, { startDate: "2026-01-22", @@ -20,11 +17,7 @@ export function usePlatformRoasRankings() { }), { enabled: !!orgId, - select: (data): IRoasRanking[] => - data.rankings.map((item) => ({ - ...item, - provider: normalizeProvider(item.provider), - })), + select: (data): IRoasRanking[] => data.rankings, }, ); } diff --git a/src/types/dashboard/overview.ts b/src/types/dashboard/overview.ts index abe7ee66..a6b50a59 100644 --- a/src/types/dashboard/overview.ts +++ b/src/types/dashboard/overview.ts @@ -1,5 +1,5 @@ // 광고 플랫폼 종류 -export type TProviderType = "KAKAO" | "NAVER" | "GOOGLE"; +export type TProviderType = "META" | "NAVER" | "GOOGLE"; // 전체 지표 집계 응답 export interface IMetricsResponse { diff --git a/src/types/dashboard/platform.ts b/src/types/dashboard/platform.ts index 0a5a0fd8..c7eab7df 100644 --- a/src/types/dashboard/platform.ts +++ b/src/types/dashboard/platform.ts @@ -1,6 +1,6 @@ import type { TProviderType } from "./overview"; -export type TPlatformProvider = TProviderType | "META"; +export type TPlatformProvider = TProviderType; export const PLATFORM_MAP: Record = { GOOGLE: "Google",