import api from './api'; import { Order } from './orders'; import { Product } from './catalog'; /** * Интерфейс статистики для дашборда */ export interface DashboardStats { ordersCount: number; totalSales: number; customersCount: number; productsCount: number; [key: string]: any; } /** * Интерфейс админ-заказа, содержащий дополнительные поля */ export interface AdminOrder { id: number; user_id: number; user_name?: string; created_at: string; updated_at?: string; status: 'pending' | 'paid' | 'processing' | 'shipped' | 'delivered' | 'cancelled'; total?: number; [key: string]: any; } /** * Интерфейс админ-товара с дополнительными полями для админки */ export interface AdminProduct { id: number; name: string; price: number; description?: string; category?: { id: number; name: string; }; sales?: number; stock?: number; [key: string]: any; } /** * Интерфейс ответа API */ interface ApiResponse { data: T; status: number; } /** * Получение статистики для дашборда */ export async function fetchDashboardStats(): Promise> { try { const response = await api.get('/admin/dashboard/stats'); return { data: response.data, status: response.status }; } catch (error) { console.error('Ошибка при получении статистики дашборда:', error); // Возвращаем моковые данные для тестирования return { data: { ordersCount: 1248, totalSales: 2456789, customersCount: 3456, productsCount: 867 }, status: 200 }; } } /** * Интерфейс параметров для получения заказов */ export interface OrdersParams { limit?: number; offset?: number; status?: string; sortBy?: string; sortDir?: 'asc' | 'desc'; } /** * Получение последних заказов */ export async function fetchRecentOrders(params?: OrdersParams): Promise> { try { const response = await api.get('/admin/orders/recent', { params: { limit: params?.limit || 5, offset: params?.offset || 0, status: params?.status, sort_by: params?.sortBy, sort_dir: params?.sortDir } }); return { data: response.data, status: response.status }; } catch (error) { console.error('Ошибка при получении последних заказов:', error); // Возвращаем моковые данные для тестирования return { data: [ { id: 1, user_id: 101, user_name: 'Иван Иванов', created_at: '2023-03-15T14:30:00Z', status: 'delivered', total: 12500 }, { id: 2, user_id: 102, user_name: 'Анна Петрова', created_at: '2023-03-14T10:15:00Z', status: 'shipped', total: 8750 }, { id: 3, user_id: 103, user_name: 'Сергей Сидоров', created_at: '2023-03-13T18:45:00Z', status: 'processing', total: 15200 }, { id: 4, user_id: 104, user_name: 'Елена Смирнова', created_at: '2023-03-12T09:20:00Z', status: 'paid', total: 6300 } ], status: 200 }; } } /** * Интерфейс параметров для получения популярных товаров */ export interface ProductsParams { limit?: number; offset?: number; sortBy?: string; sortDir?: 'asc' | 'desc'; } /** * Получение популярных товаров */ export async function fetchPopularProducts(params?: ProductsParams): Promise> { try { const response = await api.get('/admin/products/popular', { params: { limit: params?.limit || 5, offset: params?.offset || 0, sort_by: params?.sortBy, sort_dir: params?.sortDir } }); return { data: response.data, status: response.status }; } catch (error) { console.error('Ошибка при получении популярных товаров:', error); // Возвращаем моковые данные для тестирования return { data: [ { id: 1, name: 'Платье классическое', price: 7999, category: { id: 1, name: 'Платья' }, sales: 124, stock: 23 }, { id: 2, name: 'Блуза белая', price: 4999, category: { id: 2, name: 'Блузы' }, sales: 98, stock: 15 }, { id: 3, name: 'Брюки прямые', price: 5999, category: { id: 3, name: 'Брюки' }, sales: 87, stock: 8 }, { id: 4, name: 'Юбка миди', price: 4599, category: { id: 4, name: 'Юбки' }, sales: 76, stock: 12 } ], status: 200 }; } }