revert Merge pull request 'try to do better' (#18) from refactor/frontend-code-quality into master Reviewed-on: http://192.168.31.100:3847/Arrelin/family_budget/pulls/18
72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
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<Expense[]> {
|
|
try {
|
|
const res = await expenseApi.getAllByCategory(familyId, categoryId);
|
|
return res.data;
|
|
} catch (error) {
|
|
handleApiError(error);
|
|
}
|
|
},
|
|
|
|
async getById(familyId: number, categoryId: number, expenseId: number): Promise<Expense> {
|
|
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<Expense> {
|
|
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<CreateExpenseRequest>): Promise<Expense> {
|
|
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<void> {
|
|
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);
|
|
},
|
|
};
|