feat(wallets): implement wallet management features including create, update, delete, deposit, transfer, and list movements

- Added createWallet, updateWallet, deleteWallet, depositWallet, transferWallet, and listMovements handlers.
- Created corresponding routes for wallet operations.
- Developed frontend components for wallet management including dialogs for creating, editing, depositing, adjusting balance, transferring, and viewing movements.
- Integrated wallet management into the authenticated routes.
This commit is contained in:
Jose Selesan
2026-06-17 09:36:55 -03:00
parent 1ff2abc16a
commit 1d954217b7
26 changed files with 1643 additions and 0 deletions

View File

@@ -320,6 +320,101 @@ export function importPeriodicExpenses(file: File): Promise<ImportResult> {
});
}
// Wallets
export type Wallet = {
id: number;
name: string;
currency: string;
balance: number;
createdAt: string;
updatedAt: string;
};
export type WalletMovement = {
id: number;
walletId: number;
type: "DEPOSIT" | "WITHDRAWAL" | "TRANSFER_IN" | "TRANSFER_OUT" | "ADJUSTMENT";
amount: number;
description: string | null;
referenceWalletId: number | null;
transferGroupId: string | null;
createdAt: string;
};
export type CreateWalletInput = {
name: string;
currency: string;
initialBalance?: number;
};
export type DepositInput = {
amount: number;
description?: string;
};
export type AdjustBalanceInput = {
newBalance: number;
description?: string;
};
export type TransferInput = {
fromWalletId: number;
toWalletId: number;
outgoingAmount: number;
incomingAmount: number;
description?: string;
};
export function getWallets(): Promise<Wallet[]> {
return fetcher<Wallet[]>("/api/wallets");
}
export function createWallet(data: CreateWalletInput): Promise<Wallet> {
return mutator<Wallet>("/api/wallets", "POST", data);
}
export function updateWallet(
id: number,
data: { name: string; currency: string },
): Promise<Wallet> {
return mutator<Wallet>(`/api/wallets/${id}`, "PUT", data);
}
export function deleteWallet(id: number): Promise<void> {
return mutator<void>(`/api/wallets/${id}`, "DELETE");
}
export function depositWallet(
id: number,
data: DepositInput,
): Promise<Wallet> {
return mutator<Wallet>(`/api/wallets/${id}/deposit`, "POST", data);
}
export function adjustBalance(
id: number,
data: AdjustBalanceInput,
): Promise<Wallet> {
return mutator<Wallet>(`/api/wallets/${id}/adjust`, "POST", data);
}
export function transferWallet(
data: TransferInput,
): Promise<{ from: Wallet; to: Wallet }> {
return mutator<{ from: Wallet; to: Wallet }>(
"/api/wallets/transfer",
"POST",
data,
);
}
export function getWalletMovements(
id: number,
): Promise<WalletMovement[]> {
return fetcher<WalletMovement[]>(`/api/wallets/${id}/movements`);
}
// Telegram
export type TelegramStatus = {