MoneyMgr/moneymgr_web/src/api/MovementsApi.ts

120 lines
2.6 KiB
TypeScript

import { APIClient } from "./ApiClient";
export type Balances = Record<number, number>;
export interface MovementUpdate {
account_id: number;
time: number;
label: string;
file_id?: number;
amount: number;
checked: boolean;
}
export interface Movement {
id: number;
account_id: number;
time: number;
label: string;
file_id?: number;
amount: number;
checked: boolean;
time_create: number;
time_update: number;
}
export class MovementApi {
/**
* Get all accounts balances
*/
static async GetAllBalances(): Promise<Balances> {
return (
await APIClient.exec({
uri: `/accounts/balances`,
method: "GET",
})
).data;
}
/**
* Create a new movement
*/
static async Create(q: MovementUpdate): Promise<void> {
await APIClient.exec({
uri: `/movement`,
method: "POST",
jsonData: q,
});
}
/**
* Get all the movements of an account
*/
static async GetAccountMovements(
account_id: number,
filters?: {
amount_min?: number;
amount_max?: number;
time_min?: number;
time_max?: number;
label?: string;
limit?: number;
}
): Promise<Movement[]> {
let filtersS = new URLSearchParams();
if (filters) {
if (filters.amount_min)
filtersS.append("amount_min", filters.amount_min.toString());
if (filters.amount_max)
filtersS.append("amount_max", filters.amount_max.toString());
if (filters.time_min)
filtersS.append("time_min", filters.time_min.toString());
if (filters.time_max)
filtersS.append("time_max", filters.time_max.toString());
if (filters.label) filtersS.append("label", filters.label);
if (filters.limit) filtersS.append("limit", filters.limit);
}
return (
await APIClient.exec({
uri: `/account/${account_id}/movements?${filtersS}`,
method: "GET",
})
).data;
}
/**
* Get a single movement information
*/ static async GetSingleMovement(movement_id: number): Promise<Movement> {
return (
await APIClient.exec({
uri: `/movement/${movement_id}`,
method: "GET",
})
).data;
}
/**
* Update a movement information
*/
static async Update(movement: Movement): Promise<Movement> {
return (
await APIClient.exec({
uri: `/movement/${movement.id}`,
method: "PUT",
jsonData: movement,
})
).data;
}
/**
* Delete a movement
*/
static async Delete(movement: Movement): Promise<void> {
await APIClient.exec({
uri: `/movement/${movement.id}`,
method: "DELETE",
});
}
}