Files
lifeforge/server/src/apps/wallet/controllers/utils.controller.ts
melvinchia3636 644cf9b8ea 25w29
Former-commit-id: e3dd3b1fa9510cbaa4ff21deda9310f86583e99c [formerly d71f00314d37442771ad59cfd33de230df9ff2d6] [formerly d236ed1a6d2ef949f36387e84bcd50425d24e266 [formerly 89aec5e5c3e321e53e8cec93effa25c6cd44039e]]
Former-commit-id: f0ab09ec99e37dbefa18d8b873149044ecac5ee7 [formerly 211e34db4b22b193e2da9a5a7af70458249ed8e2]
Former-commit-id: 82c9b5a2300566822f787af1f9eed1ddafdf1696
2025-07-17 21:23:51 +08:00

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;