import { z } from "zod/v4"; import type { NewPrezziario, PrezziarioUpdate, } from "~/schemas/public/Prezziario"; import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum"; import { adminProcedure, createTRPCRouter, publicProcedure, } from "~/server/api/trpc"; import { getPrezziarioByIdHandler } from "~/server/controllers/prezziario.controller"; import { db } from "~/server/db"; import { addPrezziario, deletePrezziario, getPrezziario, getPrezziarioByTipologia, getPrezziarioConsulenza, updatePrezziario, } from "~/server/services/prezziario.service"; import { zPrezziarioId } from "~/server/utils/zod_types"; // Create a new ratelimiter, that allows 10 requests per 10 seconds /* const ratelimit = new RateLimiterHandler({ maxRequests: 10, windowSize: 60, analytics: false, }); */ export const prezziarioRouter = createTRPCRouter({ getPrezziario: publicProcedure.query(async () => { return await getPrezziario(); }), addPrezziario: adminProcedure .input( z.object({ data: z.custom(), }), ) .mutation(async ({ input }) => { return await addPrezziario({ db, input: input.data }); }), updatePrezziario: adminProcedure .input( z.object({ idprezziario: zPrezziarioId, data: z.custom(), }), ) .mutation(async ({ input }) => { return await updatePrezziario({ db, input: input.data, prezziarioId: input.idprezziario, }); }), deletePrezziario: adminProcedure .input( z.object({ idprezziario: zPrezziarioId, }), ) .mutation(async ({ input }) => { return await deletePrezziario({ db, prezziarioId: input.idprezziario, }); }), getPrezziPerTipologiaAll: publicProcedure.query(async () => { return { transitorio: await getPrezziarioByTipologia({ db, tipologia: TipologiaPosizioneEnum.Transitorio, }), stabile: await getPrezziarioByTipologia({ db, tipologia: TipologiaPosizioneEnum.Stabile, }), consulenza: await getPrezziarioConsulenza({ db, }), }; }), getPrezziPerTipologia: publicProcedure .input( z.object({ tipologia: z.custom(), }), ) .query(async ({ input }) => { return await getPrezziarioByTipologia({ db, tipologia: input.tipologia, }); }), getPrezzoPerServizio: publicProcedure .input(z.object({ idprezziario: zPrezziarioId })) .query(async ({ input }) => { return await getPrezziarioByIdHandler({ db, input }); }), });