infoalloggi-monorepo/apps/infoalloggi/src/schemas/public/Ordini.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

101 lines
No EOL
3.7 KiB
TypeScript

import { usersId, type UsersId } from './Users';
import { prezziarioIdprezziario, type PrezziarioIdprezziario } from './Prezziario';
import { servizioServizioId, type ServizioServizioId } from './Servizio';
import { orderTypeEnum, type default as OrderTypeEnum } from './OrderTypeEnum';
import { paymentStatusEnum, type default as PaymentStatusEnum } from './PaymentStatusEnum';
import { rinnoviId, type RinnoviId } from './Rinnovi';
import type { ColumnType, Selectable, Insertable, Updateable } from 'kysely';
import { z } from 'zod';
/** Identifier type for public.ordini */
export type OrdiniOrdineId = string & { __brand: 'public.ordini' };
/** Represents the table public.ordini */
export default interface OrdiniTable {
ordine_id: ColumnType<OrdiniOrdineId, OrdiniOrdineId | undefined, OrdiniOrdineId>;
userid: ColumnType<UsersId, UsersId, UsersId>;
created_at: ColumnType<Date, Date | string | undefined, Date | string>;
packid: ColumnType<PrezziarioIdprezziario, PrezziarioIdprezziario, PrezziarioIdprezziario>;
servizio_id: ColumnType<ServizioServizioId | null, ServizioServizioId | null, ServizioServizioId | null>;
type: ColumnType<OrderTypeEnum, OrderTypeEnum, OrderTypeEnum>;
isActive: ColumnType<boolean, boolean | undefined, boolean>;
amount_cent: ColumnType<number, number, number>;
paymentmethod: ColumnType<string | null, string | null, string | null>;
paid_at: ColumnType<Date | null, Date | string | null, Date | string | null>;
intent_id: ColumnType<string | null, string | null, string | null>;
paymentstatus: ColumnType<PaymentStatusEnum | null, PaymentStatusEnum | null, PaymentStatusEnum | null>;
sconto: ColumnType<number, number | undefined, number>;
rinnovo_id: ColumnType<RinnoviId | null, RinnoviId | null, RinnoviId | null>;
}
export type Ordini = Selectable<OrdiniTable>;
export type NewOrdini = Insertable<OrdiniTable>;
export type OrdiniUpdate = Updateable<OrdiniTable>;
export const ordiniOrdineId = z.uuid().transform(value => value as OrdiniOrdineId);
export const OrdiniSchema = z.object({
ordine_id: ordiniOrdineId,
userid: usersId,
created_at: z.date(),
packid: prezziarioIdprezziario,
servizio_id: servizioServizioId.nullable(),
type: orderTypeEnum,
isActive: z.boolean(),
amount_cent: z.number(),
paymentmethod: z.string().nullable(),
paid_at: z.date().nullable(),
intent_id: z.string().nullable(),
paymentstatus: paymentStatusEnum.nullable(),
sconto: z.number(),
rinnovo_id: rinnoviId.nullable(),
});
export const NewOrdiniSchema = z.object({
ordine_id: ordiniOrdineId.optional(),
userid: usersId,
created_at: z.date().optional(),
packid: prezziarioIdprezziario,
servizio_id: servizioServizioId.optional().nullable(),
type: orderTypeEnum,
isActive: z.boolean().optional(),
amount_cent: z.number(),
paymentmethod: z.string().optional().nullable(),
paid_at: z.date().optional().nullable(),
intent_id: z.string().optional().nullable(),
paymentstatus: paymentStatusEnum.optional().nullable(),
sconto: z.number().optional(),
rinnovo_id: rinnoviId.optional().nullable(),
});
export const OrdiniUpdateSchema = z.object({
ordine_id: ordiniOrdineId.optional(),
userid: usersId.optional(),
created_at: z.date().optional(),
packid: prezziarioIdprezziario.optional(),
servizio_id: servizioServizioId.optional().nullable(),
type: orderTypeEnum.optional(),
isActive: z.boolean().optional(),
amount_cent: z.number().optional(),
paymentmethod: z.string().optional().nullable(),
paid_at: z.date().optional().nullable(),
intent_id: z.string().optional().nullable(),
paymentstatus: paymentStatusEnum.optional().nullable(),
sconto: z.number().optional(),
rinnovo_id: rinnoviId.optional().nullable(),
});