Yaltopia-Ticket-Admin/src/services/analytics.service.ts

118 lines
2.5 KiB
TypeScript

import apiClient from './api/client'
export interface OverviewStats {
users?: {
total: number
active: number
inactive: number
}
invoices?: {
total: number
}
revenue?: {
total: number
}
storage?: {
totalSize: number
documents: number
}
totalUsers: number
activeUsers: number
totalRevenue: number
totalTransactions: number
storageUsed: number
storageLimit: number
}
export interface UserGrowthData {
date: string
users: number
activeUsers: number
}
export interface RevenueData {
date: string
revenue: number
transactions: number
}
class AnalyticsService {
/**
* Get overview statistics
*/
async getOverview(): Promise<OverviewStats> {
const response = await apiClient.get<OverviewStats>('/admin/analytics/overview')
return response.data
}
/**
* Get user growth data
*/
async getUserGrowth(days: number = 30): Promise<UserGrowthData[]> {
const response = await apiClient.get<UserGrowthData[]>('/admin/analytics/users/growth', {
params: { days },
})
return response.data
}
/**
* Get revenue data
*/
async getRevenue(period: '7days' | '30days' | '90days' = '30days'): Promise<RevenueData[]> {
const response = await apiClient.get<RevenueData[]>('/admin/analytics/revenue', {
params: { period },
})
return response.data
}
/**
* Get API usage statistics
*/
async getApiUsage(days: number = 7): Promise<any> {
const response = await apiClient.get('/admin/analytics/api-usage', {
params: { days },
})
return response.data
}
/**
* Get error rate statistics
*/
async getErrorRate(days: number = 7): Promise<any> {
const response = await apiClient.get('/admin/analytics/error-rate', {
params: { days },
})
return response.data
}
/**
* Get storage usage by user
*/
async getStorageByUser(limit: number = 10): Promise<any> {
const response = await apiClient.get('/admin/analytics/storage/by-user', {
params: { limit },
})
return response.data
}
/**
* Get storage analytics
*/
async getStorageAnalytics(): Promise<any> {
const response = await apiClient.get('/admin/analytics/storage')
return response.data
}
/**
* Export analytics data
*/
async exportData(): Promise<Blob> {
const response = await apiClient.get('/admin/analytics/export', {
responseType: 'blob',
})
return response.data
}
}
export const analyticsService = new AnalyticsService()