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:
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user