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 { db } from "~/server/db"; import { addPrezziario, getPrezziario, getPrezziarioByIdHandler, 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({ addPrezziario: adminProcedure .input( z.object({ data: z.custom(), }), ) .mutation(async ({ input }) => { return await addPrezziario({ db, input: input.data }); }), // deletePrezziario: adminProcedure // .input( // z.object({ // idprezziario: zPrezziarioId, // }), // ) // .mutation(async ({ input }) => { // return await deletePrezziario({ // db, // prezziarioId: input.idprezziario, // }); // }), getPrezziario: publicProcedure.query(async () => { return await getPrezziario(); }), getPrezziPerTipologia: publicProcedure .input( z.object({ tipologia: z.custom(), }), ) .query(async ({ input }) => { return await getPrezziarioByTipologia({ db, tipologia: input.tipologia, }); }), getPrezziPerTipologiaAll: publicProcedure.query(async () => { return { consulenza: await getPrezziarioConsulenza({ db, }), stabile: await getPrezziarioByTipologia({ db, tipologia: TipologiaPosizioneEnum.Stabile, }), transitorio: await getPrezziarioByTipologia({ db, tipologia: TipologiaPosizioneEnum.Transitorio, }), }; }), getPrezzoPerServizio: publicProcedure .input(z.object({ idprezziario: zPrezziarioId })) .query(async ({ input }) => { return await getPrezziarioByIdHandler({ id: input.idprezziario }); }), updatePrezziario: adminProcedure .input( z.object({ data: z.custom(), idprezziario: zPrezziarioId, }), ) .mutation(async ({ input }) => { return await updatePrezziario({ db, input: input.data, prezziarioId: input.idprezziario, }); }), });