import api from './api'; // Типы данных export interface AnalyticsLog { id: number; event_type: string; user_id?: number; session_id: string; data: Record; created_at: string; } export interface AnalyticsLogCreate { event_type: string; session_id: string; data: Record; } export interface AnalyticsReport { report_type: string; data: Record; start_date?: string; end_date?: string; } // Сервис для работы с аналитикой export const analyticsService = { // Логирование события аналитики logEvent: async (event: AnalyticsLogCreate): Promise => { const response = await api.post('/analytics/log', event); return response.data; }, // Получить логи аналитики (только для админов) getLogs: async (params?: { event_type?: string; start_date?: string; end_date?: string; skip?: number; limit?: number; }): Promise<{ logs: AnalyticsLog[], total: number }> => { const response = await api.get('/analytics/logs', { params }); return response.data; }, // Получить отчет по аналитике (только для админов) getReport: async (reportType: string, params?: { start_date?: string; end_date?: string; }): Promise => { const response = await api.get(`/analytics/report`, { params: { report_type: reportType, ...params } }); return response.data; }, // Инициализация отслеживания сессии initTracking: (): string => { // Генерируем ID сессии, если его нет let sessionId = localStorage.getItem('session_id'); if (!sessionId) { sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`; localStorage.setItem('session_id', sessionId); } return sessionId; }, // Отслеживание просмотра страницы trackPageView: async (path: string): Promise => { const sessionId = analyticsService.initTracking(); await analyticsService.logEvent({ event_type: 'page_view', session_id: sessionId, data: { path } }); }, // Отслеживание просмотра товара trackProductView: async (productId: number, productName: string): Promise => { const sessionId = analyticsService.initTracking(); await analyticsService.logEvent({ event_type: 'product_view', session_id: sessionId, data: { product_id: productId, product_name: productName } }); }, // Отслеживание добавления товара в корзину trackAddToCart: async (productId: number, productName: string, quantity: number): Promise => { const sessionId = analyticsService.initTracking(); await analyticsService.logEvent({ event_type: 'add_to_cart', session_id: sessionId, data: { product_id: productId, product_name: productName, quantity } }); } };