71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
// frontend/dashboard/src/api/services/salesApi.ts
|
|
/**
|
|
* Sales data API service
|
|
*/
|
|
|
|
import { ApiClient } from '../base/apiClient';
|
|
import {
|
|
SalesRecord,
|
|
CreateSalesRequest,
|
|
ApiResponse,
|
|
} from '../../types/api';
|
|
|
|
export interface SalesQuery {
|
|
start_date?: string;
|
|
end_date?: string;
|
|
product_name?: string;
|
|
limit?: number;
|
|
offset?: number;
|
|
}
|
|
|
|
export class SalesApi {
|
|
constructor(private client: ApiClient) {}
|
|
|
|
async getSales(query: SalesQuery = {}): Promise<SalesRecord[]> {
|
|
return this.client.get<SalesRecord[]>('/data/sales', {
|
|
params: query,
|
|
});
|
|
}
|
|
|
|
async createSalesRecord(salesData: CreateSalesRequest): Promise<SalesRecord> {
|
|
return this.client.post<SalesRecord>('/data/sales', salesData);
|
|
}
|
|
|
|
async updateSalesRecord(id: string, updates: Partial<CreateSalesRequest>): Promise<SalesRecord> {
|
|
return this.client.patch<SalesRecord>(`/data/sales/${id}`, updates);
|
|
}
|
|
|
|
async deleteSalesRecord(id: string): Promise<void> {
|
|
return this.client.delete(`/data/sales/${id}`);
|
|
}
|
|
|
|
async bulkCreateSales(salesData: CreateSalesRequest[]): Promise<SalesRecord[]> {
|
|
return this.client.post<SalesRecord[]>('/data/sales/bulk', salesData);
|
|
}
|
|
|
|
async uploadSalesFile(
|
|
file: File,
|
|
onProgress?: (progress: number) => void
|
|
): Promise<{ imported: number; errors: any[] }> {
|
|
return this.client.uploadFile('/data/sales/upload', file, onProgress);
|
|
}
|
|
|
|
async getSalesAnalytics(
|
|
startDate: string,
|
|
endDate: string
|
|
): Promise<{
|
|
totalRevenue: number;
|
|
totalQuantity: number;
|
|
topProducts: Array<{ product_name: string; quantity: number; revenue: number }>;
|
|
dailyTrends: Array<{ date: string; quantity: number; revenue: number }>;
|
|
}> {
|
|
return this.client.get('/data/sales/analytics', {
|
|
params: { start_date: startDate, end_date: endDate },
|
|
});
|
|
}
|
|
|
|
async getProductList(): Promise<string[]> {
|
|
return this.client.get<string[]>('/data/sales/products');
|
|
}
|
|
}
|