infoalloggi-monorepo/apps/infoalloggi/src/schemas/public/Servizio.ts

188 lines
6.7 KiB
TypeScript
Raw Normal View History

import { usersId, type UsersId } from './Users';
import { tipologiaPosizioneEnum, type default as TipologiaPosizioneEnum } from './TipologiaPosizioneEnum';
import { usersStorageUserStorageId, type UsersStorageUserStorageId } from './UsersStorage';
import type { ColumnType, Selectable, Insertable, Updateable } from 'kysely';
import { z } from 'zod';
2025-08-04 17:45:44 +02:00
/** Identifier type for public.servizio */
export type ServizioServizioId = string & { __brand: 'public.servizio' };
2025-08-04 17:45:44 +02:00
/** Represents the table public.servizio */
export default interface ServizioTable {
servizio_id: ColumnType<ServizioServizioId, ServizioServizioId | undefined, ServizioServizioId>;
2025-08-04 17:45:44 +02:00
user_id: ColumnType<UsersId, UsersId, UsersId>;
2025-08-04 17:45:44 +02:00
created_at: ColumnType<Date, Date | string | undefined, Date | string>;
2025-08-04 17:45:44 +02:00
tipologia: ColumnType<TipologiaPosizioneEnum, TipologiaPosizioneEnum, TipologiaPosizioneEnum>;
2025-08-04 17:45:44 +02:00
arredato: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
budget: ColumnType<number, number, number>;
2025-08-04 17:45:44 +02:00
n_adulti: ColumnType<number, number, number>;
2025-08-04 17:45:44 +02:00
n_minori: ColumnType<number, number, number>;
2025-08-04 17:45:44 +02:00
animali: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
fumatori: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
giardino: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
parcheggio: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
terrazzo: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
ascensore: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
pianoterra: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
motivazione_transitorio: ColumnType<string | null, string | null, string | null>;
2025-08-04 17:45:44 +02:00
reddito: ColumnType<string | null, string | null, string | null>;
2025-08-04 17:45:44 +02:00
decorrenza: ColumnType<Date | null, Date | string | null, Date | string | null>;
2025-08-04 17:45:44 +02:00
isInterrotto: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
entromese: ColumnType<number | null, number | null, number | null>;
2025-08-04 17:45:44 +02:00
permanenza: ColumnType<number | null, number | null, number | null>;
2025-08-04 17:45:44 +02:00
isOkAcconto: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
isOkSaldo: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
isOkConsulenza: ColumnType<boolean, boolean | undefined, boolean>;
doc_motivazione_ref: ColumnType<UsersStorageUserStorageId | null, UsersStorageUserStorageId | null, UsersStorageUserStorageId | null>;
scadenza_motivazione_transitoria: ColumnType<Date | null, Date | string | null, Date | string | null>;
skipPayment: ColumnType<boolean, boolean | undefined, boolean>;
skipControlloDoc: ColumnType<boolean, boolean | undefined, boolean>;
skipDocMotivazione: ColumnType<boolean, boolean | undefined, boolean>;
onboardOk: ColumnType<boolean, boolean | undefined, boolean>;
interruzioneDays: ColumnType<number, number | undefined, number>;
acceptedInterr: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
}
export type Servizio = Selectable<ServizioTable>;
export type NewServizio = Insertable<ServizioTable>;
export type ServizioUpdate = Updateable<ServizioTable>;
export const servizioServizioId = z.uuid().transform(value => value as ServizioServizioId);
export const ServizioSchema = z.object({
servizio_id: servizioServizioId,
user_id: usersId,
created_at: z.date(),
tipologia: tipologiaPosizioneEnum,
arredato: z.boolean(),
budget: z.number(),
n_adulti: z.number(),
n_minori: z.number(),
animali: z.boolean(),
fumatori: z.boolean(),
giardino: z.boolean(),
parcheggio: z.boolean(),
terrazzo: z.boolean(),
ascensore: z.boolean(),
pianoterra: z.boolean(),
motivazione_transitorio: z.string().nullable(),
reddito: z.string().nullable(),
decorrenza: z.date().nullable(),
isInterrotto: z.boolean(),
entromese: z.number().nullable(),
permanenza: z.number().nullable(),
isOkAcconto: z.boolean(),
isOkSaldo: z.boolean(),
isOkConsulenza: z.boolean(),
doc_motivazione_ref: usersStorageUserStorageId.nullable(),
scadenza_motivazione_transitoria: z.date().nullable(),
skipPayment: z.boolean(),
skipControlloDoc: z.boolean(),
skipDocMotivazione: z.boolean(),
onboardOk: z.boolean(),
interruzioneDays: z.number(),
acceptedInterr: z.boolean(),
});
export const NewServizioSchema = z.object({
servizio_id: servizioServizioId.optional(),
user_id: usersId,
created_at: z.date().optional(),
tipologia: tipologiaPosizioneEnum,
arredato: z.boolean().optional(),
budget: z.number(),
n_adulti: z.number(),
n_minori: z.number(),
animali: z.boolean().optional(),
fumatori: z.boolean().optional(),
giardino: z.boolean().optional(),
parcheggio: z.boolean().optional(),
terrazzo: z.boolean().optional(),
ascensore: z.boolean().optional(),
pianoterra: z.boolean().optional(),
motivazione_transitorio: z.string().optional().nullable(),
reddito: z.string().optional().nullable(),
decorrenza: z.date().optional().nullable(),
isInterrotto: z.boolean().optional(),
entromese: z.number().optional().nullable(),
permanenza: z.number().optional().nullable(),
isOkAcconto: z.boolean().optional(),
isOkSaldo: z.boolean().optional(),
isOkConsulenza: z.boolean().optional(),
doc_motivazione_ref: usersStorageUserStorageId.optional().nullable(),
scadenza_motivazione_transitoria: z.date().optional().nullable(),
skipPayment: z.boolean().optional(),
skipControlloDoc: z.boolean().optional(),
skipDocMotivazione: z.boolean().optional(),
onboardOk: z.boolean().optional(),
interruzioneDays: z.number().optional(),
acceptedInterr: z.boolean().optional(),
});
export const ServizioUpdateSchema = z.object({
servizio_id: servizioServizioId.optional(),
user_id: usersId.optional(),
created_at: z.date().optional(),
tipologia: tipologiaPosizioneEnum.optional(),
arredato: z.boolean().optional(),
budget: z.number().optional(),
n_adulti: z.number().optional(),
n_minori: z.number().optional(),
animali: z.boolean().optional(),
fumatori: z.boolean().optional(),
giardino: z.boolean().optional(),
parcheggio: z.boolean().optional(),
terrazzo: z.boolean().optional(),
ascensore: z.boolean().optional(),
pianoterra: z.boolean().optional(),
motivazione_transitorio: z.string().optional().nullable(),
reddito: z.string().optional().nullable(),
decorrenza: z.date().optional().nullable(),
isInterrotto: z.boolean().optional(),
entromese: z.number().optional().nullable(),
permanenza: z.number().optional().nullable(),
isOkAcconto: z.boolean().optional(),
isOkSaldo: z.boolean().optional(),
isOkConsulenza: z.boolean().optional(),
doc_motivazione_ref: usersStorageUserStorageId.optional().nullable(),
scadenza_motivazione_transitoria: z.date().optional().nullable(),
skipPayment: z.boolean().optional(),
skipControlloDoc: z.boolean().optional(),
skipDocMotivazione: z.boolean().optional(),
onboardOk: z.boolean().optional(),
interruzioneDays: z.number().optional(),
acceptedInterr: z.boolean().optional(),
});