import { apiClient } from '@/shared/api/client' import type { ApiResponse } from '@/shared/types/types' import type { DisputeStatus, OrderStatus } from '@/shared/types/status' export interface DashboardMetrics { total_users: number verified_users: number total_listings: number published_listings: number total_orders: number renting_orders: number today_orders: number today_ledger_amount_cent: number } export interface DashboardPending { listing_reviews: number disputes: number pending_handoffs: number pending_return_confirms: number } export interface ListingDayStats { date: string published_count: number active_offline_count: number trade_leave_count: number } export interface ListingChannelDayStats extends ListingDayStats { source_channel: string } export interface ListingDailyOverview { today: ListingDayStats trend: ListingDayStats[] today_channels: ListingChannelDayStats[] channel_trend: ListingChannelDayStats[] today_uploaders: ListingUploaderDayStats[] uploader_trend: ListingUploaderDayStats[] days: number timezone: string } export interface ListingUploaderDayStats { date: string uploader_id: number uploader_name: string upload_count: number } export interface DashboardRecentOrder { id: number order_no: string title: string renter_id: number owner_id: number status: OrderStatus rent_amount_cent: number deposit_amount_cent: number created_at: string } export interface DashboardRecentDispute { id: number order_id: number order_no: string title: string type: string status: DisputeStatus initiator_id: number created_at: string } export interface ManualEntryTodayStats { admin_id: number admin_name: string count: number } export interface AdminDashboard { metrics: DashboardMetrics pending: DashboardPending listing_daily: ListingDailyOverview manual_entry_today: ManualEntryTodayStats[] recent_orders: DashboardRecentOrder[] recent_disputes: DashboardRecentDispute[] generated_at: string } const emptyDayStats = (): ListingDayStats => ({ date: '', published_count: 0, active_offline_count: 0, trade_leave_count: 0, }) export async function fetchAdminDashboard() { const { data } = await apiClient.get>('/admin/dashboard') const payload = data.data const listingDaily = payload.listing_daily return { ...payload, listing_daily: { today: listingDaily?.today ?? emptyDayStats(), trend: listingDaily?.trend ?? [], today_channels: listingDaily?.today_channels ?? [], channel_trend: listingDaily?.channel_trend ?? [], today_uploaders: listingDaily?.today_uploaders ?? [], uploader_trend: listingDaily?.uploader_trend ?? [], days: listingDaily?.days ?? 7, timezone: listingDaily?.timezone ?? 'Asia/Shanghai', }, manual_entry_today: payload.manual_entry_today ?? [], recent_orders: payload.recent_orders ?? [], recent_disputes: payload.recent_disputes ?? [], } }