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

105 lines
2.4 KiB
TypeScript
Raw Normal View History

import { z } from "zod/v4";
2025-08-04 17:45:44 +02:00
import type {
2025-08-28 18:27:07 +02:00
NewPrezziario,
PrezziarioUpdate,
2025-08-04 17:45:44 +02:00
} from "~/schemas/public/Prezziario";
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
import {
2025-08-28 18:27:07 +02:00
adminProcedure,
createTRPCRouter,
publicProcedure,
2025-08-04 17:45:44 +02:00
} from "~/server/api/trpc";
2025-08-04 17:45:44 +02:00
import { db } from "~/server/db";
import {
2025-08-28 18:27:07 +02:00
addPrezziario,
deletePrezziario,
getPrezziario,
getPrezziarioByIdHandler,
getPrezziarioByTipologia,
getPrezziarioConsulenza,
updatePrezziario,
2025-08-04 17:45:44 +02:00
} 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({
2025-08-28 18:27:07 +02:00
addPrezziario: adminProcedure
.input(
z.object({
data: z.custom<NewPrezziario>(),
}),
)
.mutation(async ({ input }) => {
return await addPrezziario({ db, input: input.data });
}),
2025-08-29 16:18:32 +02:00
deletePrezziario: adminProcedure
2025-08-28 18:27:07 +02:00
.input(
z.object({
idprezziario: zPrezziarioId,
}),
)
.mutation(async ({ input }) => {
2025-08-29 16:18:32 +02:00
return await deletePrezziario({
2025-08-28 18:27:07 +02:00
db,
prezziarioId: input.idprezziario,
});
}),
2025-08-29 16:18:32 +02:00
getPrezziario: publicProcedure.query(async () => {
return await getPrezziario();
}),
getPrezziPerTipologia: publicProcedure
2025-08-28 18:27:07 +02:00
.input(
z.object({
2025-08-29 16:18:32 +02:00
tipologia: z.custom<TipologiaPosizioneEnum>(),
2025-08-28 18:27:07 +02:00
}),
)
2025-08-29 16:18:32 +02:00
.query(async ({ input }) => {
return await getPrezziarioByTipologia({
2025-08-28 18:27:07 +02:00
db,
2025-08-29 16:18:32 +02:00
tipologia: input.tipologia,
2025-08-28 18:27:07 +02:00
});
}),
2025-08-04 17:45:44 +02:00
2025-08-28 18:27:07 +02:00
getPrezziPerTipologiaAll: publicProcedure.query(async () => {
return {
2025-08-29 16:18:32 +02:00
consulenza: await getPrezziarioConsulenza({
2025-08-28 18:27:07 +02:00
db,
}),
stabile: await getPrezziarioByTipologia({
db,
tipologia: TipologiaPosizioneEnum.Stabile,
}),
2025-08-29 16:18:32 +02:00
transitorio: await getPrezziarioByTipologia({
2025-08-28 18:27:07 +02:00
db,
2025-08-29 16:18:32 +02:00
tipologia: TipologiaPosizioneEnum.Transitorio,
2025-08-28 18:27:07 +02:00
}),
};
}),
2025-08-29 16:18:32 +02:00
getPrezzoPerServizio: publicProcedure
.input(z.object({ idprezziario: zPrezziarioId }))
.query(async ({ input }) => {
return await getPrezziarioByIdHandler({ id: input.idprezziario });
2025-08-29 16:18:32 +02:00
}),
updatePrezziario: adminProcedure
2025-08-28 18:27:07 +02:00
.input(
z.object({
2025-08-29 16:18:32 +02:00
data: z.custom<PrezziarioUpdate>(),
idprezziario: zPrezziarioId,
2025-08-28 18:27:07 +02:00
}),
)
2025-08-29 16:18:32 +02:00
.mutation(async ({ input }) => {
return await updatePrezziario({
2025-08-28 18:27:07 +02:00
db,
2025-08-29 16:18:32 +02:00
input: input.data,
prezziarioId: input.idprezziario,
2025-08-28 18:27:07 +02:00
});
}),
2025-08-04 17:45:44 +02:00
});