import _ from 'lodash' import * as z from 'zod' import type { FastifyPluginCallbackZod } from 'fastify-type-provider-zod' import { paginate } from '../../lib/kysely_helpers.ts' const transactionRoutes: FastifyPluginCallbackZod = (fastify, _, done) => { const { db } = fastify fastify.route({ url: '/', method: 'GET', schema: { querystring: z.object({ year: z.optional(z.coerce.number()), accountNumber: z.optional(z.coerce.number()), limit: z.number().default(2), sort: z.string().default('t.id'), offset: z.number().optional(), }), }, async handler(request) { const { offset, limit, sort: _sort, ...where } = request.query const baseQuery = db .selectFrom('transaction as t') .innerJoin('entry as e', 't.entryId', 'e.id') .innerJoin('financialYear as fy', 'e.financialYearId', 'fy.id') const result = await paginate( baseQuery.select([ 't.accountNumber', 'e.transactionDate', 't.entryId', 't.amount', 't.description', 't.invoiceId', 'e.description as entryDescription', ]), baseQuery, { // @ts-ignore where, limit, offset, }, ) return result }, }) fastify.route({ url: '/:id', method: 'GET', schema: { params: z.object({ id: z.number(), }), }, handler(req) { return db.selectFrom('transaction').selectAll().where('id', '=', req.params.id).execute() }, }) done() } export default transactionRoutes