Files
marketplaces/src/app/features/admin/analytics/models/admin-analytics.model.ts

82 lines
1.9 KiB
TypeScript
Raw Normal View History

export type AdminAnalyticsDateRange = 7 | 30 | 90;
export interface AdminAnalyticsSummary {
revenueTotal: number;
currency: string;
ordersCount: number;
avgOrderValue: number;
productsCount: number;
categoriesCount: number;
customersCount: number;
/** null = unknown - no visitor/traffic tracking exists yet. Never fabricated. */
conversionRate: number | null;
}
export interface AdminAnalyticsSeriesPoint {
date: string;
value: number;
}
export interface AdminAnalyticsTopProduct {
productId: string;
name: string;
quantity: number;
revenue: number;
}
export interface AdminLowStockProduct {
productId: string;
name: string;
quantity: number;
stockStatus: 'low_stock' | 'out_of_stock';
}
export interface AdminRecentActivityEntry {
id: string;
labelKey: string;
timestamp: number;
}
export type AdminMarketplaceHealthStatus = 'healthy' | 'attention' | 'unhealthy' | 'unknown';
export interface AdminMarketplaceHealthCheck {
code: string;
labelKey: string;
status: AdminMarketplaceHealthStatus;
displayValue?: string | null;
actionRoute?: string[];
}
export interface AdminProductAnalyticsRow {
productId: string;
name: string;
value: number;
}
export interface AdminProductAnalytics {
topSelling: AdminAnalyticsTopProduct[];
mostReviewed: AdminProductAnalyticsRow[];
worstRated: AdminProductAnalyticsRow[];
hiddenCount: number;
archivedCount: number;
}
export interface AdminCustomerAnalytics {
newCustomers: number;
returningCustomers: number;
averageSpend: number;
currency: string;
/** null = unknown when there are no customers in range to compute a rate from. */
retentionPercent: number | null;
}
export type AdminRecommendationSeverity = 'info' | 'warning' | 'critical';
export interface AdminRecommendationCard {
id: string;
labelKey: string;
descriptionKey?: string;
severity: AdminRecommendationSeverity;
route: string[];
}