infoalloggi-monorepo/apps/infoalloggi/src/server/api/routers/catasto.ts
Marco Pedone d17ac87917 feat: add Zod schemas for various entities and update API routes
- Introduced Zod schemas for validation in the following entities:
  - Provincie
  - Ratelimiter
  - Rinnovi
  - Servizio
  - ServizioAnnunci
  - ServizioInteressi
  - TestiEStringhe
  - Users
  - UserEtichette
  - UserInvites
  - UsersAnagrafica
  - UsersStorage
  - VideosRefs
  - StatusConfermaEnum
  - TipologiaPosizioneEnum

- Updated API routes in `catasto.ts` to include CRUD operations for Comuni, Nazioni, and Provincie with appropriate input validation.
- Enhanced controller methods in `catasto.controller.ts` to handle create, edit, and delete operations for Comuni and Nazioni.
- Added new utility Zod types for ComuniId, NazioniId, and ProvincieId.

Co-authored-by: Copilot <copilot@github.com>
2026-04-28 17:46:34 +02:00

123 lines
2.5 KiB
TypeScript

import z from "zod";
import {
ComuniUpdateSchema,
comuniId,
NewComuniSchema,
} from "~/schemas/public/Comuni";
import {
NazioniUpdateSchema,
NewNazioniSchema,
nazioniId,
} from "~/schemas/public/Nazioni";
import {
NewProvincieSchema,
ProvincieUpdateSchema,
provincieId,
} from "~/schemas/public/Provincie";
import {
adminProcedure,
createTRPCRouter,
publicProcedure,
} from "~/server/api/trpc";
import {
createComune,
createNazione,
createProvincia,
deleteComune,
deleteNazione,
deleteProvincia,
editComune,
editNazione,
editProvincia,
getComuni,
getNazioni,
getProvincie,
} from "~/server/controllers/catasto.controller";
export const catastoRouter = createTRPCRouter({
getComuni: publicProcedure.query(async () => {
return await getComuni();
}),
createComune: adminProcedure
.input(NewComuniSchema)
.mutation(async ({ input }) => {
return await createComune(input);
}),
editComune: adminProcedure
.input(
z.object({
id: comuniId,
data: ComuniUpdateSchema,
}),
)
.mutation(async ({ input }) => {
const { id, data } = input;
return await editComune({ id, data });
}),
deleteComune: adminProcedure
.input(
z.object({
id: comuniId,
}),
)
.mutation(async ({ input }) => {
return await deleteComune(input.id);
}),
getProvincie: publicProcedure.query(async () => {
return await getProvincie();
}),
createProvincia: adminProcedure
.input(NewProvincieSchema)
.mutation(async ({ input }) => {
return await createProvincia(input);
}),
editProvincia: adminProcedure
.input(
z.object({
id: provincieId,
data: ProvincieUpdateSchema,
}),
)
.mutation(async ({ input }) => {
const { id, data } = input;
return await editProvincia({ id, data });
}),
deleteProvincia: adminProcedure
.input(
z.object({
id: provincieId,
}),
)
.mutation(async ({ input }) => {
return await deleteProvincia(input.id);
}),
getNazioni: publicProcedure.query(async () => {
return await getNazioni();
}),
createNazione: adminProcedure
.input(NewNazioniSchema)
.mutation(async ({ input }) => {
return await createNazione(input);
}),
editNazione: adminProcedure
.input(
z.object({
id: nazioniId,
data: NazioniUpdateSchema,
}),
)
.mutation(async ({ input }) => {
const { id, data } = input;
return await editNazione({ id, data });
}),
deleteNazione: adminProcedure
.input(
z.object({
id: nazioniId,
}),
)
.mutation(async ({ input }) => {
return await deleteNazione(input.id);
}),
});