infoalloggi-monorepo/apps/infoalloggi/src/server/api/routers/prezziario.ts

105 lines
2.6 KiB
TypeScript
Raw Normal View History

import { z } from "zod/v4";
2025-08-04 17:45:44 +02:00
import type {
NewPrezziario,
PrezziarioUpdate,
} from "~/schemas/public/Prezziario";
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
import {
adminProcedure,
createTRPCRouter,
publicProcedure,
} from "~/server/api/trpc";
2025-08-04 17:45:44 +02:00
import { db } from "~/server/db";
import {
addPrezziario,
deletePrezziario,
getPrezziario,
getPrezziarioByIdHandler,
2025-08-04 17:45:44 +02:00
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<NewPrezziario>(),
}),
)
.mutation(async ({ input }) => {
return await addPrezziario({ db, input: input.data });
}),
updatePrezziario: adminProcedure
.input(
z.object({
idprezziario: zPrezziarioId,
data: z.custom<PrezziarioUpdate>(),
}),
)
.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<TipologiaPosizioneEnum>(),
}),
)
.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 });
}),
});