118 lines
2.5 KiB
TypeScript
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()
|