Hyowon Yang abceae6e2a Analytics 테스트 페이지 디버그 로그 추가
- 이벤트 기간 계산 함수에 상세 디버그 로그 추가
- 차트 데이터 생성 함수에 필터링 과정 로그 추가
- Timeline dataPoints 구조 확인을 위한 콘솔 출력 추가
- ROI 필드 매핑 검증을 위한 로그 추가
2025-10-29 19:33:19 +09:00

143 lines
3.9 KiB
TypeScript

import { analyticsClient } from './analyticsClient';
import type {
ApiResponse,
UserAnalyticsDashboardResponse,
AnalyticsDashboardResponse,
UserTimelineAnalyticsResponse,
TimelineAnalyticsResponse,
UserRoiAnalyticsResponse,
RoiAnalyticsResponse,
UserChannelAnalyticsResponse,
ChannelAnalyticsResponse,
AnalyticsQueryParams,
TimelineQueryParams,
ChannelQueryParams,
RoiQueryParams,
} from '../model/types';
const API_VERSION = process.env.NEXT_PUBLIC_API_VERSION || 'v1';
/**
* Analytics API Service
* 실시간 효과 측정 및 통합 대시보드 API
*/
export const analyticsApi = {
// ============= User Analytics (사용자 전체 이벤트 통합) =============
/**
* 사용자 전체 성과 대시보드 조회
*/
getUserAnalytics: async (
userId: string,
params?: AnalyticsQueryParams
): Promise<UserAnalyticsDashboardResponse> => {
const response = await analyticsClient.get<ApiResponse<UserAnalyticsDashboardResponse>>(
`/api/${API_VERSION}/users/${userId}/analytics`,
{ params }
);
return response.data.data;
},
/**
* 사용자 전체 시간대별 참여 추이
*/
getUserTimelineAnalytics: async (
userId: string,
params?: TimelineQueryParams
): Promise<UserTimelineAnalyticsResponse> => {
const response = await analyticsClient.get<ApiResponse<UserTimelineAnalyticsResponse>>(
`/api/${API_VERSION}/users/${userId}/analytics/timeline`,
{ params }
);
return response.data.data;
},
/**
* 사용자 전체 ROI 상세 분석
*/
getUserRoiAnalytics: async (
userId: string,
params?: AnalyticsQueryParams & RoiQueryParams
): Promise<UserRoiAnalyticsResponse> => {
const response = await analyticsClient.get<ApiResponse<UserRoiAnalyticsResponse>>(
`/api/${API_VERSION}/users/${userId}/analytics/roi`,
{ params }
);
return response.data.data;
},
/**
* 사용자 전체 채널별 성과 분석
*/
getUserChannelAnalytics: async (
userId: string,
params?: ChannelQueryParams
): Promise<UserChannelAnalyticsResponse> => {
const response = await analyticsClient.get<ApiResponse<UserChannelAnalyticsResponse>>(
`/api/${API_VERSION}/users/${userId}/analytics/channels`,
{ params }
);
return response.data.data;
},
// ============= Event Analytics (특정 이벤트 분석) =============
/**
* 이벤트 성과 대시보드 조회
*/
getEventAnalytics: async (
eventId: string,
params?: AnalyticsQueryParams
): Promise<AnalyticsDashboardResponse> => {
const response = await analyticsClient.get<ApiResponse<AnalyticsDashboardResponse>>(
`/api/${API_VERSION}/events/${eventId}/analytics`,
{ params }
);
return response.data.data;
},
/**
* 이벤트 시간대별 참여 추이
*/
getEventTimelineAnalytics: async (
eventId: string,
params?: TimelineQueryParams
): Promise<TimelineAnalyticsResponse> => {
const response = await analyticsClient.get<ApiResponse<TimelineAnalyticsResponse>>(
`/api/${API_VERSION}/events/${eventId}/analytics/timeline`,
{ params }
);
return response.data.data;
},
/**
* 이벤트 ROI 상세 분석
*/
getEventRoiAnalytics: async (
eventId: string,
params?: RoiQueryParams
): Promise<RoiAnalyticsResponse> => {
const response = await analyticsClient.get<ApiResponse<RoiAnalyticsResponse>>(
`/api/${API_VERSION}/events/${eventId}/analytics/roi`,
{ params }
);
return response.data.data;
},
/**
* 이벤트 채널별 성과 분석
*/
getEventChannelAnalytics: async (
eventId: string,
params?: ChannelQueryParams
): Promise<ChannelAnalyticsResponse> => {
const response = await analyticsClient.get<ApiResponse<ChannelAnalyticsResponse>>(
`/api/${API_VERSION}/events/${eventId}/analytics/channels`,
{ params }
);
return response.data.data;
},
};
export default analyticsApi;