XuqmGroup-Web/ops-platform/src/api/log.ts

145 行
3.0 KiB
TypeScript

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<string, unknown>
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<LogWebhook, 'id' | 'createdAt' | 'updatedAt'>) =>
client.post<{ data: LogWebhook }>('/log/v1/webhooks', data),
updateWebhook: (id: string, data: Partial<LogWebhook>) =>
client.put<{ data: LogWebhook }>(`/log/v1/webhooks/${id}`, data),
deleteWebhook: (id: string) =>
client.delete(`/log/v1/webhooks/${id}`),
}