mirror of
https://github.com/Lifeforge-app/lifeforge.git
synced 2026-07-01 08:16:35 +00:00
Former-commit-id: e3dd3b1fa9510cbaa4ff21deda9310f86583e99c [formerly d71f00314d37442771ad59cfd33de230df9ff2d6] [formerly d236ed1a6d2ef949f36387e84bcd50425d24e266 [formerly 89aec5e5c3e321e53e8cec93effa25c6cd44039e]] Former-commit-id: f0ab09ec99e37dbefa18d8b873149044ecac5ee7 [formerly 211e34db4b22b193e2da9a5a7af70458249ed8e2] Former-commit-id: 82c9b5a2300566822f787af1f9eed1ddafdf1696
75 lines
1.9 KiB
TypeScript
75 lines
1.9 KiB
TypeScript
import {
|
|
bulkRegisterControllers,
|
|
forgeController,
|
|
} from "@functions/forgeController";
|
|
import express from "express";
|
|
import { WalletSchemas } from "shared";
|
|
import { z } from "zod/v4";
|
|
|
|
import * as UtilsService from "../services/utils.service";
|
|
|
|
const walletUtilsRouter = express.Router();
|
|
|
|
const getTypesCount = forgeController
|
|
.route("GET /types-count")
|
|
.description("Get wallet transaction types count and accumulation")
|
|
.schema({
|
|
response: z.record(
|
|
z.string(),
|
|
z.object({
|
|
amount: z.number(),
|
|
accumulate: z.number(),
|
|
}),
|
|
),
|
|
})
|
|
.callback(async ({ pb }) => await UtilsService.getTypesCount(pb));
|
|
|
|
const getIncomeExpensesSummary = forgeController
|
|
.route("GET /income-expenses")
|
|
.description("Get income and expenses summary for a specific month/year")
|
|
.schema({
|
|
query: z.object({
|
|
year: z.string(),
|
|
month: z.string(),
|
|
}),
|
|
response: WalletSchemas.WalletIncomeExpensesSummarySchema,
|
|
})
|
|
.callback(
|
|
async ({ pb, query: { year, month } }) =>
|
|
await UtilsService.getIncomeExpensesSummary(pb, year, month),
|
|
);
|
|
|
|
const getExpensesBreakdown = forgeController
|
|
.route("GET /expenses-breakdown")
|
|
.description("Get expenses breakdown by category for a specific month/year")
|
|
.schema({
|
|
query: z.object({
|
|
year: z
|
|
.string()
|
|
.transform((val) => parseInt(val) || new Date().getFullYear()),
|
|
month: z
|
|
.string()
|
|
.transform((val) => parseInt(val) || new Date().getMonth() + 1),
|
|
}),
|
|
response: z.record(
|
|
z.string(),
|
|
z.object({
|
|
amount: z.number(),
|
|
count: z.number(),
|
|
percentage: z.number(),
|
|
}),
|
|
),
|
|
})
|
|
.callback(
|
|
async ({ pb, query: { year, month } }) =>
|
|
await UtilsService.getExpensesBreakdown(pb, year, month),
|
|
);
|
|
|
|
bulkRegisterControllers(walletUtilsRouter, [
|
|
getTypesCount,
|
|
getIncomeExpensesSummary,
|
|
getExpensesBreakdown,
|
|
]);
|
|
|
|
export default walletUtilsRouter;
|