import client from './client' // ---- Types ---- export interface LogOverview { totalIssues: number todayNew: number affectedUsers: number crashRate: number dailyTrend: Array<{ date: string; crashRate: number }> topIssues: LogIssueSummary[] } export interface LogIssueSummary { id: string title: string type: string count: number affectedUsers: number platform: string lastSeenAt: string } export interface LogIssuePage { content: LogIssueSummary[] total: number totalPages: number } export interface LogIssueDetail { id: string title: string type: string count: number affectedUsers: number platform: string firstSeenAt: string lastSeenAt: string status: string events: LogEvent[] sourceContext?: string } export interface LogEvent { id: string issueId: string userId: string platform: string appVersion: string osVersion: string device: string timestamp: string properties: Record stackTrace?: string } export interface LogEventPage { content: LogEvent[] total: number totalPages: number } export interface LogFunnelStep { name: string count: number rate: number } export interface LogFunnelResult { steps: LogFunnelStep[] totalStart: number totalEnd: number overallRate: number } export interface LogRankingItem { id: string title: string type: string count: number affectedUsers: number platform: string rank: number } export interface LogWebhook { id: string name: string url: string events: string[] enabled: boolean secret?: string createdAt: string updatedAt: string } // ---- API ---- export const logApi = { getOverview: () => client.get<{ data: LogOverview }>('/log/v1/overview'), listIssues: (params: { type?: string platform?: string startDate?: string endDate?: string page?: number size?: number }) => client.get<{ data: LogIssuePage }>('/log/v1/issues', { params }), getIssueDetail: (id: string) => client.get<{ data: LogIssueDetail }>(`/log/v1/issues/${id}`), getFrequencyRanking: (limit = 10) => client.get<{ data: LogRankingItem[] }>('/log/v1/issues/rankings/frequency', { params: { limit } }), getRiskRanking: (limit = 10) => client.get<{ data: LogRankingItem[] }>('/log/v1/issues/rankings/risk', { params: { limit } }), listEvents: (params: { eventName?: string userId?: string page?: number size?: number }) => client.get<{ data: LogEventPage }>('/log/v1/events', { params }), getFunnel: (steps: string[]) => client.get<{ data: LogFunnelResult }>('/log/v1/events/funnel', { params: { steps } }), listWebhooks: () => client.get<{ data: LogWebhook[] }>('/log/v1/webhooks'), createWebhook: (data: Omit) => client.post<{ data: LogWebhook }>('/log/v1/webhooks', data), updateWebhook: (id: string, data: Partial) => client.put<{ data: LogWebhook }>(`/log/v1/webhooks/${id}`, data), deleteWebhook: (id: string) => client.delete(`/log/v1/webhooks/${id}`), }