import { expenseApi } from '../api/client'; import { Expense, CreateExpenseRequest } from '../types'; import { handleApiError } from '../utils/errorHandler'; export const expenseService = { async getAllByCategory(familyId: number, categoryId: number): Promise { try { const res = await expenseApi.getAllByCategory(familyId, categoryId); return res.data; } catch (error) { handleApiError(error); } }, async getById(familyId: number, categoryId: number, expenseId: number): Promise { try { const res = await expenseApi.getById(familyId, categoryId, expenseId); return res.data; } catch (error) { handleApiError(error); } }, async create(familyId: number, categoryId: number, data: CreateExpenseRequest): Promise { try { const res = await expenseApi.create(familyId, categoryId, data); return res.data; } catch (error) { handleApiError(error); } }, async update(familyId: number, categoryId: number, expenseId: number, data: Partial): Promise { try { const res = await expenseApi.update(familyId, categoryId, expenseId, data); return res.data; } catch (error) { handleApiError(error); } }, async delete(familyId: number, categoryId: number, expenseId: number): Promise { try { await expenseApi.delete(familyId, categoryId, expenseId); } catch (error) { handleApiError(error); } }, formatAmount(amount: number | string): string { const num = typeof amount === 'string' ? parseFloat(amount) : amount; return new Intl.NumberFormat('ru-RU', { style: 'currency', currency: 'RUB', minimumFractionDigits: 0, maximumFractionDigits: 0, }).format(num); }, sortByDate(expenses: Expense[], order: 'asc' | 'desc' = 'desc'): Expense[] { return [...expenses].sort((a, b) => { const dateA = new Date(a.created_at).getTime(); const dateB = new Date(b.created_at).getTime(); return order === 'desc' ? dateB - dateA : dateA - dateB; }); }, getTotalAmount(expenses: Expense[]): number { return expenses.reduce((sum, expense) => sum + Number(expense.amount), 0); }, };