basic AI front epta

This commit is contained in:
arrelin
2025-12-15 12:16:37 +03:00
parent 74d55c43fd
commit 1e393c79b5
14 changed files with 1513 additions and 63 deletions

View File

@@ -0,0 +1,84 @@
import axios from 'axios';
import type {
Family,
Category,
Expense,
RemainingLimit,
LoginRequest,
LoginResponse,
CreateFamilyRequest,
CreateCategoryRequest,
CreateExpenseRequest,
} from '../types';
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:3000';
const apiClient = axios.create({
baseURL: API_BASE_URL,
withCredentials: true,
});
export const authApi = {
login: (data: LoginRequest) =>
apiClient.post<LoginResponse>('/login', data),
logout: () =>
apiClient.post('/logout'),
};
export const familyApi = {
getAll: () =>
apiClient.get<Family[]>('/families'),
getById: (id: number) =>
apiClient.get<Family>(`/families/${id}`),
create: (data: CreateFamilyRequest) =>
apiClient.post<Family>('/families', data),
update: (id: number, data: { name: string }) =>
apiClient.put<Family>(`/families/${id}`, data),
delete: (id: number) =>
apiClient.delete(`/families/${id}`),
};
export const categoryApi = {
getAllByFamily: (familyId: number) =>
apiClient.get<Category[]>(`/families/${familyId}/categories`),
getById: (familyId: number, categoryId: number) =>
apiClient.get<Category>(`/families/${familyId}/categories/${categoryId}`),
create: (familyId: number, data: CreateCategoryRequest) =>
apiClient.post<Category>(`/families/${familyId}/categories`, data),
update: (familyId: number, categoryId: number, data: Partial<CreateCategoryRequest>) =>
apiClient.put<Category>(`/families/${familyId}/categories/${categoryId}`, data),
delete: (familyId: number, categoryId: number) =>
apiClient.delete(`/families/${familyId}/categories/${categoryId}`),
resetLimit: (familyId: number, categoryId: number, newLimit: number) =>
apiClient.put<Category>(`/families/${familyId}/categories/${categoryId}`, { limit_amount: newLimit }),
};
export const expenseApi = {
getAllByCategory: (familyId: number, categoryId: number) =>
apiClient.get<Expense[]>(`/families/${familyId}/categories/${categoryId}/expenses`),
getById: (familyId: number, categoryId: number, expenseId: number) =>
apiClient.get<Expense>(`/families/${familyId}/categories/${categoryId}/expenses/${expenseId}`),
create: (familyId: number, categoryId: number, data: CreateExpenseRequest) =>
apiClient.post<Expense>(`/families/${familyId}/categories/${categoryId}/expenses`, data),
update: (familyId: number, categoryId: number, expenseId: number, data: Partial<CreateExpenseRequest>) =>
apiClient.put<Expense>(`/families/${familyId}/categories/${categoryId}/expenses/${expenseId}`, data),
delete: (familyId: number, categoryId: number, expenseId: number) =>
apiClient.delete(`/families/${familyId}/categories/${categoryId}/expenses/${expenseId}`),
getRemainingLimit: (familyId: number, categoryId: number) =>
apiClient.get<RemainingLimit>(`/families/${familyId}/categories/${categoryId}/remaining`),
};