aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/lib')
-rw-r--r--frontend/src/lib/api.ts67
1 files changed, 67 insertions, 0 deletions
diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts
index be77f16..e654007 100644
--- a/frontend/src/lib/api.ts
+++ b/frontend/src/lib/api.ts
@@ -109,6 +109,73 @@ export const accountApi = {
})
};
+// Transaction API
+export interface Transaction {
+ ID: number;
+ CreatedAt: string;
+ UpdatedAt: string;
+ DeletedAt: string | null;
+ UserID: number;
+ AccountID: number | null;
+ Description: string;
+ Amount: number;
+ Type: "Income" | "Expense";
+ Date: string;
+ Category: string;
+}
+
+export interface TransactionInput {
+ description: string;
+ amount: number;
+ type: "Income" | "Expense";
+ date: string; // YYYY-MM-DD format
+ category: string;
+ accountId?: number;
+}
+
+export interface TransactionFilters {
+ type?: "Income" | "Expense";
+ accountId?: number;
+ category?: string;
+ startDate?: string; // YYYY-MM-DD format
+ endDate?: string; // YYYY-MM-DD format
+}
+
+export const transactionApi = {
+ getTransactions: (filters?: TransactionFilters) => {
+ let queryParams = '';
+
+ if (filters) {
+ const params = new URLSearchParams();
+ if (filters.type) params.append('type', filters.type);
+ if (filters.accountId) params.append('account_id', filters.accountId.toString());
+ if (filters.category) params.append('category', filters.category);
+ if (filters.startDate) params.append('start_date', filters.startDate);
+ if (filters.endDate) params.append('end_date', filters.endDate);
+
+ queryParams = `?${params.toString()}`;
+ }
+
+ return fetchWithAuth(`/transactions${queryParams}`);
+ },
+
+ getTransaction: (id: number) => fetchWithAuth(`/transactions/${id}`),
+
+ createTransaction: (transaction: TransactionInput) => fetchWithAuth('/transactions', {
+ method: 'POST',
+ body: JSON.stringify(transaction)
+ }),
+
+ updateTransaction: (id: number, transaction: Partial<TransactionInput>) => fetchWithAuth(`/transactions/${id}`, {
+ method: 'PUT',
+ body: JSON.stringify(transaction)
+ }),
+
+ deleteTransaction: (id: number) => fetchWithAuth(`/transactions/${id}`, {
+ method: 'DELETE'
+ })
+};
+
// Loan API
export interface Loan {
ID: number;