Refactor: Update Zod schemas and replace custom types with imported schemas across various files
- Replaced custom Zod types with imported schemas in stripe router and user router. - Updated payment controller to use new enum imports for order types and payment statuses. - Refactored payment tests to utilize the new enum structure. - Removed deprecated zod_types file and created new zod_chat_types file for chat-related schemas. - Adjusted service files to align with the new order type enums and schemas. - Enhanced the Caratteristiche type definition using Zod for better validation. Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
parent
d17ac87917
commit
60e4b187bf
93 changed files with 846 additions and 899 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
const { makeKyselyHook } = require("kanel-kysely");
|
const { makeKyselyHook } = require("kanel-kysely");
|
||||||
const { makePgTsGenerator } = require("kanel");
|
const { makePgTsGenerator } = require("kanel");
|
||||||
const { generateZodSchemas, makeGenerateZodSchemas } = require("kanel-zod");
|
const { generateZodSchemas, makeGenerateZodSchemas, defaultZodTypeMap } = require("kanel-zod");
|
||||||
const ignoredTables = ["schema_migrations"];
|
const ignoredTables = ["schema_migrations"];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -98,7 +98,52 @@ function kanelKyselyZodCompatibilityHook(path, lines) {
|
||||||
return line;
|
return line;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
/**@type {import("kanel").PostRenderHook} */
|
||||||
|
function zodCaratteristicheHook(path, lines) {
|
||||||
|
|
||||||
|
if (path.includes("src\\schemas\\public\\Annunci.ts")) {
|
||||||
|
return lines.map(line => {
|
||||||
|
|
||||||
|
if (line.includes("kanel-types")) {
|
||||||
|
return "import { CaratteristicheSchema, type Caratteristiche } from '../../utils/kanel-types';"
|
||||||
|
}
|
||||||
|
if (line.includes("caratteristiche: z.unknown().optional().nullable()")) {
|
||||||
|
return line.replace("caratteristiche: z.unknown().optional().nullable()", "caratteristiche: CaratteristicheSchema.optional().nullable()")
|
||||||
|
}
|
||||||
|
if (line.includes("caratteristiche: z.unknown().nullable()")) {
|
||||||
|
return line.replace("caratteristiche: z.unknown().nullable()", "caratteristiche: CaratteristicheSchema.nullable()")
|
||||||
|
}
|
||||||
|
|
||||||
|
return line;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return lines
|
||||||
|
}
|
||||||
|
|
||||||
|
/**@type {import("kanel").PostRenderHook} */
|
||||||
|
function zodUpdateInsertionDatesFix(path, lines) {
|
||||||
|
//z.date() -> z.union([z.date(), z.string()]).pipe(z.coerce.date())
|
||||||
|
let insideUpdateOrInsert = false;
|
||||||
|
return lines.map(line => {
|
||||||
|
if (line.includes("export const") && line.includes("UpdateSchema")) {
|
||||||
|
insideUpdateOrInsert = true;
|
||||||
|
}
|
||||||
|
if (line.includes("export const") && line.includes("New")) {
|
||||||
|
insideUpdateOrInsert = true;
|
||||||
|
}
|
||||||
|
if (insideUpdateOrInsert && line.includes("z.date()")) {
|
||||||
|
console.log(`Fixing line in ${path}: ${line}`);
|
||||||
|
return line.replace("z.date()", "z.union([z.date(), z.string()]).pipe(z.coerce.date())");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (line.includes("import")) {
|
||||||
|
insideUpdateOrInsert = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return line;
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
/** @type {import('kanel').Config} */
|
/** @type {import('kanel').Config} */
|
||||||
module.exports = {
|
module.exports = {
|
||||||
connection: {
|
connection: {
|
||||||
|
|
@ -129,17 +174,17 @@ module.exports = {
|
||||||
}),
|
}),
|
||||||
makeKyselyHook(),
|
makeKyselyHook(),
|
||||||
makeGenerateZodSchemas({
|
makeGenerateZodSchemas({
|
||||||
castToSchema: false
|
castToSchema: false,
|
||||||
|
zodTypeMap: {
|
||||||
|
...defaultZodTypeMap,
|
||||||
|
"pg_catalog.numeric": "z.number()",
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
|
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
postRenderHooks: [kanelKyselyZodCompatibilityHook],
|
postRenderHooks: [kanelKyselyZodCompatibilityHook, zodCaratteristicheHook, zodUpdateInsertionDatesFix],
|
||||||
|
|
||||||
preDeleteOutputFolder: true,
|
preDeleteOutputFolder: true,
|
||||||
|
|
||||||
typescriptConfig: {
|
|
||||||
enumStyle: "enum",
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@ import {
|
||||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs";
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs";
|
||||||
import { cn } from "~/lib/utils";
|
import { cn } from "~/lib/utils";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import type TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
export const PricingChoice = () => {
|
export const PricingChoice = () => {
|
||||||
|
|
@ -63,7 +64,7 @@ export const PricingChoice = () => {
|
||||||
t.pricing_cmp.breve_option5,
|
t.pricing_cmp.breve_option5,
|
||||||
]}
|
]}
|
||||||
pricingData={pricingBreve}
|
pricingData={pricingBreve}
|
||||||
tipo={TipologiaPosizioneEnum.Transitorio}
|
tipo={tipologiaPosizioneEnum.enum.Transitorio}
|
||||||
title={t.prezzi.titolo_transitori}
|
title={t.prezzi.titolo_transitori}
|
||||||
/>
|
/>
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
|
|
@ -77,7 +78,7 @@ export const PricingChoice = () => {
|
||||||
t.pricing_cmp.stabile_option3,
|
t.pricing_cmp.stabile_option3,
|
||||||
]}
|
]}
|
||||||
pricingData={pricingStabile}
|
pricingData={pricingStabile}
|
||||||
tipo={TipologiaPosizioneEnum.Stabile}
|
tipo={tipologiaPosizioneEnum.enum.Stabile}
|
||||||
title={t.prezzi.titolo_stabile}
|
title={t.prezzi.titolo_stabile}
|
||||||
/>
|
/>
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
|
|
@ -192,7 +193,7 @@ export const PricingComponent = ({
|
||||||
Contratto
|
Contratto
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
{tipo === TipologiaPosizioneEnum.Transitorio ? (
|
{tipo === tipologiaPosizioneEnum.enum.Transitorio ? (
|
||||||
<div className="flex flex-col justify-center leading-none">
|
<div className="flex flex-col justify-center leading-none">
|
||||||
<span
|
<span
|
||||||
className="font-semibold text-2xl xs:text-3xl sm:text-6xl"
|
className="font-semibold text-2xl xs:text-3xl sm:text-6xl"
|
||||||
|
|
|
||||||
|
|
@ -43,9 +43,10 @@ import { cn } from "~/lib/utils";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider";
|
import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider";
|
||||||
import type { AnnunciId } from "~/schemas/public/Annunci";
|
import type { AnnunciId } from "~/schemas/public/Annunci";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
||||||
import StatusConfermaEnum from "~/schemas/public/StatusConfermaEnum";
|
import type StatusConfermaEnum from "~/schemas/public/StatusConfermaEnum";
|
||||||
|
import { statusConfermaEnum } from "~/schemas/public/StatusConfermaEnum";
|
||||||
import type { ServizioAnnuncioData } from "~/server/controllers/servizio.controller";
|
import type { ServizioAnnuncioData } from "~/server/controllers/servizio.controller";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
import { Confirm } from "../confirm";
|
import { Confirm } from "../confirm";
|
||||||
|
|
@ -220,7 +221,7 @@ export const AnnuncioConfermaPopover = ({
|
||||||
{status_conferma === null ? <CircleCheck /> : <Circle />}
|
{status_conferma === null ? <CircleCheck /> : <Circle />}
|
||||||
Non in conferma
|
Non in conferma
|
||||||
</Button>
|
</Button>
|
||||||
{Object.values(StatusConfermaEnum).map((status) => (
|
{statusConfermaEnum.options.map((status) => (
|
||||||
<Button
|
<Button
|
||||||
className="justify-start rounded-none last:rounded-b-md"
|
className="justify-start rounded-none last:rounded-b-md"
|
||||||
key={status}
|
key={status}
|
||||||
|
|
@ -387,7 +388,7 @@ const PostConfermaSection = () => {
|
||||||
|
|
||||||
{!consulenzaPaid &&
|
{!consulenzaPaid &&
|
||||||
servizio.ordini.some(
|
servizio.ordini.some(
|
||||||
(o) => o.type === OrderTypeEnum.Consulenza && !o.isActive,
|
(o) => o.type === orderTypeEnum.enum.Consulenza && !o.isActive,
|
||||||
) &&
|
) &&
|
||||||
data.contratto_tipo && <SaldoConsulenzaButton />}
|
data.contratto_tipo && <SaldoConsulenzaButton />}
|
||||||
|
|
||||||
|
|
@ -445,7 +446,7 @@ export const SaldoButton = ({
|
||||||
return (
|
return (
|
||||||
<Link
|
<Link
|
||||||
className="w-full sm:w-fit"
|
className="w-full sm:w-fit"
|
||||||
href={`/servizio/pagamento?servizioId=${servizioId}&type=${OrderTypeEnum.Saldo}`}
|
href={`/servizio/pagamento?servizioId=${servizioId}&type=${orderTypeEnum.enum.Saldo}`}
|
||||||
>
|
>
|
||||||
<Button
|
<Button
|
||||||
aria-label={locale === "it" ? "Procedi al saldo" : "Proceed to payment"}
|
aria-label={locale === "it" ? "Procedi al saldo" : "Proceed to payment"}
|
||||||
|
|
@ -472,7 +473,7 @@ const SaldoConsulenzaButton = ({
|
||||||
return (
|
return (
|
||||||
<Link
|
<Link
|
||||||
className="w-full sm:w-fit"
|
className="w-full sm:w-fit"
|
||||||
href={`/servizio/pagamento?servizioId=${servizioId}&type=${OrderTypeEnum.Consulenza}`}
|
href={`/servizio/pagamento?servizioId=${servizioId}&type=${orderTypeEnum.enum.Consulenza}`}
|
||||||
>
|
>
|
||||||
<Button
|
<Button
|
||||||
aria-label={
|
aria-label={
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,8 @@ import { useZodForm } from "~/lib/zodForm";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
import { useServizio } from "~/providers/ServizioProvider";
|
import { useServizio } from "~/providers/ServizioProvider";
|
||||||
import type { Servizio } from "~/schemas/public/Servizio";
|
import type { Servizio } from "~/schemas/public/Servizio";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
|
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import type { UsersId } from "~/schemas/public/Users";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
import { DEFAULT_SERVIZIO_INTERRUZIONE_DURATION_DAYS } from "~/utils/config";
|
import { DEFAULT_SERVIZIO_INTERRUZIONE_DURATION_DAYS } from "~/utils/config";
|
||||||
|
|
@ -71,7 +72,7 @@ const Schema = z
|
||||||
pianoterra: z.boolean(),
|
pianoterra: z.boolean(),
|
||||||
reddito: z.string().nullable(),
|
reddito: z.string().nullable(),
|
||||||
terrazzo: z.boolean(),
|
terrazzo: z.boolean(),
|
||||||
tipologia: z.enum(TipologiaPosizioneEnum),
|
tipologia: tipologiaPosizioneEnum,
|
||||||
scadenza_motivazione_transitoria: z.date().nullable(),
|
scadenza_motivazione_transitoria: z.date().nullable(),
|
||||||
skipPayment: z.boolean(),
|
skipPayment: z.boolean(),
|
||||||
skipControlloDoc: z.boolean(),
|
skipControlloDoc: z.boolean(),
|
||||||
|
|
@ -127,7 +128,7 @@ const FormServizio = ({
|
||||||
pianoterra: false,
|
pianoterra: false,
|
||||||
reddito: "",
|
reddito: "",
|
||||||
terrazzo: false,
|
terrazzo: false,
|
||||||
tipologia: TipologiaPosizioneEnum.Transitorio,
|
tipologia: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
scadenza_motivazione_transitoria: null,
|
scadenza_motivazione_transitoria: null,
|
||||||
skipPayment: false,
|
skipPayment: false,
|
||||||
skipControlloDoc: true,
|
skipControlloDoc: true,
|
||||||
|
|
@ -179,14 +180,14 @@ const FormServizio = ({
|
||||||
) : (
|
) : (
|
||||||
<MultiSelect
|
<MultiSelect
|
||||||
defaultValue={
|
defaultValue={
|
||||||
field.value === TipologiaPosizioneEnum.Transitorio
|
field.value === tipologiaPosizioneEnum.enum.Transitorio
|
||||||
? {
|
? {
|
||||||
label: "Transitorio",
|
label: "Transitorio",
|
||||||
value: TipologiaPosizioneEnum.Transitorio,
|
value: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
label: "Stabile",
|
label: "Stabile",
|
||||||
value: TipologiaPosizioneEnum.Stabile,
|
value: tipologiaPosizioneEnum.enum.Stabile,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elementId="select-tipologia"
|
elementId="select-tipologia"
|
||||||
|
|
@ -200,11 +201,11 @@ const FormServizio = ({
|
||||||
options={[
|
options={[
|
||||||
{
|
{
|
||||||
label: "Transitorio",
|
label: "Transitorio",
|
||||||
value: TipologiaPosizioneEnum.Transitorio,
|
value: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Stabile",
|
label: "Stabile",
|
||||||
value: TipologiaPosizioneEnum.Stabile,
|
value: tipologiaPosizioneEnum.enum.Stabile,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
placeholder={t.seleziona_placeholder}
|
placeholder={t.seleziona_placeholder}
|
||||||
|
|
@ -297,14 +298,14 @@ const FormServizio = ({
|
||||||
/>
|
/>
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
disabled={tipologia !== TipologiaPosizioneEnum.Transitorio}
|
disabled={tipologia !== tipologiaPosizioneEnum.enum.Transitorio}
|
||||||
name="permanenza"
|
name="permanenza"
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem className="w-full">
|
<FormItem className="w-full">
|
||||||
<div className="flex flex-wrap items-center gap-x-2">
|
<div className="flex flex-wrap items-center gap-x-2">
|
||||||
<FormLabel
|
<FormLabel
|
||||||
className={cn(
|
className={cn(
|
||||||
tipologia !== TipologiaPosizioneEnum.Transitorio &&
|
tipologia !== tipologiaPosizioneEnum.enum.Transitorio &&
|
||||||
"opacity-50",
|
"opacity-50",
|
||||||
)}
|
)}
|
||||||
htmlFor="permanenza"
|
htmlFor="permanenza"
|
||||||
|
|
@ -331,7 +332,7 @@ const FormServizio = ({
|
||||||
}
|
}
|
||||||
disabled={
|
disabled={
|
||||||
isLimited ||
|
isLimited ||
|
||||||
tipologia !== TipologiaPosizioneEnum.Transitorio
|
tipologia !== tipologiaPosizioneEnum.enum.Transitorio
|
||||||
}
|
}
|
||||||
elementId="permanenza"
|
elementId="permanenza"
|
||||||
elementName="permanenza"
|
elementName="permanenza"
|
||||||
|
|
@ -348,7 +349,7 @@ const FormServizio = ({
|
||||||
placeholder="Seleziona..."
|
placeholder="Seleziona..."
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
{tipologia === TipologiaPosizioneEnum.Transitorio &&
|
{tipologia === tipologiaPosizioneEnum.enum.Transitorio &&
|
||||||
!isLimited && (
|
!isLimited && (
|
||||||
<FormDescription>
|
<FormDescription>
|
||||||
{t.parametri.permanenza_desc}
|
{t.parametri.permanenza_desc}
|
||||||
|
|
@ -438,7 +439,7 @@ const FormServizio = ({
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{tipologia === TipologiaPosizioneEnum.Transitorio ? (
|
{tipologia === tipologiaPosizioneEnum.enum.Transitorio ? (
|
||||||
<div className="items-top flex w-full flex-col justify-between gap-4 sm:flex-row">
|
<div className="items-top flex w-full flex-col justify-between gap-4 sm:flex-row">
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,14 @@ import {
|
||||||
} from "~/components/ui/dialog";
|
} from "~/components/ui/dialog";
|
||||||
import { FormRinnovo } from "~/forms/FormRinnovo";
|
import { FormRinnovo } from "~/forms/FormRinnovo";
|
||||||
import { useRinnovo } from "~/providers/RinnovoProvider";
|
import { useRinnovo } from "~/providers/RinnovoProvider";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import type { UsersId } from "~/schemas/public/Users";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
export const Rinnovo = () => {
|
export const Rinnovo = () => {
|
||||||
const { rinnovo, isAdmin } = useRinnovo();
|
const { rinnovo, isAdmin } = useRinnovo();
|
||||||
const hasPaid = rinnovo.ordini
|
const hasPaid = rinnovo.ordini
|
||||||
.filter((o) => o.type === OrderTypeEnum.Rinnovo)
|
.filter((o) => o.type === orderTypeEnum.enum.Rinnovo)
|
||||||
.find((o) => o.isActive);
|
.find((o) => o.isActive);
|
||||||
return (
|
return (
|
||||||
<div className="w-full space-y-8">
|
<div className="w-full space-y-8">
|
||||||
|
|
@ -78,7 +78,7 @@ export const Rinnovo = () => {
|
||||||
<Link
|
<Link
|
||||||
aria-label="Attiva Servizio"
|
aria-label="Attiva Servizio"
|
||||||
className="w-full"
|
className="w-full"
|
||||||
href={`/servizio/pagamento?rinnovoId=${rinnovo.id}&type=${OrderTypeEnum.Rinnovo}`}
|
href={`/servizio/pagamento?rinnovoId=${rinnovo.id}&type=${orderTypeEnum.enum.Rinnovo}`}
|
||||||
>
|
>
|
||||||
<Button className="w-full text-lg" variant="info">
|
<Button className="w-full text-lg" variant="info">
|
||||||
<span>Procedi al pagamento</span>
|
<span>Procedi al pagamento</span>
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ import {
|
||||||
ServizioProvider,
|
ServizioProvider,
|
||||||
useServizio,
|
useServizio,
|
||||||
} from "~/providers/ServizioProvider";
|
} from "~/providers/ServizioProvider";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type { Rinnovi } from "~/schemas/public/Rinnovi";
|
import type { Rinnovi } from "~/schemas/public/Rinnovi";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import type { UsersId } from "~/schemas/public/Users";
|
||||||
import type { ServizioData } from "~/server/controllers/servizio.controller";
|
import type { ServizioData } from "~/server/controllers/servizio.controller";
|
||||||
|
|
@ -460,7 +460,7 @@ const Main = () => {
|
||||||
// se non ok acconto, mostra invito a completare pagamento acconto o ad attivare se acconto già inserito
|
// se non ok acconto, mostra invito a completare pagamento acconto o ad attivare se acconto già inserito
|
||||||
if (!servizio.isOkAcconto || servizio.decorrenza === null) {
|
if (!servizio.isOkAcconto || servizio.decorrenza === null) {
|
||||||
const acconti = servizio.ordini.filter(
|
const acconti = servizio.ordini.filter(
|
||||||
(o) => o.type === OrderTypeEnum.Acconto,
|
(o) => o.type === orderTypeEnum.enum.Acconto,
|
||||||
);
|
);
|
||||||
|
|
||||||
const activeAcconto = acconti.find((a) => a.isActive);
|
const activeAcconto = acconti.find((a) => a.isActive);
|
||||||
|
|
@ -535,7 +535,7 @@ const Main = () => {
|
||||||
<Link
|
<Link
|
||||||
aria-label="Attiva Servizio"
|
aria-label="Attiva Servizio"
|
||||||
className="w-full"
|
className="w-full"
|
||||||
href={`/servizio/pagamento?servizioId=${servizio.servizio_id}&type=${OrderTypeEnum.Acconto}`}
|
href={`/servizio/pagamento?servizioId=${servizio.servizio_id}&type=${orderTypeEnum.enum.Acconto}`}
|
||||||
>
|
>
|
||||||
<Button className="w-full text-lg" variant="info">
|
<Button className="w-full text-lg" variant="info">
|
||||||
<span>Procedi al pagamento</span>
|
<span>Procedi al pagamento</span>
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ import { useServizio } from "~/providers/ServizioProvider";
|
||||||
import type { AnnunciId } from "~/schemas/public/Annunci";
|
import type { AnnunciId } from "~/schemas/public/Annunci";
|
||||||
import type { Ordini } from "~/schemas/public/Ordini";
|
import type { Ordini } from "~/schemas/public/Ordini";
|
||||||
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import type { UsersId } from "~/schemas/public/Users";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
import { Confirm } from "../confirm";
|
import { Confirm } from "../confirm";
|
||||||
|
|
@ -121,9 +121,9 @@ const ServizioPrezzo = () => {
|
||||||
<Button
|
<Button
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex-1 text-white hover:text-white dark:text-white dark:hover:text-white",
|
"flex-1 text-white hover:text-white dark:text-white dark:hover:text-white",
|
||||||
servizio.tipologia === TipologiaPosizioneEnum.Transitorio &&
|
servizio.tipologia === tipologiaPosizioneEnum.enum.Transitorio &&
|
||||||
"border-transitorio bg-transitorio hover:border-transitorio/90 hover:bg-transitorio/90 dark:border-transitorio dark:bg-transitorio dark:hover:border-transitorio/90 dark:hover:bg-transitorio/90",
|
"border-transitorio bg-transitorio hover:border-transitorio/90 hover:bg-transitorio/90 dark:border-transitorio dark:bg-transitorio dark:hover:border-transitorio/90 dark:hover:bg-transitorio/90",
|
||||||
servizio.tipologia === TipologiaPosizioneEnum.Stabile &&
|
servizio.tipologia === tipologiaPosizioneEnum.enum.Stabile &&
|
||||||
"border-stabile bg-stabile hover:border-stabile/90 hover:bg-stabile/90 dark:border-stabile dark:bg-stabile dark:hover:border-stabile/90 dark:hover:bg-stabile/90",
|
"border-stabile bg-stabile hover:border-stabile/90 hover:bg-stabile/90 dark:border-stabile dark:bg-stabile dark:hover:border-stabile/90 dark:hover:bg-stabile/90",
|
||||||
)}
|
)}
|
||||||
variant="outline"
|
variant="outline"
|
||||||
|
|
@ -185,7 +185,7 @@ const ServizioPrezzo = () => {
|
||||||
<span className="font-medium">{packs.saldo.message}</span>
|
<span className="font-medium">{packs.saldo.message}</span>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{servizio.tipologia === TipologiaPosizioneEnum.Stabile && (
|
{servizio.tipologia === tipologiaPosizioneEnum.enum.Stabile && (
|
||||||
<div className="flex flex-1 flex-col gap-2 rounded-md bg-secondary/50 p-2">
|
<div className="flex flex-1 flex-col gap-2 rounded-md bg-secondary/50 p-2">
|
||||||
<>
|
<>
|
||||||
<span className="font-medium">
|
<span className="font-medium">
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,10 @@ import type {
|
||||||
SearchFiltro,
|
SearchFiltro,
|
||||||
} from "~/components/ui/dataTable-toolbar";
|
} from "~/components/ui/dataTable-toolbar";
|
||||||
import { formatCurrency } from "~/lib/utils";
|
import { formatCurrency } from "~/lib/utils";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type { OrdiniOrdineId } from "~/schemas/public/Ordini";
|
import type { OrdiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
import PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum";
|
import type PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum";
|
||||||
|
import { paymentStatusEnum } from "~/schemas/public/PaymentStatusEnum";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import type { UsersId } from "~/schemas/public/Users";
|
||||||
import type { Ordini_w_Utente } from "~/server/services/ordini.service";
|
import type { Ordini_w_Utente } from "~/server/services/ordini.service";
|
||||||
|
|
||||||
|
|
@ -29,11 +30,11 @@ type PaymentsTableProps = {
|
||||||
|
|
||||||
const StatusMapping = (status: PaymentStatusEnum | null) => {
|
const StatusMapping = (status: PaymentStatusEnum | null) => {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case PaymentStatusEnum.success:
|
case paymentStatusEnum.enum.success:
|
||||||
return "Successo";
|
return "Successo";
|
||||||
case PaymentStatusEnum.processing:
|
case paymentStatusEnum.enum.processing:
|
||||||
return "In lavorazione";
|
return "In lavorazione";
|
||||||
case PaymentStatusEnum.failed:
|
case paymentStatusEnum.enum.failed:
|
||||||
return "Errore";
|
return "Errore";
|
||||||
default:
|
default:
|
||||||
return "Non completato";
|
return "Non completato";
|
||||||
|
|
@ -78,10 +79,10 @@ export const OrdiniTable = ({
|
||||||
];
|
];
|
||||||
|
|
||||||
const type_options = [
|
const type_options = [
|
||||||
{ label: "Acconto", value: OrderTypeEnum.Acconto },
|
{ label: "Acconto", value: orderTypeEnum.enum.Acconto },
|
||||||
{ label: "Saldo", value: OrderTypeEnum.Saldo },
|
{ label: "Saldo", value: orderTypeEnum.enum.Saldo },
|
||||||
{ label: "Consulenza", value: OrderTypeEnum.Consulenza },
|
{ label: "Consulenza", value: orderTypeEnum.enum.Consulenza },
|
||||||
{ label: "Altro", value: OrderTypeEnum.Altro },
|
{ label: "Altro", value: orderTypeEnum.enum.Altro },
|
||||||
];
|
];
|
||||||
|
|
||||||
const [selectedOrdine, setSelectedOrdine] = useState<OrdiniOrdineId | null>(
|
const [selectedOrdine, setSelectedOrdine] = useState<OrdiniOrdineId | null>(
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@ import type {
|
||||||
SearchFiltro,
|
SearchFiltro,
|
||||||
} from "~/components/ui/dataTable-toolbar";
|
} from "~/components/ui/dataTable-toolbar";
|
||||||
import { cn, formatCurrency } from "~/lib/utils";
|
import { cn, formatCurrency } from "~/lib/utils";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type { Prezziario } from "~/schemas/public/Prezziario";
|
import type { Prezziario } from "~/schemas/public/Prezziario";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
|
|
||||||
export const PrezzarioTable = ({
|
export const PrezzarioTable = ({
|
||||||
data,
|
data,
|
||||||
|
|
@ -24,12 +24,12 @@ export const PrezzarioTable = ({
|
||||||
}) => {
|
}) => {
|
||||||
const tabledata = data;
|
const tabledata = data;
|
||||||
|
|
||||||
const tipologia_options = Object.values(OrderTypeEnum).map((value) => ({
|
const tipologia_options = orderTypeEnum.options.map((value) => ({
|
||||||
label: value,
|
label: value,
|
||||||
value: value,
|
value: value,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const cat_options = Object.values(TipologiaPosizioneEnum).map((value) => ({
|
const cat_options = tipologiaPosizioneEnum.options.map((value) => ({
|
||||||
label: value,
|
label: value,
|
||||||
value: value,
|
value: value,
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -58,9 +58,9 @@ import {
|
||||||
import { UserAvatar } from "~/components/user_avatar";
|
import { UserAvatar } from "~/components/user_avatar";
|
||||||
import { MutationPageRestore } from "~/lib/tableUtils";
|
import { MutationPageRestore } from "~/lib/tableUtils";
|
||||||
import { cn } from "~/lib/utils";
|
import { cn } from "~/lib/utils";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import StatusConfermaEnum from "~/schemas/public/StatusConfermaEnum";
|
import { statusConfermaEnum } from "~/schemas/public/StatusConfermaEnum";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import type { RichiesteData } from "~/server/controllers/servizio.controller";
|
import type { RichiesteData } from "~/server/controllers/servizio.controller";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
import { DEFAULT_SERVIZIO_DURATION_DAYS } from "~/utils/config";
|
import { DEFAULT_SERVIZIO_DURATION_DAYS } from "~/utils/config";
|
||||||
|
|
@ -91,8 +91,8 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => {
|
||||||
];
|
];
|
||||||
|
|
||||||
const type_options = [
|
const type_options = [
|
||||||
{ label: "Transitorio", value: TipologiaPosizioneEnum.Transitorio },
|
{ label: "Transitorio", value: tipologiaPosizioneEnum.enum.Transitorio },
|
||||||
{ label: "Stabile", value: TipologiaPosizioneEnum.Stabile },
|
{ label: "Stabile", value: tipologiaPosizioneEnum.enum.Stabile },
|
||||||
];
|
];
|
||||||
|
|
||||||
type Column = (typeof tabledata)[number];
|
type Column = (typeof tabledata)[number];
|
||||||
|
|
@ -282,7 +282,7 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => {
|
||||||
<Badge
|
<Badge
|
||||||
className={cn(
|
className={cn(
|
||||||
"px-1.5",
|
"px-1.5",
|
||||||
tipologia === TipologiaPosizioneEnum.Transitorio
|
tipologia === tipologiaPosizioneEnum.enum.Transitorio
|
||||||
? "border-transitorio bg-transitorio/15"
|
? "border-transitorio bg-transitorio/15"
|
||||||
: "border-stabile bg-stabile/15",
|
: "border-stabile bg-stabile/15",
|
||||||
)}
|
)}
|
||||||
|
|
@ -333,7 +333,7 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => {
|
||||||
}
|
}
|
||||||
if (!row.original.isOkAcconto || !row.original.decorrenza) {
|
if (!row.original.isOkAcconto || !row.original.decorrenza) {
|
||||||
const acconti = row.original.ordini_servizio.filter(
|
const acconti = row.original.ordini_servizio.filter(
|
||||||
(o) => o.type === OrderTypeEnum.Acconto,
|
(o) => o.type === orderTypeEnum.enum.Acconto,
|
||||||
);
|
);
|
||||||
|
|
||||||
const activeAcconto = acconti.find((a) => a.isActive);
|
const activeAcconto = acconti.find((a) => a.isActive);
|
||||||
|
|
@ -395,7 +395,8 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => {
|
||||||
if (
|
if (
|
||||||
//hasConsulanzaDaPagare
|
//hasConsulanzaDaPagare
|
||||||
row.original.ordini_servizio.some(
|
row.original.ordini_servizio.some(
|
||||||
(o) => o.type === OrderTypeEnum.Consulenza && !o.isActive,
|
(o) =>
|
||||||
|
o.type === orderTypeEnum.enum.Consulenza && !o.isActive,
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
badgeClass =
|
badgeClass =
|
||||||
|
|
@ -420,7 +421,8 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const annuncioCaparraVersata = row.original.annunci_servizio.filter(
|
const annuncioCaparraVersata = row.original.annunci_servizio.filter(
|
||||||
(a) => a.status_conferma === StatusConfermaEnum["Caparra versata"],
|
(a) =>
|
||||||
|
a.status_conferma === statusConfermaEnum.enum["Caparra versata"],
|
||||||
);
|
);
|
||||||
if (annuncioCaparraVersata.length > 0) {
|
if (annuncioCaparraVersata.length > 0) {
|
||||||
if (row.original.isOkSaldo) {
|
if (row.original.isOkSaldo) {
|
||||||
|
|
@ -445,7 +447,8 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => {
|
||||||
}
|
}
|
||||||
const annuncioConfermato = row.original.annunci_servizio.filter(
|
const annuncioConfermato = row.original.annunci_servizio.filter(
|
||||||
(a) =>
|
(a) =>
|
||||||
a.status_conferma === StatusConfermaEnum["Conferma accettata"],
|
a.status_conferma ===
|
||||||
|
statusConfermaEnum.enum["Conferma accettata"],
|
||||||
);
|
);
|
||||||
if (annuncioConfermato.length > 0) {
|
if (annuncioConfermato.length > 0) {
|
||||||
badgeClass = "border-yellow-500 bg-yellow-500/10 text-yellow-600";
|
badgeClass = "border-yellow-500 bg-yellow-500/10 text-yellow-600";
|
||||||
|
|
@ -460,7 +463,8 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const annuncioAttesaConferma = row.original.annunci_servizio.filter(
|
const annuncioAttesaConferma = row.original.annunci_servizio.filter(
|
||||||
(a) => a.status_conferma === StatusConfermaEnum["Inviato conferma"],
|
(a) =>
|
||||||
|
a.status_conferma === statusConfermaEnum.enum["Inviato conferma"],
|
||||||
);
|
);
|
||||||
if (annuncioAttesaConferma.length > 0) {
|
if (annuncioAttesaConferma.length > 0) {
|
||||||
badgeClass = "border-blue-500 bg-blue-500/10 text-blue-500";
|
badgeClass = "border-blue-500 bg-blue-500/10 text-blue-500";
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,12 @@ import {
|
||||||
SelectValue,
|
SelectValue,
|
||||||
} from "~/components/ui/select";
|
} from "~/components/ui/select";
|
||||||
import { useZodForm } from "~/lib/zodForm";
|
import { useZodForm } from "~/lib/zodForm";
|
||||||
import type { Banlist, BanlistId } from "~/schemas/public/Banlist";
|
import {
|
||||||
import BanType from "~/schemas/public/BanType";
|
type Banlist,
|
||||||
import { zBanlistId, zBanType } from "~/server/utils/zod_types";
|
type BanlistId,
|
||||||
|
banlistId,
|
||||||
|
} from "~/schemas/public/Banlist";
|
||||||
|
import { banType } from "~/schemas/public/BanType";
|
||||||
|
|
||||||
type FormProps = {
|
type FormProps = {
|
||||||
initialValues: Banlist | null;
|
initialValues: Banlist | null;
|
||||||
|
|
@ -33,8 +36,8 @@ export const FormBanlist = ({
|
||||||
del,
|
del,
|
||||||
}: FormProps) => {
|
}: FormProps) => {
|
||||||
const Schema = z.object({
|
const Schema = z.object({
|
||||||
id: zBanlistId,
|
id: banlistId,
|
||||||
type: zBanType,
|
type: banType,
|
||||||
value: z.string(),
|
value: z.string(),
|
||||||
});
|
});
|
||||||
type FormValues = z.infer<typeof Schema>;
|
type FormValues = z.infer<typeof Schema>;
|
||||||
|
|
@ -44,7 +47,7 @@ export const FormBanlist = ({
|
||||||
if (!initialValues) {
|
if (!initialValues) {
|
||||||
defaultValues = {
|
defaultValues = {
|
||||||
id: 0 as BanlistId,
|
id: 0 as BanlistId,
|
||||||
type: BanType.email,
|
type: banType.enum.email,
|
||||||
value: "",
|
value: "",
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -93,7 +96,7 @@ export const FormBanlist = ({
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<SelectContent id="select-color">
|
<SelectContent id="select-color">
|
||||||
{Object.values(BanType).map((option) => (
|
{banType.options.map((option) => (
|
||||||
<SelectItem key={option} value={option}>
|
<SelectItem key={option} value={option}>
|
||||||
{option}
|
{option}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|
|
||||||
|
|
@ -59,8 +59,8 @@ import { cn } from "~/lib/utils";
|
||||||
import { useZodForm } from "~/lib/zodForm";
|
import { useZodForm } from "~/lib/zodForm";
|
||||||
import { StatusBadge } from "~/pages/area-riservata/admin/edit-annuncio/[id]";
|
import { StatusBadge } from "~/pages/area-riservata/admin/edit-annuncio/[id]";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
|
import { annunciId } from "~/schemas/public/Annunci";
|
||||||
import type { AnnunciWithMedia } from "~/server/controllers/annunci.controller";
|
import type { AnnunciWithMedia } from "~/server/controllers/annunci.controller";
|
||||||
import { zAnnuncioId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
import type { Caratteristiche } from "~/utils/kanel-types";
|
import type { Caratteristiche } from "~/utils/kanel-types";
|
||||||
|
|
||||||
|
|
@ -85,7 +85,7 @@ export const AnnuncioEditForm = ({ data }: { data: AnnunciWithMedia }) => {
|
||||||
email: z.email().nullable(),
|
email: z.email().nullable(),
|
||||||
homepage: z.boolean().nullable(),
|
homepage: z.boolean().nullable(),
|
||||||
//BASE
|
//BASE
|
||||||
id: zAnnuncioId,
|
id: annunciId,
|
||||||
|
|
||||||
// DATI IMMOBILE
|
// DATI IMMOBILE
|
||||||
indirizzo: z.string().nullable(),
|
indirizzo: z.string().nullable(),
|
||||||
|
|
|
||||||
|
|
@ -37,11 +37,13 @@ import { Switch } from "~/components/ui/switch";
|
||||||
import { PAYMENT_TYPES, type PaymentType } from "~/i18n/stripe";
|
import { PAYMENT_TYPES, type PaymentType } from "~/i18n/stripe";
|
||||||
import { cn, formatCurrency } from "~/lib/utils";
|
import { cn, formatCurrency } from "~/lib/utils";
|
||||||
import { useZodForm } from "~/lib/zodForm";
|
import { useZodForm } from "~/lib/zodForm";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type { Ordini } from "~/schemas/public/Ordini";
|
import type { Ordini } from "~/schemas/public/Ordini";
|
||||||
import PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum";
|
import { paymentStatusEnum } from "~/schemas/public/PaymentStatusEnum";
|
||||||
import type { Prezziario } from "~/schemas/public/Prezziario";
|
import {
|
||||||
import { zPrezziarioId } from "~/server/utils/zod_types";
|
type Prezziario,
|
||||||
|
prezziarioIdprezziario,
|
||||||
|
} from "~/schemas/public/Prezziario";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type FormProps = {
|
type FormProps = {
|
||||||
|
|
@ -52,15 +54,15 @@ type FormProps = {
|
||||||
|
|
||||||
export const FormEditOrder = ({ prezziario, data, close }: FormProps) => {
|
export const FormEditOrder = ({ prezziario, data, close }: FormProps) => {
|
||||||
const schema = z.object({
|
const schema = z.object({
|
||||||
packid: zPrezziarioId,
|
packid: prezziarioIdprezziario,
|
||||||
isActive: z.boolean(),
|
isActive: z.boolean(),
|
||||||
type: z.enum(OrderTypeEnum),
|
type: orderTypeEnum,
|
||||||
created_at: z.date(),
|
created_at: z.date(),
|
||||||
amount_cent: z.number(),
|
amount_cent: z.number(),
|
||||||
sconto: z.number().min(0).max(100),
|
sconto: z.number().min(0).max(100),
|
||||||
paid_at: z.date().nullable(),
|
paid_at: z.date().nullable(),
|
||||||
paymentmethod: z.enum(PAYMENT_TYPES).nullable(),
|
paymentmethod: z.enum(PAYMENT_TYPES).nullable(),
|
||||||
paymentstatus: z.enum(PaymentStatusEnum).nullable(),
|
paymentstatus: paymentStatusEnum.nullable(),
|
||||||
});
|
});
|
||||||
type FormValues = z.infer<typeof schema>;
|
type FormValues = z.infer<typeof schema>;
|
||||||
|
|
||||||
|
|
@ -137,7 +139,7 @@ export const FormEditOrder = ({ prezziario, data, close }: FormProps) => {
|
||||||
elementName="packid"
|
elementName="packid"
|
||||||
isMulti={false}
|
isMulti={false}
|
||||||
onValueChange={(value) => {
|
onValueChange={(value) => {
|
||||||
const selected = zPrezziarioId.safeParse(
|
const selected = prezziarioIdprezziario.safeParse(
|
||||||
value.value,
|
value.value,
|
||||||
);
|
);
|
||||||
if (selected.success) {
|
if (selected.success) {
|
||||||
|
|
@ -191,7 +193,7 @@ export const FormEditOrder = ({ prezziario, data, close }: FormProps) => {
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
{Object.values(OrderTypeEnum).map((option) => (
|
{orderTypeEnum.options.map((option) => (
|
||||||
<SelectItem key={option} value={option}>
|
<SelectItem key={option} value={option}>
|
||||||
{option}
|
{option}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|
@ -301,7 +303,7 @@ export const FormEditOrder = ({ prezziario, data, close }: FormProps) => {
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
{Object.values(PaymentStatusEnum).map((option) => (
|
{paymentStatusEnum.options.map((option) => (
|
||||||
<SelectItem key={option} value={option}>
|
<SelectItem key={option} value={option}>
|
||||||
{option}
|
{option}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,11 @@ import {
|
||||||
import { Button } from "~/components/ui/button";
|
import { Button } from "~/components/ui/button";
|
||||||
import Input from "~/components/ui/input";
|
import Input from "~/components/ui/input";
|
||||||
import { useZodForm } from "~/lib/zodForm";
|
import { useZodForm } from "~/lib/zodForm";
|
||||||
import type {
|
import {
|
||||||
Etichette,
|
type Etichette,
|
||||||
EtichetteIdEtichetta,
|
type EtichetteIdEtichetta,
|
||||||
|
etichetteIdEtichetta,
|
||||||
} from "~/schemas/public/Etichette";
|
} from "~/schemas/public/Etichette";
|
||||||
import { zEtichettaId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
type FormProps = {
|
type FormProps = {
|
||||||
initialValues: Etichette | null;
|
initialValues: Etichette | null;
|
||||||
|
|
@ -30,7 +30,7 @@ export const FormEtichette = ({
|
||||||
}: FormProps) => {
|
}: FormProps) => {
|
||||||
const Schema = z.object({
|
const Schema = z.object({
|
||||||
color_hex: z.string().max(7),
|
color_hex: z.string().max(7),
|
||||||
id_etichetta: zEtichettaId,
|
id_etichetta: etichetteIdEtichetta,
|
||||||
title: z.string(),
|
title: z.string(),
|
||||||
});
|
});
|
||||||
type FormValues = z.infer<typeof Schema>;
|
type FormValues = z.infer<typeof Schema>;
|
||||||
|
|
|
||||||
|
|
@ -36,12 +36,14 @@ import { Switch } from "~/components/ui/switch";
|
||||||
import { PAYMENT_TYPES } from "~/i18n/stripe";
|
import { PAYMENT_TYPES } from "~/i18n/stripe";
|
||||||
import { cn, formatCurrency } from "~/lib/utils";
|
import { cn, formatCurrency } from "~/lib/utils";
|
||||||
import { useZodForm } from "~/lib/zodForm";
|
import { useZodForm } from "~/lib/zodForm";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum";
|
import { paymentStatusEnum } from "~/schemas/public/PaymentStatusEnum";
|
||||||
import type { Prezziario } from "~/schemas/public/Prezziario";
|
import {
|
||||||
|
type Prezziario,
|
||||||
|
prezziarioIdprezziario,
|
||||||
|
} from "~/schemas/public/Prezziario";
|
||||||
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import type { UsersId } from "~/schemas/public/Users";
|
||||||
import { zPrezziarioId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type FormProps = {
|
type FormProps = {
|
||||||
|
|
@ -58,14 +60,14 @@ export const FormNewOrder = ({
|
||||||
setOpen,
|
setOpen,
|
||||||
}: FormProps) => {
|
}: FormProps) => {
|
||||||
const schema = z.object({
|
const schema = z.object({
|
||||||
packid: zPrezziarioId,
|
packid: prezziarioIdprezziario,
|
||||||
isActive: z.boolean(),
|
isActive: z.boolean(),
|
||||||
type: z.enum(OrderTypeEnum),
|
type: orderTypeEnum,
|
||||||
created_at: z.date(),
|
created_at: z.date(),
|
||||||
amount_cent: z.number(),
|
amount_cent: z.number(),
|
||||||
sconto: z.number().min(0).max(100),
|
sconto: z.number().min(0).max(100),
|
||||||
paymentmethod: z.enum(PAYMENT_TYPES).nullable(),
|
paymentmethod: z.enum(PAYMENT_TYPES).nullable(),
|
||||||
paymentstatus: z.enum(PaymentStatusEnum).nullable(),
|
paymentstatus: paymentStatusEnum.nullable(),
|
||||||
});
|
});
|
||||||
type FormValues = z.infer<typeof schema>;
|
type FormValues = z.infer<typeof schema>;
|
||||||
|
|
||||||
|
|
@ -123,7 +125,9 @@ export const FormNewOrder = ({
|
||||||
elementName="packid"
|
elementName="packid"
|
||||||
isMulti={false}
|
isMulti={false}
|
||||||
onValueChange={(value) => {
|
onValueChange={(value) => {
|
||||||
const selected = zPrezziarioId.safeParse(value.value);
|
const selected = prezziarioIdprezziario.safeParse(
|
||||||
|
value.value,
|
||||||
|
);
|
||||||
if (selected.success) {
|
if (selected.success) {
|
||||||
field.onChange(selected.data);
|
field.onChange(selected.data);
|
||||||
const selectedPrezzo = prezziario.find(
|
const selectedPrezzo = prezziario.find(
|
||||||
|
|
@ -173,7 +177,7 @@ export const FormNewOrder = ({
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<SelectContent id="select-color">
|
<SelectContent id="select-color">
|
||||||
{Object.values(OrderTypeEnum).map((option) => (
|
{orderTypeEnum.options.map((option) => (
|
||||||
<SelectItem key={option} value={option}>
|
<SelectItem key={option} value={option}>
|
||||||
{option}
|
{option}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|
@ -275,7 +279,7 @@ export const FormNewOrder = ({
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<SelectContent id="select-paymentstatus">
|
<SelectContent id="select-paymentstatus">
|
||||||
{Object.values(PaymentStatusEnum).map((option) => (
|
{paymentStatusEnum.options.map((option) => (
|
||||||
<SelectItem key={option} value={option}>
|
<SelectItem key={option} value={option}>
|
||||||
{option}
|
{option}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|
|
||||||
|
|
@ -22,12 +22,12 @@ import { Switch } from "~/components/ui/switch";
|
||||||
import { Textarea } from "~/components/ui/textarea";
|
import { Textarea } from "~/components/ui/textarea";
|
||||||
import { FieldResetButton } from "~/forms/comps";
|
import { FieldResetButton } from "~/forms/comps";
|
||||||
import { useZodForm } from "~/lib/zodForm";
|
import { useZodForm } from "~/lib/zodForm";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type {
|
import type {
|
||||||
Prezziario,
|
Prezziario,
|
||||||
PrezziarioIdprezziario,
|
PrezziarioIdprezziario,
|
||||||
} from "~/schemas/public/Prezziario";
|
} from "~/schemas/public/Prezziario";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type FormPrezzoProps = {
|
type FormPrezzoProps = {
|
||||||
|
|
@ -56,8 +56,8 @@ export const FormPrezzo = ({
|
||||||
prezzo_cent: z.number().min(0),
|
prezzo_cent: z.number().min(0),
|
||||||
sconto: z.number().min(0).max(100),
|
sconto: z.number().min(0).max(100),
|
||||||
testo_condizioni: z.string().nullable(),
|
testo_condizioni: z.string().nullable(),
|
||||||
order_type: z.enum(OrderTypeEnum).nullable(),
|
order_type: orderTypeEnum.nullable(),
|
||||||
service_type: z.enum(TipologiaPosizioneEnum).nullable(),
|
service_type: tipologiaPosizioneEnum.nullable(),
|
||||||
service_variant: z.number().nullable(),
|
service_variant: z.number().nullable(),
|
||||||
})
|
})
|
||||||
.superRefine(({ testo_condizioni }, ctx) => {
|
.superRefine(({ testo_condizioni }, ctx) => {
|
||||||
|
|
@ -297,7 +297,7 @@ export const FormPrezzo = ({
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<SelectContent id="select-order_type">
|
<SelectContent id="select-order_type">
|
||||||
{Object.values(OrderTypeEnum).map((option) => (
|
{orderTypeEnum.options.map((option) => (
|
||||||
<SelectItem key={option} value={option}>
|
<SelectItem key={option} value={option}>
|
||||||
{option}
|
{option}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|
@ -336,13 +336,11 @@ export const FormPrezzo = ({
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<SelectContent id="select-service_type">
|
<SelectContent id="select-service_type">
|
||||||
{Object.values(TipologiaPosizioneEnum).map(
|
{tipologiaPosizioneEnum.options.map((option) => (
|
||||||
(option) => (
|
|
||||||
<SelectItem key={option} value={option}>
|
<SelectItem key={option} value={option}>
|
||||||
{option}
|
{option}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
),
|
))}
|
||||||
)}
|
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
|
|
|
||||||
|
|
@ -59,13 +59,10 @@ import { cn } from "~/lib/utils";
|
||||||
import { useZodForm } from "~/lib/zodForm";
|
import { useZodForm } from "~/lib/zodForm";
|
||||||
import { useCatasto } from "~/providers/CatastoProvider";
|
import { useCatasto } from "~/providers/CatastoProvider";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
import type { Servizio, ServizioUpdate } from "~/schemas/public/Servizio";
|
import type { Servizio } from "~/schemas/public/Servizio";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import type { Users, UsersId } from "~/schemas/public/Users";
|
import type { Users, UsersId } from "~/schemas/public/Users";
|
||||||
import type {
|
import type { UsersAnagrafica } from "~/schemas/public/UsersAnagrafica";
|
||||||
UsersAnagrafica,
|
|
||||||
UsersAnagraficaUpdate,
|
|
||||||
} from "~/schemas/public/UsersAnagrafica";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type InitialData = {
|
type InitialData = {
|
||||||
|
|
@ -105,7 +102,7 @@ const schema = z.object({
|
||||||
sesso: z.string(),
|
sesso: z.string(),
|
||||||
telefono: z.string(),
|
telefono: z.string(),
|
||||||
terrazzo: z.boolean(),
|
terrazzo: z.boolean(),
|
||||||
tipologia: z.custom<TipologiaPosizioneEnum>(),
|
tipologia: tipologiaPosizioneEnum,
|
||||||
scadenza_motivazione_transitoria: z.date().nullable(),
|
scadenza_motivazione_transitoria: z.date().nullable(),
|
||||||
skipPayment: z.boolean(),
|
skipPayment: z.boolean(),
|
||||||
});
|
});
|
||||||
|
|
@ -228,7 +225,7 @@ export const FormServizioAcquisto = ({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tipologia === TipologiaPosizioneEnum.Transitorio) {
|
if (tipologia === tipologiaPosizioneEnum.enum.Transitorio) {
|
||||||
if (
|
if (
|
||||||
motivazione_transitorio === "" ||
|
motivazione_transitorio === "" ||
|
||||||
motivazione_transitorio === null
|
motivazione_transitorio === null
|
||||||
|
|
@ -324,7 +321,8 @@ export const FormServizioAcquisto = ({
|
||||||
});
|
});
|
||||||
|
|
||||||
function onSubmit(fields: FormServizioAcquistoValues) {
|
function onSubmit(fields: FormServizioAcquistoValues) {
|
||||||
const a: UsersAnagraficaUpdate = {
|
mutate({
|
||||||
|
anagrafica: {
|
||||||
cap_residenza: fields.cap_recapiti,
|
cap_residenza: fields.cap_recapiti,
|
||||||
civico_residenza: fields.civico_recapiti,
|
civico_residenza: fields.civico_recapiti,
|
||||||
codice_fiscale: fields.codice_fiscale,
|
codice_fiscale: fields.codice_fiscale,
|
||||||
|
|
@ -338,8 +336,8 @@ export const FormServizioAcquisto = ({
|
||||||
sesso: fields.sesso,
|
sesso: fields.sesso,
|
||||||
userid: userId,
|
userid: userId,
|
||||||
via_residenza: fields.indirizzo_recapiti,
|
via_residenza: fields.indirizzo_recapiti,
|
||||||
};
|
},
|
||||||
const s: ServizioUpdate = {
|
servizio: {
|
||||||
animali: fields.animali,
|
animali: fields.animali,
|
||||||
arredato: fields.arredato,
|
arredato: fields.arredato,
|
||||||
ascensore: fields.ascensore,
|
ascensore: fields.ascensore,
|
||||||
|
|
@ -357,23 +355,17 @@ export const FormServizioAcquisto = ({
|
||||||
terrazzo: fields.terrazzo,
|
terrazzo: fields.terrazzo,
|
||||||
tipologia: fields.tipologia,
|
tipologia: fields.tipologia,
|
||||||
skipPayment: fields.skipPayment,
|
skipPayment: fields.skipPayment,
|
||||||
scadenza_motivazione_transitoria: fields.scadenza_motivazione_transitoria,
|
scadenza_motivazione_transitoria:
|
||||||
};
|
fields.scadenza_motivazione_transitoria,
|
||||||
const u: Pick<
|
},
|
||||||
Users,
|
servizioId: initialData.servizio.servizio_id,
|
||||||
"nome" | "cognome" | "email" | "telefono" | "username"
|
user: {
|
||||||
> = {
|
|
||||||
cognome: fields.cognome,
|
cognome: fields.cognome,
|
||||||
email: fields.email,
|
email: fields.email,
|
||||||
nome: fields.nome,
|
nome: fields.nome,
|
||||||
telefono: fields.telefono.replace(/\s/g, ""),
|
telefono: fields.telefono.replace(/\s/g, ""),
|
||||||
username: `${fields.cognome.trim()} ${fields.nome.trim()}`,
|
username: `${fields.cognome.trim()} ${fields.nome.trim()}`,
|
||||||
};
|
},
|
||||||
mutate({
|
|
||||||
anagrafica: a,
|
|
||||||
servizio: s,
|
|
||||||
servizioId: initialData.servizio.servizio_id,
|
|
||||||
user: u,
|
|
||||||
userId,
|
userId,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -445,14 +437,14 @@ export const FormServizioAcquisto = ({
|
||||||
) : (
|
) : (
|
||||||
<MultiSelect
|
<MultiSelect
|
||||||
defaultValue={
|
defaultValue={
|
||||||
field.value === TipologiaPosizioneEnum.Transitorio
|
field.value === tipologiaPosizioneEnum.enum.Transitorio
|
||||||
? {
|
? {
|
||||||
label: "Transitorio",
|
label: "Transitorio",
|
||||||
value: TipologiaPosizioneEnum.Transitorio,
|
value: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
label: "Stabile",
|
label: "Stabile",
|
||||||
value: TipologiaPosizioneEnum.Stabile,
|
value: tipologiaPosizioneEnum.enum.Stabile,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elementId="select-tipologia"
|
elementId="select-tipologia"
|
||||||
|
|
@ -466,11 +458,11 @@ export const FormServizioAcquisto = ({
|
||||||
options={[
|
options={[
|
||||||
{
|
{
|
||||||
label: "Transitorio",
|
label: "Transitorio",
|
||||||
value: TipologiaPosizioneEnum.Transitorio,
|
value: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Stabile",
|
label: "Stabile",
|
||||||
value: TipologiaPosizioneEnum.Stabile,
|
value: tipologiaPosizioneEnum.enum.Stabile,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
placeholder={t.seleziona_placeholder}
|
placeholder={t.seleziona_placeholder}
|
||||||
|
|
@ -552,14 +544,15 @@ export const FormServizioAcquisto = ({
|
||||||
/>
|
/>
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
disabled={tipologia !== TipologiaPosizioneEnum.Transitorio}
|
disabled={tipologia !== tipologiaPosizioneEnum.enum.Transitorio}
|
||||||
name="permanenza"
|
name="permanenza"
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem className="w-full">
|
<FormItem className="w-full">
|
||||||
<div className="flex flex-wrap items-center gap-x-2">
|
<div className="flex flex-wrap items-center gap-x-2">
|
||||||
<FormLabel
|
<FormLabel
|
||||||
className={cn(
|
className={cn(
|
||||||
tipologia !== TipologiaPosizioneEnum.Transitorio &&
|
tipologia !==
|
||||||
|
tipologiaPosizioneEnum.enum.Transitorio &&
|
||||||
"opacity-50",
|
"opacity-50",
|
||||||
)}
|
)}
|
||||||
htmlFor="permanenza"
|
htmlFor="permanenza"
|
||||||
|
|
@ -581,7 +574,7 @@ export const FormServizioAcquisto = ({
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
disabled={
|
disabled={
|
||||||
tipologia !== TipologiaPosizioneEnum.Transitorio
|
tipologia !== tipologiaPosizioneEnum.enum.Transitorio
|
||||||
}
|
}
|
||||||
elementId="permanenza"
|
elementId="permanenza"
|
||||||
elementName="permanenza"
|
elementName="permanenza"
|
||||||
|
|
@ -597,7 +590,7 @@ export const FormServizioAcquisto = ({
|
||||||
placeholder="Seleziona..."
|
placeholder="Seleziona..."
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
{tipologia === TipologiaPosizioneEnum.Transitorio && (
|
{tipologia === tipologiaPosizioneEnum.enum.Transitorio && (
|
||||||
<FormDescription>
|
<FormDescription>
|
||||||
{t.parametri.permanenza_desc}
|
{t.parametri.permanenza_desc}
|
||||||
</FormDescription>
|
</FormDescription>
|
||||||
|
|
@ -682,7 +675,7 @@ export const FormServizioAcquisto = ({
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{tipologia === TipologiaPosizioneEnum.Transitorio ? (
|
{tipologia === tipologiaPosizioneEnum.enum.Transitorio ? (
|
||||||
<div className="items-top flex w-full flex-col justify-between gap-4 sm:flex-row">
|
<div className="items-top flex w-full flex-col justify-between gap-4 sm:flex-row">
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,7 @@ export const useLiveChat = (chatId: ChatsChatid, userData: Session) => {
|
||||||
lastEventId === false ? skipToken : { chatId, lastEventId },
|
lastEventId === false ? skipToken : { chatId, lastEventId },
|
||||||
{
|
{
|
||||||
onData({ data }) {
|
onData({ data }) {
|
||||||
addMessages([data]);
|
addMessages([data as Message]);
|
||||||
setRead({ chatId });
|
setRead({ chatId });
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -148,9 +148,11 @@ export const useLiveChat = (chatId: ChatsChatid, userData: Session) => {
|
||||||
{
|
{
|
||||||
onData(event) {
|
onData(event) {
|
||||||
if (event.eventType === "edit") {
|
if (event.eventType === "edit") {
|
||||||
updateMessage(event.data.messageId, { message: event.data.message });
|
updateMessage(event.data.messageId as MessagesMessageid, {
|
||||||
|
message: event.data.message,
|
||||||
|
});
|
||||||
} else if (event.eventType === "delete") {
|
} else if (event.eventType === "delete") {
|
||||||
deleteMessage(event.data);
|
deleteMessage(event.data as MessagesMessageid);
|
||||||
} else if (event.eventType === "read_receipt") {
|
} else if (event.eventType === "read_receipt") {
|
||||||
// Mark all messages sent by this user as read
|
// Mark all messages sent by this user as read
|
||||||
setMessages((current) =>
|
setMessages((current) =>
|
||||||
|
|
@ -172,7 +174,8 @@ export const useLiveChat = (chatId: ChatsChatid, userData: Session) => {
|
||||||
api.chatSSE.onTyping.useSubscription(
|
api.chatSSE.onTyping.useSubscription(
|
||||||
{ chatId, username: userData.username, userId: userData.id },
|
{ chatId, username: userData.username, userId: userData.id },
|
||||||
{
|
{
|
||||||
onData(typers: TypingData) {
|
onData(data) {
|
||||||
|
const typers = data as TypingData;
|
||||||
setTypingStatus(typers.filter((n) => n.userId !== userData.id));
|
setTypingStatus(typers.filter((n) => n.userId !== userData.id));
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,9 @@ import { cn, redirectTo500 } from "~/lib/utils";
|
||||||
import { AnnuncioContext, useAnnuncio } from "~/providers/AnnuncioProvider";
|
import { AnnuncioContext, useAnnuncio } from "~/providers/AnnuncioProvider";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
import { buildRicercaUrl } from "~/providers/RicercaProvider";
|
import { buildRicercaUrl } from "~/providers/RicercaProvider";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import {
|
||||||
|
tipologiaPosizioneEnum,
|
||||||
|
} from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import type { AnnuncioData } from "~/server/controllers/annunci.controller";
|
import type { AnnuncioData } from "~/server/controllers/annunci.controller";
|
||||||
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
@ -228,8 +230,8 @@ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => {
|
||||||
const { prezzo, tipo } = useAnnuncio();
|
const { prezzo, tipo } = useAnnuncio();
|
||||||
const tipologia =
|
const tipologia =
|
||||||
tipo === "Transitorio"
|
tipo === "Transitorio"
|
||||||
? TipologiaPosizioneEnum.Transitorio
|
? tipologiaPosizioneEnum.enum.Transitorio
|
||||||
: TipologiaPosizioneEnum.Stabile;
|
: tipologiaPosizioneEnum.enum.Stabile;
|
||||||
const { data: prezziario, isLoading } =
|
const { data: prezziario, isLoading } =
|
||||||
api.prezziario.getPrezziPerTipologia.useQuery({
|
api.prezziario.getPrezziPerTipologia.useQuery({
|
||||||
tipologia,
|
tipologia,
|
||||||
|
|
@ -252,7 +254,7 @@ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => {
|
||||||
];
|
];
|
||||||
|
|
||||||
const cta =
|
const cta =
|
||||||
tipologia === TipologiaPosizioneEnum.Transitorio
|
tipologia === tipologiaPosizioneEnum.enum.Transitorio
|
||||||
? t.pricing_cmp.cta_breve
|
? t.pricing_cmp.cta_breve
|
||||||
: t.pricing_cmp.cta_stabile;
|
: t.pricing_cmp.cta_stabile;
|
||||||
|
|
||||||
|
|
@ -264,7 +266,7 @@ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => {
|
||||||
let opzioni: string[] = [];
|
let opzioni: string[] = [];
|
||||||
let pricingData: PricingData = [];
|
let pricingData: PricingData = [];
|
||||||
|
|
||||||
if (tipologia === TipologiaPosizioneEnum.Stabile) {
|
if (tipologia === tipologiaPosizioneEnum.enum.Stabile) {
|
||||||
//se stabile, mostra il prezzo basato sul canone in default
|
//se stabile, mostra il prezzo basato sul canone in default
|
||||||
const idx = prezzo > 70000 ? 2 : prezzo > 50000 ? 1 : 0;
|
const idx = prezzo > 70000 ? 2 : prezzo > 50000 ? 1 : 0;
|
||||||
const opzione = opzioniS[idx];
|
const opzione = opzioniS[idx];
|
||||||
|
|
@ -282,12 +284,12 @@ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const style =
|
const style =
|
||||||
tipologia === TipologiaPosizioneEnum.Transitorio
|
tipologia === tipologiaPosizioneEnum.enum.Transitorio
|
||||||
? "border-transitorio bg-transitorio"
|
? "border-transitorio bg-transitorio"
|
||||||
: "border-stabile bg-stabile";
|
: "border-stabile bg-stabile";
|
||||||
|
|
||||||
const title =
|
const title =
|
||||||
tipologia === TipologiaPosizioneEnum.Transitorio
|
tipologia === tipologiaPosizioneEnum.enum.Transitorio
|
||||||
? t.prezzi.titolo_transitori
|
? t.prezzi.titolo_transitori
|
||||||
: t.prezzi.titolo_stabile;
|
: t.prezzi.titolo_stabile;
|
||||||
|
|
||||||
|
|
@ -313,7 +315,7 @@ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => {
|
||||||
<Button
|
<Button
|
||||||
className={cn(
|
className={cn(
|
||||||
"w-full text-white",
|
"w-full text-white",
|
||||||
tipologia === TipologiaPosizioneEnum.Transitorio
|
tipologia === tipologiaPosizioneEnum.enum.Transitorio
|
||||||
? "bg-transitorio"
|
? "bg-transitorio"
|
||||||
: "bg-stabile",
|
: "bg-stabile",
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@ import type { NextApiRequest, NextApiResponse } from "next";
|
||||||
import type Stripe from "stripe";
|
import type Stripe from "stripe";
|
||||||
import { env } from "~/env";
|
import { env } from "~/env";
|
||||||
import stripe from "~/lib/stripe";
|
import stripe from "~/lib/stripe";
|
||||||
|
import { ordiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
import { appRouter } from "~/server/api/root";
|
import { appRouter } from "~/server/api/root";
|
||||||
import { addApiAuthToContext, createTRPCContext, t } from "~/server/api/trpc";
|
import { addApiAuthToContext, createTRPCContext, t } from "~/server/api/trpc";
|
||||||
import { zOrdineId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* /api/stripe-webhook
|
* /api/stripe-webhook
|
||||||
|
|
@ -51,7 +51,7 @@ const handler = async (
|
||||||
throw new Error("No metadata in payment intent");
|
throw new Error("No metadata in payment intent");
|
||||||
}
|
}
|
||||||
const metadataOrdineId = metadata.ordineId;
|
const metadataOrdineId = metadata.ordineId;
|
||||||
const ordineId = zOrdineId.safeParse(metadataOrdineId);
|
const ordineId = ordiniOrdineId.safeParse(metadataOrdineId);
|
||||||
if (!metadata.ordineId || !ordineId.success) {
|
if (!metadata.ordineId || !ordineId.success) {
|
||||||
throw new Error("No ordineId or userId in metadata");
|
throw new Error("No ordineId or userId in metadata");
|
||||||
}
|
}
|
||||||
|
|
@ -71,7 +71,7 @@ const handler = async (
|
||||||
throw new Error("No metadata in payment intent");
|
throw new Error("No metadata in payment intent");
|
||||||
}
|
}
|
||||||
const metadataOrdineId = metadata.ordineId;
|
const metadataOrdineId = metadata.ordineId;
|
||||||
const ordineId = zOrdineId.safeParse(metadataOrdineId);
|
const ordineId = ordiniOrdineId.safeParse(metadataOrdineId);
|
||||||
if (!metadata.ordineId || !ordineId.success) {
|
if (!metadata.ordineId || !ordineId.success) {
|
||||||
throw new Error("No ordineId or userId in metadata");
|
throw new Error("No ordineId or userId in metadata");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,8 @@ import { Badge } from "~/components/ui/badge";
|
||||||
import { AnnuncioEditForm } from "~/forms/FormEditAnnuncio";
|
import { AnnuncioEditForm } from "~/forms/FormEditAnnuncio";
|
||||||
import { cn, redirectTo500 } from "~/lib/utils";
|
import { cn, redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import type { AnnunciId } from "~/schemas/public/Annunci";
|
import { type AnnunciId, annunciId } from "~/schemas/public/Annunci";
|
||||||
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
||||||
import { zAnnuncioId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type AnnuncioEditProps = {
|
type AnnuncioEditProps = {
|
||||||
|
|
@ -43,7 +42,7 @@ const AnnuncioEdit: NextPageWithLayout<AnnuncioEditProps> = ({
|
||||||
export const getServerSideProps = (async (context) => {
|
export const getServerSideProps = (async (context) => {
|
||||||
const annuncioId = context.params?.id && parseInt(String(context.params.id));
|
const annuncioId = context.params?.id && parseInt(String(context.params.id));
|
||||||
|
|
||||||
const check = zAnnuncioId.safeParse(annuncioId);
|
const check = annunciId.safeParse(annuncioId);
|
||||||
if (!check.success) {
|
if (!check.success) {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,8 @@ import type { GetServerSideProps } from "next";
|
||||||
import { AllegatiComp } from "~/components/area-riservata/allegati";
|
import { AllegatiComp } from "~/components/area-riservata/allegati";
|
||||||
import { AreaRiservataLayoutUserView } from "~/components/Layout";
|
import { AreaRiservataLayoutUserView } from "~/components/Layout";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import { type UsersId, usersId } from "~/schemas/public/Users";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
type AllegatiProps = {
|
type AllegatiProps = {
|
||||||
userId: UsersId;
|
userId: UsersId;
|
||||||
|
|
@ -32,7 +31,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zUserId.safeParse(userId);
|
const parsed = usersId.safeParse(userId);
|
||||||
|
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,10 @@ import { FormEditQueueMail } from "~/forms/FormEditQueueMail";
|
||||||
import { FormAddCodaEmail } from "~/forms/FormNewMail";
|
import { FormAddCodaEmail } from "~/forms/FormNewMail";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import { useEnforcedSession } from "~/providers/SessionProvider";
|
import { useEnforcedSession } from "~/providers/SessionProvider";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import { usersId, type UsersId } from "~/schemas/public/Users";
|
||||||
import type { Email_EventData } from "~/server/controllers/event_queue.controller";
|
import type { Email_EventData } from "~/server/controllers/event_queue.controller";
|
||||||
|
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type ComunicazioniUserProps = {
|
type ComunicazioniUserProps = {
|
||||||
|
|
@ -106,7 +105,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zUserId.safeParse(userId);
|
const parsed = usersId.safeParse(userId);
|
||||||
|
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,8 @@ import { ProfileFormAccount } from "~/forms/FormProfilo_Account";
|
||||||
import { ProfileFormAnagrafica } from "~/forms/FormProfilo_Anagrafica";
|
import { ProfileFormAnagrafica } from "~/forms/FormProfilo_Anagrafica";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import { CatastoProvider } from "~/providers/CatastoProvider";
|
import { CatastoProvider } from "~/providers/CatastoProvider";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import { type UsersId, usersId } from "~/schemas/public/Users";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type EditUserProps = {
|
type EditUserProps = {
|
||||||
|
|
@ -262,7 +261,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zUserId.safeParse(userId);
|
const parsed = usersId.safeParse(userId);
|
||||||
|
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,12 @@ import { FormServizioAcquisto } from "~/forms/FormServizioAcquisto";
|
||||||
import { redirectTo500 } from "~/lib/utils";
|
import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import { CatastoProvider } from "~/providers/CatastoProvider";
|
import { CatastoProvider } from "~/providers/CatastoProvider";
|
||||||
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
import {
|
||||||
|
type ServizioServizioId,
|
||||||
|
servizioServizioId,
|
||||||
|
} from "~/schemas/public/Servizio";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import type { UsersId } from "~/schemas/public/Users";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zServizioId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type OnboardUserProps = {
|
type OnboardUserProps = {
|
||||||
|
|
@ -60,7 +62,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zServizioId.safeParse(id);
|
const parsed = servizioServizioId.safeParse(id);
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
console.error("Error parsing servizioId", parsed.error);
|
console.error("Error parsing servizioId", parsed.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,8 @@ import { Status500 } from "~/components/status-page";
|
||||||
import { OrdiniTable } from "~/components/tables/orders-table";
|
import { OrdiniTable } from "~/components/tables/orders-table";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import type { OrdiniOrdineId } from "~/schemas/public/Ordini";
|
import type { OrdiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import { type UsersId, usersId } from "~/schemas/public/Users";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type OrdiniUserProps = {
|
type OrdiniUserProps = {
|
||||||
|
|
@ -54,7 +53,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zUserId.safeParse(userId);
|
const parsed = usersId.safeParse(userId);
|
||||||
|
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,8 @@ import { NewRinnovoModal } from "~/components/servizio/rinnovo";
|
||||||
import { ServizioList } from "~/components/servizio/servizio";
|
import { ServizioList } from "~/components/servizio/servizio";
|
||||||
import { AnnunciRichiesti } from "~/components/servizio/servizio_annunci_accordions";
|
import { AnnunciRichiesti } from "~/components/servizio/servizio_annunci_accordions";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import { type UsersId, usersId } from "~/schemas/public/Users";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type RicercaUserProps = {
|
type RicercaUserProps = {
|
||||||
|
|
@ -52,7 +51,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zUserId.safeParse(userId);
|
const parsed = usersId.safeParse(userId);
|
||||||
|
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,9 @@ import { Status500 } from "~/components/status-page";
|
||||||
import { redirectTo500 } from "~/lib/utils";
|
import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import { RinnovoProvider } from "~/providers/RinnovoProvider";
|
import { RinnovoProvider } from "~/providers/RinnovoProvider";
|
||||||
import type { RinnoviId } from "~/schemas/public/Rinnovi";
|
import { type RinnoviId, rinnoviId } from "~/schemas/public/Rinnovi";
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
import { type UsersId, usersId } from "~/schemas/public/Users";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zRinnovoId, zUserId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type RinnovoUserProps = {
|
type RinnovoUserProps = {
|
||||||
|
|
@ -53,18 +52,18 @@ export const getServerSideProps = (async (context) => {
|
||||||
|
|
||||||
if (typeof rinnovo_id !== "string" || typeof user_id !== "string") {
|
if (typeof rinnovo_id !== "string" || typeof user_id !== "string") {
|
||||||
console.error("Error: rinnovoId or userId is not a string");
|
console.error("Error: rinnovoId or userId is not a string");
|
||||||
return redirectTo500
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
const parsedUserId = zUserId.safeParse(user_id);
|
const parsedUserId = usersId.safeParse(user_id);
|
||||||
if (!parsedUserId.success) {
|
if (!parsedUserId.success) {
|
||||||
console.error("Error parsing userId", parsedUserId.error);
|
console.error("Error parsing userId", parsedUserId.error);
|
||||||
return redirectTo500
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsedRinnovoId = zRinnovoId.safeParse(rinnovo_id);
|
const parsedRinnovoId = rinnoviId.safeParse(rinnovo_id);
|
||||||
if (!parsedRinnovoId.success) {
|
if (!parsedRinnovoId.success) {
|
||||||
console.error("Error parsing rinnovoId", parsedRinnovoId.error);
|
console.error("Error parsing rinnovoId", parsedRinnovoId.error);
|
||||||
return redirectTo500
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
const rinnovoId = parsedRinnovoId.data;
|
const rinnovoId = parsedRinnovoId.data;
|
||||||
const userId = parsedUserId.data;
|
const userId = parsedUserId.data;
|
||||||
|
|
@ -86,7 +85,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirectTo500
|
return redirectTo500;
|
||||||
}) satisfies GetServerSideProps<RinnovoUserProps>;
|
}) satisfies GetServerSideProps<RinnovoUserProps>;
|
||||||
|
|
||||||
RinnovoUser.getLayout = function getLayout(page) {
|
RinnovoUser.getLayout = function getLayout(page) {
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,12 @@ import { AnnunciRichiesti } from "~/components/servizio/servizio_annunci_accordi
|
||||||
import { Status500 } from "~/components/status-page";
|
import { Status500 } from "~/components/status-page";
|
||||||
import { redirectTo500 } from "~/lib/utils";
|
import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
import {
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
type ServizioServizioId,
|
||||||
|
servizioServizioId,
|
||||||
|
} from "~/schemas/public/Servizio";
|
||||||
|
import { type UsersId, usersId } from "~/schemas/public/Users";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zServizioId, zUserId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type ServizioUserProps = {
|
type ServizioUserProps = {
|
||||||
|
|
@ -55,13 +57,13 @@ export const getServerSideProps = (async (context) => {
|
||||||
console.error("Error: servizioId or userId is not a string");
|
console.error("Error: servizioId or userId is not a string");
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
const parsedUserId = zUserId.safeParse(user_id);
|
const parsedUserId = usersId.safeParse(user_id);
|
||||||
if (!parsedUserId.success) {
|
if (!parsedUserId.success) {
|
||||||
console.error("Error parsing userId", parsedUserId.error);
|
console.error("Error parsing userId", parsedUserId.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsedServizioId = zServizioId.safeParse(servizio_id);
|
const parsedServizioId = servizioServizioId.safeParse(servizio_id);
|
||||||
if (!parsedServizioId.success) {
|
if (!parsedServizioId.success) {
|
||||||
console.error("Error parsing servizioId", parsedServizioId.error);
|
console.error("Error parsing servizioId", parsedServizioId.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,8 @@ import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import { RinnovoProvider } from "~/providers/RinnovoProvider";
|
import { RinnovoProvider } from "~/providers/RinnovoProvider";
|
||||||
import { useEnforcedSession } from "~/providers/SessionProvider";
|
import { useEnforcedSession } from "~/providers/SessionProvider";
|
||||||
import type { RinnoviId } from "~/schemas/public/Rinnovi";
|
import { type RinnoviId, rinnoviId } from "~/schemas/public/Rinnovi";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zRinnovoId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type RinnovoPageProps = {
|
type RinnovoPageProps = {
|
||||||
|
|
@ -61,7 +60,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsedRinnovoId = zRinnovoId.safeParse(rinnovo_id);
|
const parsedRinnovoId = rinnoviId.safeParse(rinnovo_id);
|
||||||
if (!parsedRinnovoId.success) {
|
if (!parsedRinnovoId.success) {
|
||||||
console.error("Error parsing rinnovoId", parsedRinnovoId.error);
|
console.error("Error parsing rinnovoId", parsedRinnovoId.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,8 @@ import { Card } from "~/components/ui/card";
|
||||||
import { replaceWithBr } from "~/lib/newlineToBr";
|
import { replaceWithBr } from "~/lib/newlineToBr";
|
||||||
import { formatCurrency, redirectTo500 } from "~/lib/utils";
|
import { formatCurrency, redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import type { AnnunciId } from "~/schemas/public/Annunci";
|
import { type AnnunciId, annunciId } from "~/schemas/public/Annunci";
|
||||||
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
||||||
import { zAnnuncioId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type PageProps = {
|
type PageProps = {
|
||||||
|
|
@ -237,7 +236,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zAnnuncioId.safeParse(parseInt(id));
|
const parsed = annunciId.safeParse(parseInt(id));
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
console.error("Error parsing ordineId", parsed.error);
|
console.error("Error parsing ordineId", parsed.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,11 @@ import { Status500 } from "~/components/status-page";
|
||||||
import { redirectTo500 } from "~/lib/utils";
|
import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import { useEnforcedSession } from "~/providers/SessionProvider";
|
import { useEnforcedSession } from "~/providers/SessionProvider";
|
||||||
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
import {
|
||||||
|
type ServizioServizioId,
|
||||||
|
servizioServizioId,
|
||||||
|
} from "~/schemas/public/Servizio";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zServizioId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type ServizioPageProps = {
|
type ServizioPageProps = {
|
||||||
|
|
@ -59,7 +61,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsedServizioId = zServizioId.safeParse(servizio_id);
|
const parsedServizioId = servizioServizioId.safeParse(servizio_id);
|
||||||
if (!parsedServizioId.success) {
|
if (!parsedServizioId.success) {
|
||||||
console.error("Error parsing servizioId", parsedServizioId.error);
|
console.error("Error parsing servizioId", parsedServizioId.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ import { Badge } from "~/components/ui/badge";
|
||||||
import { Separator } from "~/components/ui/separator";
|
import { Separator } from "~/components/ui/separator";
|
||||||
import { cn } from "~/lib/utils";
|
import { cn } from "~/lib/utils";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
|
|
@ -72,7 +72,7 @@ const Prezzi: NextPage = () => {
|
||||||
]}
|
]}
|
||||||
pricingData={pricingTransitorio}
|
pricingData={pricingTransitorio}
|
||||||
statico
|
statico
|
||||||
tipo={TipologiaPosizioneEnum.Transitorio}
|
tipo={tipologiaPosizioneEnum.enum.Transitorio}
|
||||||
title={t.prezzi.titolo_transitori}
|
title={t.prezzi.titolo_transitori}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
@ -109,7 +109,7 @@ const Prezzi: NextPage = () => {
|
||||||
]}
|
]}
|
||||||
pricingData={pricingStabile}
|
pricingData={pricingStabile}
|
||||||
statico
|
statico
|
||||||
tipo={TipologiaPosizioneEnum.Stabile}
|
tipo={tipologiaPosizioneEnum.enum.Stabile}
|
||||||
title={t.prezzi.titolo_stabile}
|
title={t.prezzi.titolo_stabile}
|
||||||
/>
|
/>
|
||||||
<p>{t.prezzi.desc_stabile}</p>
|
<p>{t.prezzi.desc_stabile}</p>
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@ import { AreaRiservataLayout } from "~/components/Layout";
|
||||||
import { Button } from "~/components/ui/button";
|
import { Button } from "~/components/ui/button";
|
||||||
import { formatCurrency, redirectTo500 } from "~/lib/utils";
|
import { formatCurrency, redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
|
import { ordiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zOrdineId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
type BonificoManualeProps = {
|
type BonificoManualeProps = {
|
||||||
titolo: string;
|
titolo: string;
|
||||||
|
|
@ -81,7 +81,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zOrdineId.safeParse(id);
|
const parsed = ordiniOrdineId.safeParse(id);
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
console.error("Error parsing ordineId", parsed.error);
|
console.error("Error parsing ordineId", parsed.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,11 @@ import { LoadingPage } from "~/components/loading";
|
||||||
import { Status500 } from "~/components/status-page";
|
import { Status500 } from "~/components/status-page";
|
||||||
import { redirectTo500 } from "~/lib/utils";
|
import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import type { TestiEStringheStingaId } from "~/schemas/public/TestiEStringhe";
|
import {
|
||||||
|
type TestiEStringheStingaId,
|
||||||
|
testiEStringheStingaId,
|
||||||
|
} from "~/schemas/public/TestiEStringhe";
|
||||||
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
||||||
import { zTestiEStringheStingaId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type CondizioniProps = {
|
type CondizioniProps = {
|
||||||
|
|
@ -57,7 +59,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zTestiEStringheStingaId.safeParse(id);
|
const parsed = testiEStringheStingaId.safeParse(id);
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
console.error("Error parsing paymentId", parsed.error);
|
console.error("Error parsing paymentId", parsed.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,9 @@ import { getStorageUrl } from "~/lib/storage_utils";
|
||||||
import { redirectTo500 } from "~/lib/utils";
|
import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
|
import { annunciId } from "~/schemas/public/Annunci";
|
||||||
|
import { servizioServizioId } from "~/schemas/public/Servizio";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zAnnuncioId, zServizioId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type ContrattoViewerProps = {
|
type ContrattoViewerProps = {
|
||||||
|
|
@ -76,8 +77,8 @@ export const getServerSideProps = (async (context) => {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsedServizioId = zServizioId.safeParse(servizioId);
|
const parsedServizioId = servizioServizioId.safeParse(servizioId);
|
||||||
const parsedAnnuncioId = zAnnuncioId.safeParse(parseInt(annuncioId));
|
const parsedAnnuncioId = annunciId.safeParse(parseInt(annuncioId));
|
||||||
|
|
||||||
if (!parsedServizioId.success || !parsedAnnuncioId.success) {
|
if (!parsedServizioId.success || !parsedAnnuncioId.success) {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,9 @@ import { getStorageUrl } from "~/lib/storage_utils";
|
||||||
import { redirectTo500 } from "~/lib/utils";
|
import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
|
import { annunciId } from "~/schemas/public/Annunci";
|
||||||
|
import { servizioServizioId } from "~/schemas/public/Servizio";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zAnnuncioId, zServizioId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type ContrattoViewerProps = {
|
type ContrattoViewerProps = {
|
||||||
|
|
@ -72,8 +73,8 @@ export const getServerSideProps = (async (context) => {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsedServizioId = zServizioId.safeParse(servizioId);
|
const parsedServizioId = servizioServizioId.safeParse(servizioId);
|
||||||
const parsedAnnuncioId = zAnnuncioId.safeParse(parseInt(annuncioId));
|
const parsedAnnuncioId = annunciId.safeParse(parseInt(annuncioId));
|
||||||
|
|
||||||
if (!parsedServizioId.success || !parsedAnnuncioId.success) {
|
if (!parsedServizioId.success || !parsedAnnuncioId.success) {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,11 @@ import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import { CatastoProvider } from "~/providers/CatastoProvider";
|
import { CatastoProvider } from "~/providers/CatastoProvider";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
import {
|
||||||
|
type ServizioServizioId,
|
||||||
|
servizioServizioId,
|
||||||
|
} from "~/schemas/public/Servizio";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zServizioId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
type OnboardServizioProps = {
|
type OnboardServizioProps = {
|
||||||
|
|
@ -69,7 +71,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zServizioId.safeParse(id);
|
const parsed = servizioServizioId.safeParse(id);
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
console.error("Error parsing servizioId", parsed.error);
|
console.error("Error parsing servizioId", parsed.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@ import { AreaRiservataLayout } from "~/components/Layout";
|
||||||
import stripe from "~/lib/stripe";
|
import stripe from "~/lib/stripe";
|
||||||
import { redirectTo500 } from "~/lib/utils";
|
import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
|
import { ordiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zOrdineId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
type PagamentoPageProps = {
|
type PagamentoPageProps = {
|
||||||
clientSecret: string | null;
|
clientSecret: string | null;
|
||||||
|
|
@ -52,7 +52,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zOrdineId.safeParse(id);
|
const parsed = ordiniOrdineId.safeParse(id);
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
console.error("Error parsing ordineId", parsed.error);
|
console.error("Error parsing ordineId", parsed.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@ import { Button } from "~/components/ui/button";
|
||||||
import stripe from "~/lib/stripe";
|
import stripe from "~/lib/stripe";
|
||||||
import { redirectTo500 } from "~/lib/utils";
|
import { redirectTo500 } from "~/lib/utils";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum";
|
import { paymentStatusEnum } from "~/schemas/public/PaymentStatusEnum";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
|
|
||||||
enum AcquistoStatusEnum {
|
enum AcquistoStatusEnum {
|
||||||
|
|
@ -60,12 +60,12 @@ export const getServerSideProps = (async (context) => {
|
||||||
|
|
||||||
let resultStatus: AcquistoStatusEnum;
|
let resultStatus: AcquistoStatusEnum;
|
||||||
if (paymentIntent.status === "succeeded") {
|
if (paymentIntent.status === "succeeded") {
|
||||||
if (payment.paymentstatus !== PaymentStatusEnum.success) {
|
if (payment.paymentstatus !== paymentStatusEnum.enum.success) {
|
||||||
resultStatus = AcquistoStatusEnum.internal_error;
|
resultStatus = AcquistoStatusEnum.internal_error;
|
||||||
}
|
}
|
||||||
resultStatus = AcquistoStatusEnum.success;
|
resultStatus = AcquistoStatusEnum.success;
|
||||||
} else if (paymentIntent.status === "processing") {
|
} else if (paymentIntent.status === "processing") {
|
||||||
if (payment.paymentstatus !== PaymentStatusEnum.processing) {
|
if (payment.paymentstatus !== paymentStatusEnum.enum.processing) {
|
||||||
resultStatus = AcquistoStatusEnum.internal_error;
|
resultStatus = AcquistoStatusEnum.internal_error;
|
||||||
}
|
}
|
||||||
resultStatus = AcquistoStatusEnum.processing;
|
resultStatus = AcquistoStatusEnum.processing;
|
||||||
|
|
@ -75,7 +75,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
redirectUrl:
|
redirectUrl:
|
||||||
payment.type === OrderTypeEnum.Rinnovo
|
payment.type === orderTypeEnum.enum.Rinnovo
|
||||||
? `/area-riservata/rinnovo/${payment.rinnovo_id}`
|
? `/area-riservata/rinnovo/${payment.rinnovo_id}`
|
||||||
: `/area-riservata/servizio/${payment.servizio_id}`,
|
: `/area-riservata/servizio/${payment.servizio_id}`,
|
||||||
status: resultStatus,
|
status: resultStatus,
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ import { ArrowRight, ExternalLink } from "lucide-react";
|
||||||
import type { GetServerSideProps } from "next";
|
import type { GetServerSideProps } from "next";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
import z from "zod";
|
|
||||||
import { AreaRiservataLayout } from "~/components/Layout";
|
import { AreaRiservataLayout } from "~/components/Layout";
|
||||||
import { Button } from "~/components/ui/button";
|
import { Button } from "~/components/ui/button";
|
||||||
import {
|
import {
|
||||||
|
|
@ -16,11 +15,12 @@ import {
|
||||||
import { formatCurrency, redirectTo500 } from "~/lib/utils";
|
import { formatCurrency, redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import { useTranslation } from "~/providers/I18nProvider";
|
import { useTranslation } from "~/providers/I18nProvider";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type { Prezziario } from "~/schemas/public/Prezziario";
|
import type { Prezziario } from "~/schemas/public/Prezziario";
|
||||||
|
import { rinnoviId } from "~/schemas/public/Rinnovi";
|
||||||
|
import { servizioServizioId } from "~/schemas/public/Servizio";
|
||||||
import type { PreparedPaymentData } from "~/server/controllers/pagamenti.controller";
|
import type { PreparedPaymentData } from "~/server/controllers/pagamenti.controller";
|
||||||
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
||||||
import { zRinnovoId, zServizioId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
type PreviewPurchaseProps = {
|
type PreviewPurchaseProps = {
|
||||||
stripeDisabled: boolean;
|
stripeDisabled: boolean;
|
||||||
|
|
@ -128,20 +128,20 @@ export const getServerSideProps = (async (context) => {
|
||||||
console.error("Error: payment type is not a string");
|
console.error("Error: payment type is not a string");
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
const parsedType = z.enum(OrderTypeEnum).safeParse(payment_type);
|
const parsedType = orderTypeEnum.safeParse(payment_type);
|
||||||
if (!parsedType.success) {
|
if (!parsedType.success) {
|
||||||
console.error("Error parsing payment type", parsedType.error);
|
console.error("Error parsing payment type", parsedType.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
const type = parsedType.data;
|
const type = parsedType.data;
|
||||||
|
|
||||||
if (type === OrderTypeEnum.Rinnovo) {
|
if (type === orderTypeEnum.enum.Rinnovo) {
|
||||||
const id = context.query?.rinnovoId;
|
const id = context.query?.rinnovoId;
|
||||||
if (typeof id !== "string") {
|
if (typeof id !== "string") {
|
||||||
console.error("Error: rinnovoId is not a string");
|
console.error("Error: rinnovoId is not a string");
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
const parsedRinnovoId = zRinnovoId.safeParse(id);
|
const parsedRinnovoId = rinnoviId.safeParse(id);
|
||||||
if (!parsedRinnovoId.success) {
|
if (!parsedRinnovoId.success) {
|
||||||
console.error("Error parsing rinnovoId", parsedRinnovoId.error);
|
console.error("Error parsing rinnovoId", parsedRinnovoId.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
@ -168,7 +168,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
console.error("Error: servizioId is not a string");
|
console.error("Error: servizioId is not a string");
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
const parsedServizioId = zServizioId.safeParse(id);
|
const parsedServizioId = servizioServizioId.safeParse(id);
|
||||||
if (!parsedServizioId.success) {
|
if (!parsedServizioId.success) {
|
||||||
console.error("Error parsing servizioId", parsedServizioId.error);
|
console.error("Error parsing servizioId", parsedServizioId.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
@ -183,7 +183,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
let saldoPreview: Prezziario | null = null;
|
let saldoPreview: Prezziario | null = null;
|
||||||
if (type === OrderTypeEnum.Acconto) {
|
if (type === orderTypeEnum.enum.Acconto) {
|
||||||
const saldoResult = await helper.trpc.pagamenti.previewSaldo.fetch({
|
const saldoResult = await helper.trpc.pagamenti.previewSaldo.fetch({
|
||||||
servizioId: parsedServizioId.data,
|
servizioId: parsedServizioId.data,
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,8 @@ import { Status500 } from "~/components/status-page";
|
||||||
import { Button } from "~/components/ui/button";
|
import { Button } from "~/components/ui/button";
|
||||||
import { redirectTo500 } from "~/lib/utils";
|
import { redirectTo500 } from "~/lib/utils";
|
||||||
import type { NextPageWithLayout } from "~/pages/_app";
|
import type { NextPageWithLayout } from "~/pages/_app";
|
||||||
import type { OrdiniOrdineId } from "~/schemas/public/Ordini";
|
import { type OrdiniOrdineId, ordiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
import { generateSSGHelper } from "~/server/utils/ssgHelper";
|
||||||
import { zOrdineId } from "~/server/utils/zod_types";
|
|
||||||
import { api } from "~/utils/api";
|
import { api } from "~/utils/api";
|
||||||
|
|
||||||
const PDFViewer = dynamic(
|
const PDFViewer = dynamic(
|
||||||
|
|
@ -131,7 +130,7 @@ export const getServerSideProps = (async (context) => {
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsed = zOrdineId.safeParse(id);
|
const parsed = ordiniOrdineId.safeParse(id);
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
console.error("Error parsing ordineId", parsed.error);
|
console.error("Error parsing ordineId", parsed.error);
|
||||||
return redirectTo500;
|
return redirectTo500;
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,12 @@ export const ServizioAnnuncioProvider = ({
|
||||||
await mutateAsync({
|
await mutateAsync({
|
||||||
annuncioId: data.id,
|
annuncioId: data.id,
|
||||||
servizioId,
|
servizioId,
|
||||||
data: upd,
|
data: {
|
||||||
|
...upd,
|
||||||
|
open_contatti_at: upd.open_contatti_at
|
||||||
|
? new Date(upd.open_contatti_at)
|
||||||
|
: null,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import type { Caratteristiche } from '../../utils/kanel-types.ts';
|
import { CaratteristicheSchema, type Caratteristiche } from '../../utils/kanel-types';
|
||||||
import type { ColumnType, Selectable, Insertable, Updateable } from 'kysely';
|
import type { ColumnType, Selectable, Insertable, Updateable } from 'kysely';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
|
|
@ -143,7 +143,7 @@ export const AnnunciSchema = z.object({
|
||||||
prezzo: z.number(),
|
prezzo: z.number(),
|
||||||
anno: z.string().nullable(),
|
anno: z.string().nullable(),
|
||||||
classe: z.string().nullable(),
|
classe: z.string().nullable(),
|
||||||
mq: z.string().nullable(),
|
mq: z.number().nullable(),
|
||||||
piano: z.string().nullable(),
|
piano: z.string().nullable(),
|
||||||
piano_palazzo: z.number().nullable(),
|
piano_palazzo: z.number().nullable(),
|
||||||
unita_condominio: z.number().nullable(),
|
unita_condominio: z.number().nullable(),
|
||||||
|
|
@ -161,7 +161,7 @@ export const AnnunciSchema = z.object({
|
||||||
desc_en: z.string().nullable(),
|
desc_en: z.string().nullable(),
|
||||||
stato: z.string().nullable(),
|
stato: z.string().nullable(),
|
||||||
web: z.boolean().nullable(),
|
web: z.boolean().nullable(),
|
||||||
caratteristiche: z.unknown().nullable(),
|
caratteristiche: CaratteristicheSchema.nullable(),
|
||||||
homepage: z.boolean().nullable(),
|
homepage: z.boolean().nullable(),
|
||||||
external_videos: z.string().array().nullable(),
|
external_videos: z.string().array().nullable(),
|
||||||
email: z.string().nullable(),
|
email: z.string().nullable(),
|
||||||
|
|
@ -198,7 +198,7 @@ export const NewAnnunciSchema = z.object({
|
||||||
prezzo: z.number().optional(),
|
prezzo: z.number().optional(),
|
||||||
anno: z.string().optional().nullable(),
|
anno: z.string().optional().nullable(),
|
||||||
classe: z.string().optional().nullable(),
|
classe: z.string().optional().nullable(),
|
||||||
mq: z.string().optional().nullable(),
|
mq: z.number().optional().nullable(),
|
||||||
piano: z.string().optional().nullable(),
|
piano: z.string().optional().nullable(),
|
||||||
piano_palazzo: z.number().optional().nullable(),
|
piano_palazzo: z.number().optional().nullable(),
|
||||||
unita_condominio: z.number().optional().nullable(),
|
unita_condominio: z.number().optional().nullable(),
|
||||||
|
|
@ -216,17 +216,17 @@ export const NewAnnunciSchema = z.object({
|
||||||
desc_en: z.string().optional().nullable(),
|
desc_en: z.string().optional().nullable(),
|
||||||
stato: z.string().optional().nullable(),
|
stato: z.string().optional().nullable(),
|
||||||
web: z.boolean().optional().nullable(),
|
web: z.boolean().optional().nullable(),
|
||||||
caratteristiche: z.unknown().optional().nullable(),
|
caratteristiche: CaratteristicheSchema.optional().nullable(),
|
||||||
homepage: z.boolean().optional().nullable(),
|
homepage: z.boolean().optional().nullable(),
|
||||||
external_videos: z.string().array().optional().nullable(),
|
external_videos: z.string().array().optional().nullable(),
|
||||||
email: z.string().optional().nullable(),
|
email: z.string().optional().nullable(),
|
||||||
creato_il: z.date().optional().nullable(),
|
creato_il: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
modificato_il: z.date().optional().nullable(),
|
modificato_il: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
consegna: z.number().optional().nullable(),
|
consegna: z.number().optional().nullable(),
|
||||||
disponibile_da: z.date().optional().nullable(),
|
disponibile_da: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
permanenza: z.number().array().optional().nullable(),
|
permanenza: z.number().array().optional().nullable(),
|
||||||
persone: z.string().array().optional().nullable(),
|
persone: z.string().array().optional().nullable(),
|
||||||
media_updated_at: z.date().optional().nullable(),
|
media_updated_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
tipo_locatore: z.string().optional().nullable(),
|
tipo_locatore: z.string().optional().nullable(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -253,7 +253,7 @@ export const AnnunciUpdateSchema = z.object({
|
||||||
prezzo: z.number().optional(),
|
prezzo: z.number().optional(),
|
||||||
anno: z.string().optional().nullable(),
|
anno: z.string().optional().nullable(),
|
||||||
classe: z.string().optional().nullable(),
|
classe: z.string().optional().nullable(),
|
||||||
mq: z.string().optional().nullable(),
|
mq: z.number().optional().nullable(),
|
||||||
piano: z.string().optional().nullable(),
|
piano: z.string().optional().nullable(),
|
||||||
piano_palazzo: z.number().optional().nullable(),
|
piano_palazzo: z.number().optional().nullable(),
|
||||||
unita_condominio: z.number().optional().nullable(),
|
unita_condominio: z.number().optional().nullable(),
|
||||||
|
|
@ -271,16 +271,16 @@ export const AnnunciUpdateSchema = z.object({
|
||||||
desc_en: z.string().optional().nullable(),
|
desc_en: z.string().optional().nullable(),
|
||||||
stato: z.string().optional().nullable(),
|
stato: z.string().optional().nullable(),
|
||||||
web: z.boolean().optional().nullable(),
|
web: z.boolean().optional().nullable(),
|
||||||
caratteristiche: z.unknown().optional().nullable(),
|
caratteristiche: CaratteristicheSchema.optional().nullable(),
|
||||||
homepage: z.boolean().optional().nullable(),
|
homepage: z.boolean().optional().nullable(),
|
||||||
external_videos: z.string().array().optional().nullable(),
|
external_videos: z.string().array().optional().nullable(),
|
||||||
email: z.string().optional().nullable(),
|
email: z.string().optional().nullable(),
|
||||||
creato_il: z.date().optional().nullable(),
|
creato_il: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
modificato_il: z.date().optional().nullable(),
|
modificato_il: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
consegna: z.number().optional().nullable(),
|
consegna: z.number().optional().nullable(),
|
||||||
disponibile_da: z.date().optional().nullable(),
|
disponibile_da: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
permanenza: z.number().array().optional().nullable(),
|
permanenza: z.number().array().optional().nullable(),
|
||||||
persone: z.string().array().optional().nullable(),
|
persone: z.string().array().optional().nullable(),
|
||||||
media_updated_at: z.date().optional().nullable(),
|
media_updated_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
tipo_locatore: z.string().optional().nullable(),
|
tipo_locatore: z.string().optional().nullable(),
|
||||||
});
|
});
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
/** Represents the enum public.BanType */
|
/** Represents the enum public.BanType */
|
||||||
enum BanType {
|
type BanType =
|
||||||
ip = 'ip',
|
| 'ip'
|
||||||
email = 'email',
|
| 'email'
|
||||||
phone = 'phone',
|
| 'phone'
|
||||||
cf = 'cf',
|
| 'cf';
|
||||||
};
|
|
||||||
|
|
||||||
export default BanType;
|
export default BanType;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,14 +33,14 @@ export const ChatsSchema = z.object({
|
||||||
|
|
||||||
export const NewChatsSchema = z.object({
|
export const NewChatsSchema = z.object({
|
||||||
chatid: chatsChatid.optional(),
|
chatid: chatsChatid.optional(),
|
||||||
created_at: z.date(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()),
|
||||||
user_ref: usersId,
|
user_ref: usersId,
|
||||||
tags: z.string().array().optional().nullable(),
|
tags: z.string().array().optional().nullable(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const ChatsUpdateSchema = z.object({
|
export const ChatsUpdateSchema = z.object({
|
||||||
chatid: chatsChatid.optional(),
|
chatid: chatsChatid.optional(),
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
user_ref: usersId.optional(),
|
user_ref: usersId.optional(),
|
||||||
tags: z.string().array().optional().nullable(),
|
tags: z.string().array().optional().nullable(),
|
||||||
});
|
});
|
||||||
|
|
@ -34,13 +34,13 @@ export const EmailsSchema = z.object({
|
||||||
export const NewEmailsSchema = z.object({
|
export const NewEmailsSchema = z.object({
|
||||||
id_email: emailsIdEmail.optional(),
|
id_email: emailsIdEmail.optional(),
|
||||||
user_id: usersId,
|
user_id: usersId,
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
data: z.unknown(),
|
data: z.unknown(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const EmailsUpdateSchema = z.object({
|
export const EmailsUpdateSchema = z.object({
|
||||||
id_email: emailsIdEmail.optional(),
|
id_email: emailsIdEmail.optional(),
|
||||||
user_id: usersId.optional(),
|
user_id: usersId.optional(),
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
data: z.unknown().optional(),
|
data: z.unknown().optional(),
|
||||||
});
|
});
|
||||||
|
|
@ -32,14 +32,14 @@ export const EventQueueSchema = z.object({
|
||||||
|
|
||||||
export const NewEventQueueSchema = z.object({
|
export const NewEventQueueSchema = z.object({
|
||||||
event_id: eventQueueEventId.optional(),
|
event_id: eventQueueEventId.optional(),
|
||||||
lock_expires: z.date(),
|
lock_expires: z.union([z.date(), z.string()]).pipe(z.coerce.date()),
|
||||||
data: z.unknown().optional().nullable(),
|
data: z.unknown().optional().nullable(),
|
||||||
status: z.string().optional(),
|
status: z.string().optional(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const EventQueueUpdateSchema = z.object({
|
export const EventQueueUpdateSchema = z.object({
|
||||||
event_id: eventQueueEventId.optional(),
|
event_id: eventQueueEventId.optional(),
|
||||||
lock_expires: z.date().optional(),
|
lock_expires: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
data: z.unknown().optional().nullable(),
|
data: z.unknown().optional().nullable(),
|
||||||
status: z.string().optional(),
|
status: z.string().optional(),
|
||||||
});
|
});
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
/** Represents the enum public.GenericStatusEnum */
|
/** Represents the enum public.GenericStatusEnum */
|
||||||
enum GenericStatusEnum {
|
type GenericStatusEnum =
|
||||||
pending = 'pending',
|
| 'pending'
|
||||||
success = 'success',
|
| 'success'
|
||||||
failed = 'failed',
|
| 'failed';
|
||||||
};
|
|
||||||
|
|
||||||
export default GenericStatusEnum;
|
export default GenericStatusEnum;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ export const NewMessagesSchema = z.object({
|
||||||
messageid: messagesMessageid.optional(),
|
messageid: messagesMessageid.optional(),
|
||||||
chatid: chatsChatid,
|
chatid: chatsChatid,
|
||||||
message: z.string(),
|
message: z.string(),
|
||||||
time: z.date(),
|
time: z.union([z.date(), z.string()]).pipe(z.coerce.date()),
|
||||||
isread: z.boolean().optional(),
|
isread: z.boolean().optional(),
|
||||||
sender: usersId,
|
sender: usersId,
|
||||||
reply_to_id: messagesMessageid.optional().nullable(),
|
reply_to_id: messagesMessageid.optional().nullable(),
|
||||||
|
|
@ -59,7 +59,7 @@ export const MessagesUpdateSchema = z.object({
|
||||||
messageid: messagesMessageid.optional(),
|
messageid: messagesMessageid.optional(),
|
||||||
chatid: chatsChatid.optional(),
|
chatid: chatsChatid.optional(),
|
||||||
message: z.string().optional(),
|
message: z.string().optional(),
|
||||||
time: z.date().optional(),
|
time: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
isread: z.boolean().optional(),
|
isread: z.boolean().optional(),
|
||||||
sender: usersId.optional(),
|
sender: usersId.optional(),
|
||||||
reply_to_id: messagesMessageid.optional().nullable(),
|
reply_to_id: messagesMessageid.optional().nullable(),
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
/** Represents the enum public.OrderTypeEnum */
|
/** Represents the enum public.OrderTypeEnum */
|
||||||
enum OrderTypeEnum {
|
type OrderTypeEnum =
|
||||||
Acconto = 'Acconto',
|
| 'Acconto'
|
||||||
Saldo = 'Saldo',
|
| 'Saldo'
|
||||||
Consulenza = 'Consulenza',
|
| 'Consulenza'
|
||||||
Altro = 'Altro',
|
| 'Altro'
|
||||||
Rinnovo = 'Rinnovo',
|
| 'Rinnovo';
|
||||||
};
|
|
||||||
|
|
||||||
export default OrderTypeEnum;
|
export default OrderTypeEnum;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,14 +69,14 @@ export const OrdiniSchema = z.object({
|
||||||
export const NewOrdiniSchema = z.object({
|
export const NewOrdiniSchema = z.object({
|
||||||
ordine_id: ordiniOrdineId.optional(),
|
ordine_id: ordiniOrdineId.optional(),
|
||||||
userid: usersId,
|
userid: usersId,
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
packid: prezziarioIdprezziario,
|
packid: prezziarioIdprezziario,
|
||||||
servizio_id: servizioServizioId.optional().nullable(),
|
servizio_id: servizioServizioId.optional().nullable(),
|
||||||
type: orderTypeEnum,
|
type: orderTypeEnum,
|
||||||
isActive: z.boolean().optional(),
|
isActive: z.boolean().optional(),
|
||||||
amount_cent: z.number(),
|
amount_cent: z.number(),
|
||||||
paymentmethod: z.string().optional().nullable(),
|
paymentmethod: z.string().optional().nullable(),
|
||||||
paid_at: z.date().optional().nullable(),
|
paid_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
intent_id: z.string().optional().nullable(),
|
intent_id: z.string().optional().nullable(),
|
||||||
paymentstatus: paymentStatusEnum.optional().nullable(),
|
paymentstatus: paymentStatusEnum.optional().nullable(),
|
||||||
sconto: z.number().optional(),
|
sconto: z.number().optional(),
|
||||||
|
|
@ -86,14 +86,14 @@ export const NewOrdiniSchema = z.object({
|
||||||
export const OrdiniUpdateSchema = z.object({
|
export const OrdiniUpdateSchema = z.object({
|
||||||
ordine_id: ordiniOrdineId.optional(),
|
ordine_id: ordiniOrdineId.optional(),
|
||||||
userid: usersId.optional(),
|
userid: usersId.optional(),
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
packid: prezziarioIdprezziario.optional(),
|
packid: prezziarioIdprezziario.optional(),
|
||||||
servizio_id: servizioServizioId.optional().nullable(),
|
servizio_id: servizioServizioId.optional().nullable(),
|
||||||
type: orderTypeEnum.optional(),
|
type: orderTypeEnum.optional(),
|
||||||
isActive: z.boolean().optional(),
|
isActive: z.boolean().optional(),
|
||||||
amount_cent: z.number().optional(),
|
amount_cent: z.number().optional(),
|
||||||
paymentmethod: z.string().optional().nullable(),
|
paymentmethod: z.string().optional().nullable(),
|
||||||
paid_at: z.date().optional().nullable(),
|
paid_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
intent_id: z.string().optional().nullable(),
|
intent_id: z.string().optional().nullable(),
|
||||||
paymentstatus: paymentStatusEnum.optional().nullable(),
|
paymentstatus: paymentStatusEnum.optional().nullable(),
|
||||||
sconto: z.number().optional(),
|
sconto: z.number().optional(),
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
/** Represents the enum public.PaymentStatusEnum */
|
/** Represents the enum public.PaymentStatusEnum */
|
||||||
enum PaymentStatusEnum {
|
type PaymentStatusEnum =
|
||||||
processing = 'processing',
|
| 'processing'
|
||||||
success = 'success',
|
| 'success'
|
||||||
failed = 'failed',
|
| 'failed';
|
||||||
};
|
|
||||||
|
|
||||||
export default PaymentStatusEnum;
|
export default PaymentStatusEnum;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ export const NewPotenzialiSchema = z.object({
|
||||||
id: potenzialiId.optional(),
|
id: potenzialiId.optional(),
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
descrizione: z.string().optional().nullable(),
|
descrizione: z.string().optional().nullable(),
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
userid: usersId.optional().nullable(),
|
userid: usersId.optional().nullable(),
|
||||||
potenziali_group_id: potenzialiGroupsId,
|
potenziali_group_id: potenzialiGroupsId,
|
||||||
});
|
});
|
||||||
|
|
@ -51,7 +51,7 @@ export const PotenzialiUpdateSchema = z.object({
|
||||||
id: potenzialiId.optional(),
|
id: potenzialiId.optional(),
|
||||||
name: z.string().optional(),
|
name: z.string().optional(),
|
||||||
descrizione: z.string().optional().nullable(),
|
descrizione: z.string().optional().nullable(),
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
userid: usersId.optional().nullable(),
|
userid: usersId.optional().nullable(),
|
||||||
potenziali_group_id: potenzialiGroupsId.optional(),
|
potenziali_group_id: potenzialiGroupsId.optional(),
|
||||||
});
|
});
|
||||||
|
|
@ -24,12 +24,12 @@ export const RatelimiterSchema = z.object({
|
||||||
|
|
||||||
export const NewRatelimiterSchema = z.object({
|
export const NewRatelimiterSchema = z.object({
|
||||||
key: z.string(),
|
key: z.string(),
|
||||||
request_timestamp: z.date(),
|
request_timestamp: z.union([z.date(), z.string()]).pipe(z.coerce.date()),
|
||||||
request_count: z.number(),
|
request_count: z.number(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const RatelimiterUpdateSchema = z.object({
|
export const RatelimiterUpdateSchema = z.object({
|
||||||
key: z.string().optional(),
|
key: z.string().optional(),
|
||||||
request_timestamp: z.date().optional(),
|
request_timestamp: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
request_count: z.number().optional(),
|
request_count: z.number().optional(),
|
||||||
});
|
});
|
||||||
|
|
@ -41,16 +41,16 @@ export const NewRinnoviSchema = z.object({
|
||||||
id: rinnoviId.optional(),
|
id: rinnoviId.optional(),
|
||||||
userId: usersId,
|
userId: usersId,
|
||||||
codice: z.string(),
|
codice: z.string(),
|
||||||
decorrenza: z.date(),
|
decorrenza: z.union([z.date(), z.string()]).pipe(z.coerce.date()),
|
||||||
gestionale_id: z.string().optional().nullable(),
|
gestionale_id: z.string().optional().nullable(),
|
||||||
scadenza: z.date(),
|
scadenza: z.union([z.date(), z.string()]).pipe(z.coerce.date()),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const RinnoviUpdateSchema = z.object({
|
export const RinnoviUpdateSchema = z.object({
|
||||||
id: rinnoviId.optional(),
|
id: rinnoviId.optional(),
|
||||||
userId: usersId.optional(),
|
userId: usersId.optional(),
|
||||||
codice: z.string().optional(),
|
codice: z.string().optional(),
|
||||||
decorrenza: z.date().optional(),
|
decorrenza: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
gestionale_id: z.string().optional().nullable(),
|
gestionale_id: z.string().optional().nullable(),
|
||||||
scadenza: z.date().optional(),
|
scadenza: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
});
|
});
|
||||||
|
|
@ -120,7 +120,7 @@ export const ServizioSchema = z.object({
|
||||||
export const NewServizioSchema = z.object({
|
export const NewServizioSchema = z.object({
|
||||||
servizio_id: servizioServizioId.optional(),
|
servizio_id: servizioServizioId.optional(),
|
||||||
user_id: usersId,
|
user_id: usersId,
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
tipologia: tipologiaPosizioneEnum,
|
tipologia: tipologiaPosizioneEnum,
|
||||||
arredato: z.boolean().optional(),
|
arredato: z.boolean().optional(),
|
||||||
budget: z.number(),
|
budget: z.number(),
|
||||||
|
|
@ -135,7 +135,7 @@ export const NewServizioSchema = z.object({
|
||||||
pianoterra: z.boolean().optional(),
|
pianoterra: z.boolean().optional(),
|
||||||
motivazione_transitorio: z.string().optional().nullable(),
|
motivazione_transitorio: z.string().optional().nullable(),
|
||||||
reddito: z.string().optional().nullable(),
|
reddito: z.string().optional().nullable(),
|
||||||
decorrenza: z.date().optional().nullable(),
|
decorrenza: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
isInterrotto: z.boolean().optional(),
|
isInterrotto: z.boolean().optional(),
|
||||||
entromese: z.number().optional().nullable(),
|
entromese: z.number().optional().nullable(),
|
||||||
permanenza: z.number().optional().nullable(),
|
permanenza: z.number().optional().nullable(),
|
||||||
|
|
@ -143,7 +143,7 @@ export const NewServizioSchema = z.object({
|
||||||
isOkSaldo: z.boolean().optional(),
|
isOkSaldo: z.boolean().optional(),
|
||||||
isOkConsulenza: z.boolean().optional(),
|
isOkConsulenza: z.boolean().optional(),
|
||||||
doc_motivazione_ref: usersStorageUserStorageId.optional().nullable(),
|
doc_motivazione_ref: usersStorageUserStorageId.optional().nullable(),
|
||||||
scadenza_motivazione_transitoria: z.date().optional().nullable(),
|
scadenza_motivazione_transitoria: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
skipPayment: z.boolean().optional(),
|
skipPayment: z.boolean().optional(),
|
||||||
skipControlloDoc: z.boolean().optional(),
|
skipControlloDoc: z.boolean().optional(),
|
||||||
skipDocMotivazione: z.boolean().optional(),
|
skipDocMotivazione: z.boolean().optional(),
|
||||||
|
|
@ -155,7 +155,7 @@ export const NewServizioSchema = z.object({
|
||||||
export const ServizioUpdateSchema = z.object({
|
export const ServizioUpdateSchema = z.object({
|
||||||
servizio_id: servizioServizioId.optional(),
|
servizio_id: servizioServizioId.optional(),
|
||||||
user_id: usersId.optional(),
|
user_id: usersId.optional(),
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
tipologia: tipologiaPosizioneEnum.optional(),
|
tipologia: tipologiaPosizioneEnum.optional(),
|
||||||
arredato: z.boolean().optional(),
|
arredato: z.boolean().optional(),
|
||||||
budget: z.number().optional(),
|
budget: z.number().optional(),
|
||||||
|
|
@ -170,7 +170,7 @@ export const ServizioUpdateSchema = z.object({
|
||||||
pianoterra: z.boolean().optional(),
|
pianoterra: z.boolean().optional(),
|
||||||
motivazione_transitorio: z.string().optional().nullable(),
|
motivazione_transitorio: z.string().optional().nullable(),
|
||||||
reddito: z.string().optional().nullable(),
|
reddito: z.string().optional().nullable(),
|
||||||
decorrenza: z.date().optional().nullable(),
|
decorrenza: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
isInterrotto: z.boolean().optional(),
|
isInterrotto: z.boolean().optional(),
|
||||||
entromese: z.number().optional().nullable(),
|
entromese: z.number().optional().nullable(),
|
||||||
permanenza: z.number().optional().nullable(),
|
permanenza: z.number().optional().nullable(),
|
||||||
|
|
@ -178,7 +178,7 @@ export const ServizioUpdateSchema = z.object({
|
||||||
isOkSaldo: z.boolean().optional(),
|
isOkSaldo: z.boolean().optional(),
|
||||||
isOkConsulenza: z.boolean().optional(),
|
isOkConsulenza: z.boolean().optional(),
|
||||||
doc_motivazione_ref: usersStorageUserStorageId.optional().nullable(),
|
doc_motivazione_ref: usersStorageUserStorageId.optional().nullable(),
|
||||||
scadenza_motivazione_transitoria: z.date().optional().nullable(),
|
scadenza_motivazione_transitoria: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
skipPayment: z.boolean().optional(),
|
skipPayment: z.boolean().optional(),
|
||||||
skipControlloDoc: z.boolean().optional(),
|
skipControlloDoc: z.boolean().optional(),
|
||||||
skipDocMotivazione: z.boolean().optional(),
|
skipDocMotivazione: z.boolean().optional(),
|
||||||
|
|
|
||||||
|
|
@ -70,12 +70,12 @@ export const NewServizioAnnunciSchema = z.object({
|
||||||
servizio_annunci_id: servizioAnnunciServizioAnnunciId.optional(),
|
servizio_annunci_id: servizioAnnunciServizioAnnunciId.optional(),
|
||||||
servizio_id: servizioServizioId,
|
servizio_id: servizioServizioId,
|
||||||
annunci_id: annunciId,
|
annunci_id: annunciId,
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
open_contatti_at: z.date().optional().nullable(),
|
open_contatti_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
doc_contratto_ref: z.string().optional().nullable(),
|
doc_contratto_ref: z.string().optional().nullable(),
|
||||||
gestionale_id: z.number().optional().nullable(),
|
gestionale_id: z.number().optional().nullable(),
|
||||||
contratto_decorrenza: z.date().optional().nullable(),
|
contratto_decorrenza: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
contratto_scadenza: z.date().optional().nullable(),
|
contratto_scadenza: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
contratto_tipo: z.string().optional().nullable(),
|
contratto_tipo: z.string().optional().nullable(),
|
||||||
doc_registrazione_ref: z.string().optional().nullable(),
|
doc_registrazione_ref: z.string().optional().nullable(),
|
||||||
doc_contratto_added: z.boolean().optional(),
|
doc_contratto_added: z.boolean().optional(),
|
||||||
|
|
@ -88,12 +88,12 @@ export const ServizioAnnunciUpdateSchema = z.object({
|
||||||
servizio_annunci_id: servizioAnnunciServizioAnnunciId.optional(),
|
servizio_annunci_id: servizioAnnunciServizioAnnunciId.optional(),
|
||||||
servizio_id: servizioServizioId.optional(),
|
servizio_id: servizioServizioId.optional(),
|
||||||
annunci_id: annunciId.optional(),
|
annunci_id: annunciId.optional(),
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
open_contatti_at: z.date().optional().nullable(),
|
open_contatti_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
doc_contratto_ref: z.string().optional().nullable(),
|
doc_contratto_ref: z.string().optional().nullable(),
|
||||||
gestionale_id: z.number().optional().nullable(),
|
gestionale_id: z.number().optional().nullable(),
|
||||||
contratto_decorrenza: z.date().optional().nullable(),
|
contratto_decorrenza: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
contratto_scadenza: z.date().optional().nullable(),
|
contratto_scadenza: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
contratto_tipo: z.string().optional().nullable(),
|
contratto_tipo: z.string().optional().nullable(),
|
||||||
doc_registrazione_ref: z.string().optional().nullable(),
|
doc_registrazione_ref: z.string().optional().nullable(),
|
||||||
doc_contratto_added: z.boolean().optional(),
|
doc_contratto_added: z.boolean().optional(),
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
/** Represents the enum public.StatusConfermaEnum */
|
/** Represents the enum public.StatusConfermaEnum */
|
||||||
enum StatusConfermaEnum {
|
type StatusConfermaEnum =
|
||||||
'Inviato conferma' = 'Inviato conferma',
|
| 'Inviato conferma'
|
||||||
'Conferma accettata' = 'Conferma accettata',
|
| 'Conferma accettata'
|
||||||
'Caparra versata' = 'Caparra versata',
|
| 'Caparra versata';
|
||||||
};
|
|
||||||
|
|
||||||
export default StatusConfermaEnum;
|
export default StatusConfermaEnum;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
/** Represents the enum public.TipologiaPosizioneEnum */
|
/** Represents the enum public.TipologiaPosizioneEnum */
|
||||||
enum TipologiaPosizioneEnum {
|
type TipologiaPosizioneEnum =
|
||||||
Transitorio = 'Transitorio',
|
| 'Transitorio'
|
||||||
Stabile = 'Stabile',
|
| 'Stabile';
|
||||||
};
|
|
||||||
|
|
||||||
export default TipologiaPosizioneEnum;
|
export default TipologiaPosizioneEnum;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,14 +37,14 @@ export const NewUserInvitesSchema = z.object({
|
||||||
id: userInvitesId.optional(),
|
id: userInvitesId.optional(),
|
||||||
email: z.string(),
|
email: z.string(),
|
||||||
token: z.string(),
|
token: z.string(),
|
||||||
expires_at: z.date(),
|
expires_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()),
|
||||||
created_at: z.date().optional().nullable(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const UserInvitesUpdateSchema = z.object({
|
export const UserInvitesUpdateSchema = z.object({
|
||||||
id: userInvitesId.optional(),
|
id: userInvitesId.optional(),
|
||||||
email: z.string().optional(),
|
email: z.string().optional(),
|
||||||
token: z.string().optional(),
|
token: z.string().optional(),
|
||||||
expires_at: z.date().optional(),
|
expires_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
created_at: z.date().optional().nullable(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
});
|
});
|
||||||
|
|
@ -87,9 +87,9 @@ export const NewUsersSchema = z.object({
|
||||||
password: z.string(),
|
password: z.string(),
|
||||||
nome: z.string(),
|
nome: z.string(),
|
||||||
cognome: z.string(),
|
cognome: z.string(),
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
reset_password_token: z.string().optional().nullable(),
|
reset_password_token: z.string().optional().nullable(),
|
||||||
reset_password_expires: z.date().optional().nullable(),
|
reset_password_expires: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
telefono: z.string(),
|
telefono: z.string(),
|
||||||
isAdminMade: z.boolean().optional().nullable(),
|
isAdminMade: z.boolean().optional().nullable(),
|
||||||
salt: z.string(),
|
salt: z.string(),
|
||||||
|
|
@ -110,9 +110,9 @@ export const UsersUpdateSchema = z.object({
|
||||||
password: z.string().optional(),
|
password: z.string().optional(),
|
||||||
nome: z.string().optional(),
|
nome: z.string().optional(),
|
||||||
cognome: z.string().optional(),
|
cognome: z.string().optional(),
|
||||||
created_at: z.date().optional(),
|
created_at: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
|
||||||
reset_password_token: z.string().optional().nullable(),
|
reset_password_token: z.string().optional().nullable(),
|
||||||
reset_password_expires: z.date().optional().nullable(),
|
reset_password_expires: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
telefono: z.string().optional(),
|
telefono: z.string().optional(),
|
||||||
isAdminMade: z.boolean().optional().nullable(),
|
isAdminMade: z.boolean().optional().nullable(),
|
||||||
salt: z.string().optional(),
|
salt: z.string().optional(),
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ export const NewUsersAnagraficaSchema = z.object({
|
||||||
idanagrafica: usersAnagraficaIdanagrafica.optional(),
|
idanagrafica: usersAnagraficaIdanagrafica.optional(),
|
||||||
userid: usersId,
|
userid: usersId,
|
||||||
luogo_nascita: z.string().optional().nullable(),
|
luogo_nascita: z.string().optional().nullable(),
|
||||||
data_nascita: z.date().optional().nullable(),
|
data_nascita: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
nazione_nascita: z.string().optional().nullable(),
|
nazione_nascita: z.string().optional().nullable(),
|
||||||
codice_fiscale: z.string().optional().nullable(),
|
codice_fiscale: z.string().optional().nullable(),
|
||||||
via_residenza: z.string().optional().nullable(),
|
via_residenza: z.string().optional().nullable(),
|
||||||
|
|
@ -87,7 +87,7 @@ export const UsersAnagraficaUpdateSchema = z.object({
|
||||||
idanagrafica: usersAnagraficaIdanagrafica.optional(),
|
idanagrafica: usersAnagraficaIdanagrafica.optional(),
|
||||||
userid: usersId.optional(),
|
userid: usersId.optional(),
|
||||||
luogo_nascita: z.string().optional().nullable(),
|
luogo_nascita: z.string().optional().nullable(),
|
||||||
data_nascita: z.date().optional().nullable(),
|
data_nascita: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional().nullable(),
|
||||||
nazione_nascita: z.string().optional().nullable(),
|
nazione_nascita: z.string().optional().nullable(),
|
||||||
codice_fiscale: z.string().optional().nullable(),
|
codice_fiscale: z.string().optional().nullable(),
|
||||||
via_residenza: z.string().optional().nullable(),
|
via_residenza: z.string().optional().nullable(),
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
import type { AnnunciUpdate } from "~/schemas/public/Annunci";
|
import { AnnunciUpdateSchema, annunciId } from "~/schemas/public/Annunci";
|
||||||
|
import { servizioServizioId } from "~/schemas/public/Servizio";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
apiProcedure,
|
apiProcedure,
|
||||||
|
|
@ -30,13 +31,10 @@ import {
|
||||||
} from "~/server/services/cache.service";
|
} from "~/server/services/cache.service";
|
||||||
import { NewMail } from "~/server/services/mailer";
|
import { NewMail } from "~/server/services/mailer";
|
||||||
import { TypstGenerate } from "~/server/services/typst.service";
|
import { TypstGenerate } from "~/server/services/typst.service";
|
||||||
import { zAnnuncioId, zServizioId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const annunciRouter = createTRPCRouter({
|
export const annunciRouter = createTRPCRouter({
|
||||||
editAnnuncio: adminProcedure
|
editAnnuncio: adminProcedure
|
||||||
.input(
|
.input(z.object({ annuncioId: annunciId, data: AnnunciUpdateSchema }))
|
||||||
z.object({ annuncioId: zAnnuncioId, data: z.custom<AnnunciUpdate>() }),
|
|
||||||
)
|
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
await invalidateCache(
|
await invalidateCache(
|
||||||
`${SCHEDA_ANNUNCIO_CACHE_PREFIX}${input.annuncioId}`,
|
`${SCHEDA_ANNUNCIO_CACHE_PREFIX}${input.annuncioId}`,
|
||||||
|
|
@ -65,7 +63,7 @@ export const annunciRouter = createTRPCRouter({
|
||||||
getAnnuncioFull: adminProcedure
|
getAnnuncioFull: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zAnnuncioId,
|
id: annunciId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -78,7 +76,7 @@ export const annunciRouter = createTRPCRouter({
|
||||||
getAnnuncioById_rawImgUrls: publicProcedure
|
getAnnuncioById_rawImgUrls: publicProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zAnnuncioId,
|
id: annunciId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -87,7 +85,7 @@ export const annunciRouter = createTRPCRouter({
|
||||||
getSchedaAnnuncioData: adminProcedure
|
getSchedaAnnuncioData: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zAnnuncioId,
|
id: annunciId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -96,7 +94,7 @@ export const annunciRouter = createTRPCRouter({
|
||||||
getSchedaAnnuncioPdf: adminProcedure
|
getSchedaAnnuncioPdf: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zAnnuncioId,
|
id: annunciId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -130,7 +128,7 @@ export const annunciRouter = createTRPCRouter({
|
||||||
}),
|
}),
|
||||||
|
|
||||||
getProprietarioData: protectedProcedure
|
getProprietarioData: protectedProcedure
|
||||||
.input(z.object({ annuncioId: zAnnuncioId, servizioId: zServizioId }))
|
.input(z.object({ annuncioId: annunciId, servizioId: servizioServizioId }))
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
return await getProprietarioDataHandler({
|
return await getProprietarioDataHandler({
|
||||||
annuncioId: input.annuncioId,
|
annuncioId: input.annuncioId,
|
||||||
|
|
@ -192,7 +190,7 @@ export const annunciRouter = createTRPCRouter({
|
||||||
getIncrociAnnuncio: protectedProcedure
|
getIncrociAnnuncio: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annuncioId: zAnnuncioId,
|
annuncioId: annunciId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
import { zPassword } from "~/hooks/usePassword";
|
import { zPassword } from "~/hooks/usePassword";
|
||||||
|
import { usersId } from "~/schemas/public/Users";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -20,7 +21,6 @@ import {
|
||||||
pwResetSendLinkHandler,
|
pwResetSendLinkHandler,
|
||||||
resetPasswordFromTokenHandler,
|
resetPasswordFromTokenHandler,
|
||||||
} from "~/server/services/auth.service";
|
} from "~/server/services/auth.service";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
// Create a new ratelimiter, that allows 10 requests per 10 seconds
|
// Create a new ratelimiter, that allows 10 requests per 10 seconds
|
||||||
/*
|
/*
|
||||||
|
|
@ -66,7 +66,7 @@ export const authRouter = createTRPCRouter({
|
||||||
}),
|
}),
|
||||||
|
|
||||||
genPswResetToken: adminProcedure
|
genPswResetToken: adminProcedure
|
||||||
.input(z.object({ id: zUserId }))
|
.input(z.object({ id: usersId }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
return await genPasswordResetToken({ id: input.id });
|
return await genPasswordResetToken({ id: input.id });
|
||||||
}),
|
}),
|
||||||
|
|
@ -97,7 +97,7 @@ export const authRouter = createTRPCRouter({
|
||||||
PasswordOverride: adminProcedure
|
PasswordOverride: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zUserId,
|
id: usersId,
|
||||||
password: z.string(),
|
password: z.string(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -128,7 +128,7 @@ export const authRouter = createTRPCRouter({
|
||||||
swapUser: adminProcedure
|
swapUser: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zUserId,
|
id: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ ctx, input }) => {
|
.mutation(async ({ ctx, input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
|
import { banlistId } from "~/schemas/public/Banlist";
|
||||||
|
import { banType } from "~/schemas/public/BanType";
|
||||||
import { adminProcedure, createTRPCRouter } from "~/server/api/trpc";
|
import { adminProcedure, createTRPCRouter } from "~/server/api/trpc";
|
||||||
import { db } from "~/server/db";
|
import { db } from "~/server/db";
|
||||||
import {
|
import {
|
||||||
|
|
@ -7,13 +9,12 @@ import {
|
||||||
removeBan,
|
removeBan,
|
||||||
updateBan,
|
updateBan,
|
||||||
} from "~/server/services/banlist.service";
|
} from "~/server/services/banlist.service";
|
||||||
import { zBanlistId, zBanType } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const banlistRouter = createTRPCRouter({
|
export const banlistRouter = createTRPCRouter({
|
||||||
addBan: adminProcedure
|
addBan: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
type: zBanType,
|
type: banType,
|
||||||
value: z.string(),
|
value: z.string(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -30,7 +31,7 @@ export const banlistRouter = createTRPCRouter({
|
||||||
removeBan: adminProcedure
|
removeBan: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zBanlistId,
|
id: banlistId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -42,8 +43,8 @@ export const banlistRouter = createTRPCRouter({
|
||||||
updateBan: adminProcedure
|
updateBan: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zBanlistId,
|
id: banlistId,
|
||||||
type: zBanType,
|
type: banType,
|
||||||
value: z.string(),
|
value: z.string(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
import type { BannersIdbanner } from "~/schemas/public/Banners";
|
import {
|
||||||
|
bannersIdbanner,
|
||||||
|
} from "~/schemas/public/Banners";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -24,7 +26,7 @@ export const bannersRouter = createTRPCRouter({
|
||||||
cta_text: z.string().nullable(),
|
cta_text: z.string().nullable(),
|
||||||
has_cta: z.boolean(),
|
has_cta: z.boolean(),
|
||||||
hide_duration: z.number().nullable(),
|
hide_duration: z.number().nullable(),
|
||||||
idbanner: z.custom<BannersIdbanner>(),
|
idbanner: bannersIdbanner,
|
||||||
is_active: z.boolean(),
|
is_active: z.boolean(),
|
||||||
is_unskippable: z.boolean(),
|
is_unskippable: z.boolean(),
|
||||||
show_private: z.boolean(),
|
show_private: z.boolean(),
|
||||||
|
|
@ -40,7 +42,7 @@ export const bannersRouter = createTRPCRouter({
|
||||||
return await getAllBanners({ db });
|
return await getAllBanners({ db });
|
||||||
}),
|
}),
|
||||||
deleteBanner: adminProcedure
|
deleteBanner: adminProcedure
|
||||||
.input(z.object({ idbanner: z.custom<BannersIdbanner>() }))
|
.input(z.object({ idbanner: bannersIdbanner }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
return await deleteBanner({ db, input });
|
return await deleteBanner({ db, input });
|
||||||
}),
|
}),
|
||||||
|
|
@ -53,7 +55,7 @@ export const bannersRouter = createTRPCRouter({
|
||||||
cta_text: z.string().nullable(),
|
cta_text: z.string().nullable(),
|
||||||
has_cta: z.boolean(),
|
has_cta: z.boolean(),
|
||||||
hide_duration: z.number().nullable(),
|
hide_duration: z.number().nullable(),
|
||||||
idbanner: z.custom<BannersIdbanner>(),
|
idbanner: bannersIdbanner,
|
||||||
is_active: z.boolean(),
|
is_active: z.boolean(),
|
||||||
is_unskippable: z.boolean(),
|
is_unskippable: z.boolean(),
|
||||||
show_private: z.boolean(),
|
show_private: z.boolean(),
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
|
import { chatsChatid } from "~/schemas/public/Chats";
|
||||||
|
import { etichetteIdEtichetta } from "~/schemas/public/Etichette";
|
||||||
|
import { messagesMessageid } from "~/schemas/public/Messages";
|
||||||
|
import { usersId } from "~/schemas/public/Users";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -19,16 +23,10 @@ import {
|
||||||
} from "~/server/controllers/etichette.controller";
|
} from "~/server/controllers/etichette.controller";
|
||||||
import { retrieveChatMessageFiles } from "~/server/controllers/storage.controller";
|
import { retrieveChatMessageFiles } from "~/server/controllers/storage.controller";
|
||||||
import { db } from "~/server/db";
|
import { db } from "~/server/db";
|
||||||
import {
|
|
||||||
zChatId,
|
|
||||||
zEtichettaId,
|
|
||||||
zMessageId,
|
|
||||||
zUserId,
|
|
||||||
} from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const chatRouter = createTRPCRouter({
|
export const chatRouter = createTRPCRouter({
|
||||||
addEtichettaToChat: protectedProcedure
|
addEtichettaToChat: protectedProcedure
|
||||||
.input(z.object({ chatId: zChatId, etichettaId: zEtichettaId }))
|
.input(z.object({ chatId: chatsChatid, etichettaId: etichetteIdEtichetta }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
return await addChatEtichette({
|
return await addChatEtichette({
|
||||||
chatid: input.chatId,
|
chatid: input.chatId,
|
||||||
|
|
@ -39,7 +37,7 @@ export const chatRouter = createTRPCRouter({
|
||||||
deleteChat: adminProcedure
|
deleteChat: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
chatId: zChatId,
|
chatId: chatsChatid,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -50,7 +48,7 @@ export const chatRouter = createTRPCRouter({
|
||||||
return await getActiveInfos();
|
return await getActiveInfos();
|
||||||
}),
|
}),
|
||||||
getChatEtichette: protectedProcedure
|
getChatEtichette: protectedProcedure
|
||||||
.input(z.object({ chatId: zChatId }))
|
.input(z.object({ chatId: chatsChatid }))
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
return await getChatEtichette({
|
return await getChatEtichette({
|
||||||
chatid: input.chatId,
|
chatid: input.chatId,
|
||||||
|
|
@ -58,7 +56,7 @@ export const chatRouter = createTRPCRouter({
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
getChatIdByUser: adminProcedure
|
getChatIdByUser: adminProcedure
|
||||||
.input(z.object({ userId: zUserId }))
|
.input(z.object({ userId: usersId }))
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
return await getChatByUserIdHandler({ userId: input.userId });
|
return await getChatByUserIdHandler({ userId: input.userId });
|
||||||
}),
|
}),
|
||||||
|
|
@ -66,7 +64,7 @@ export const chatRouter = createTRPCRouter({
|
||||||
getChatInfobyId: protectedProcedure
|
getChatInfobyId: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
chatId: zChatId,
|
chatId: chatsChatid,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -81,14 +79,14 @@ export const chatRouter = createTRPCRouter({
|
||||||
getUserInfosByChat: protectedProcedure
|
getUserInfosByChat: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
chatId: zChatId,
|
chatId: chatsChatid,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
return await getUserByChatHandler({ chatId: input.chatId });
|
return await getUserByChatHandler({ chatId: input.chatId });
|
||||||
}),
|
}),
|
||||||
removeEtichettaFromChat: protectedProcedure
|
removeEtichettaFromChat: protectedProcedure
|
||||||
.input(z.object({ chatId: zChatId, etichettaId: zEtichettaId }))
|
.input(z.object({ chatId: chatsChatid, etichettaId: etichetteIdEtichetta }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
return await removeChatEtichette({
|
return await removeChatEtichette({
|
||||||
chatid: input.chatId,
|
chatid: input.chatId,
|
||||||
|
|
@ -97,7 +95,7 @@ export const chatRouter = createTRPCRouter({
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
getMessageAttachments: protectedProcedure
|
getMessageAttachments: protectedProcedure
|
||||||
.input(z.object({ messageId: zMessageId }))
|
.input(z.object({ messageId: messagesMessageid }))
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
return await retrieveChatMessageFiles({ messageId: input.messageId });
|
return await retrieveChatMessageFiles({ messageId: input.messageId });
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,13 @@ import { TRPCError, tracked } from "@trpc/server";
|
||||||
import { sql } from "kysely";
|
import { sql } from "kysely";
|
||||||
import { jsonObjectFrom } from "kysely/helpers/postgres";
|
import { jsonObjectFrom } from "kysely/helpers/postgres";
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
import type { MessagesMessageid } from "~/schemas/public/Messages";
|
import { chatsChatid } from "~/schemas/public/Chats";
|
||||||
|
import {
|
||||||
|
type MessagesMessageid,
|
||||||
|
messagesMessageid,
|
||||||
|
} from "~/schemas/public/Messages";
|
||||||
|
import { usersId } from "~/schemas/public/Users";
|
||||||
|
import { usersStorageUserStorageId } from "~/schemas/public/UsersStorage";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -22,11 +28,7 @@ import {
|
||||||
MessageUpdateEventSchema,
|
MessageUpdateEventSchema,
|
||||||
SidebarUpdateSchema,
|
SidebarUpdateSchema,
|
||||||
TypingDataSchema,
|
TypingDataSchema,
|
||||||
zChatId,
|
} from "~/server/utils/zod_chat_types";
|
||||||
zMessageId,
|
|
||||||
zUserId,
|
|
||||||
zUserStorageId,
|
|
||||||
} from "~/server/utils/zod_types";
|
|
||||||
import { getKeydbClient, getSubClient } from "~/utils/keydb";
|
import { getKeydbClient, getSubClient } from "~/utils/keydb";
|
||||||
import { withUserColorStr } from "~/utils/kysely-helper";
|
import { withUserColorStr } from "~/utils/kysely-helper";
|
||||||
|
|
||||||
|
|
@ -43,7 +45,7 @@ export type TypingData = z.infer<typeof TypingDataSchema>;
|
||||||
|
|
||||||
export const chatSSERouter = createTRPCRouter({
|
export const chatSSERouter = createTRPCRouter({
|
||||||
createChat: protectedProcedure
|
createChat: protectedProcedure
|
||||||
.input(z.object({ userId: zUserId }))
|
.input(z.object({ userId: usersId }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
const newChat = await add({
|
const newChat = await add({
|
||||||
db,
|
db,
|
||||||
|
|
@ -56,16 +58,16 @@ export const chatSSERouter = createTRPCRouter({
|
||||||
getChat: protectedProcedure
|
getChat: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
chatId: zChatId,
|
chatId: chatsChatid,
|
||||||
cursor: zMessageId.nullish(),
|
cursor: messagesMessageid.nullish(),
|
||||||
take: z.number().min(1).max(50).nullish(),
|
take: z.number().min(1).max(50).nullish(),
|
||||||
targetMsgId: zMessageId.nullish(),
|
targetMsgId: messagesMessageid.nullish(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.output(
|
.output(
|
||||||
z.object({
|
z.object({
|
||||||
items: z.array(MessageDataSchema),
|
items: z.array(MessageDataSchema),
|
||||||
nextCursor: zMessageId.nullable(),
|
nextCursor: messagesMessageid.nullable(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input, ctx }) => {
|
.query(async ({ input, ctx }) => {
|
||||||
|
|
@ -248,14 +250,14 @@ export const chatSSERouter = createTRPCRouter({
|
||||||
sendMessage: protectedProcedure
|
sendMessage: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
chatId: zChatId,
|
chatId: chatsChatid,
|
||||||
message: z.string(),
|
message: z.string(),
|
||||||
sender: zUserId,
|
sender: usersId,
|
||||||
is_forwarded: z.boolean().default(false),
|
is_forwarded: z.boolean().default(false),
|
||||||
reply_to_id: zMessageId.nullable().default(null),
|
reply_to_id: messagesMessageid.nullable().default(null),
|
||||||
attachments: z
|
attachments: z
|
||||||
.object({
|
.object({
|
||||||
userStorageId: zUserStorageId,
|
userStorageId: usersStorageUserStorageId,
|
||||||
storageId: z.string(),
|
storageId: z.string(),
|
||||||
})
|
})
|
||||||
.array()
|
.array()
|
||||||
|
|
@ -364,7 +366,7 @@ export const chatSSERouter = createTRPCRouter({
|
||||||
return payload;
|
return payload;
|
||||||
}),
|
}),
|
||||||
deleteMessage: adminProcedure
|
deleteMessage: adminProcedure
|
||||||
.input(z.object({ chatId: zChatId, messageId: zMessageId }))
|
.input(z.object({ chatId: chatsChatid, messageId: messagesMessageid }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
try {
|
try {
|
||||||
await db
|
await db
|
||||||
|
|
@ -390,7 +392,11 @@ export const chatSSERouter = createTRPCRouter({
|
||||||
|
|
||||||
editMessage: adminProcedure
|
editMessage: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({ chatId: zChatId, message: z.string(), messageId: zMessageId }),
|
z.object({
|
||||||
|
chatId: chatsChatid,
|
||||||
|
message: z.string(),
|
||||||
|
messageId: messagesMessageid,
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
try {
|
try {
|
||||||
|
|
@ -419,7 +425,7 @@ export const chatSSERouter = createTRPCRouter({
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
onMessageUpdates: publicProcedure
|
onMessageUpdates: publicProcedure
|
||||||
.input(z.object({ chatId: zChatId.nullable() }))
|
.input(z.object({ chatId: chatsChatid.nullable() }))
|
||||||
.output(
|
.output(
|
||||||
zAsyncIterable({
|
zAsyncIterable({
|
||||||
yield: MessageUpdateEventSchema,
|
yield: MessageUpdateEventSchema,
|
||||||
|
|
@ -488,9 +494,9 @@ export const chatSSERouter = createTRPCRouter({
|
||||||
toggleTyping: publicProcedure
|
toggleTyping: publicProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
chatId: zChatId,
|
chatId: chatsChatid,
|
||||||
isTyping: z.boolean(),
|
isTyping: z.boolean(),
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
username: z.string(),
|
username: z.string(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -525,7 +531,7 @@ export const chatSSERouter = createTRPCRouter({
|
||||||
onMessage: publicProcedure
|
onMessage: publicProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
chatId: zChatId.nullable(),
|
chatId: chatsChatid.nullable(),
|
||||||
lastEventId: z.string().nullish(),
|
lastEventId: z.string().nullish(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -551,7 +557,7 @@ export const chatSSERouter = createTRPCRouter({
|
||||||
(() => {
|
(() => {
|
||||||
if (!input.lastEventId) return null;
|
if (!input.lastEventId) return null;
|
||||||
|
|
||||||
const parsed = zMessageId.safeParse(input.lastEventId);
|
const parsed = messagesMessageid.safeParse(input.lastEventId);
|
||||||
if (!parsed.success) {
|
if (!parsed.success) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
@ -651,9 +657,9 @@ export const chatSSERouter = createTRPCRouter({
|
||||||
onTyping: publicProcedure
|
onTyping: publicProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
chatId: zChatId.nullable(),
|
chatId: chatsChatid.nullable(),
|
||||||
username: z.string(),
|
username: z.string(),
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.output(
|
.output(
|
||||||
|
|
@ -714,7 +720,7 @@ export const chatSSERouter = createTRPCRouter({
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
setRead: protectedProcedure
|
setRead: protectedProcedure
|
||||||
.input(z.object({ chatId: zChatId }))
|
.input(z.object({ chatId: chatsChatid }))
|
||||||
.mutation(async ({ input, ctx }) => {
|
.mutation(async ({ input, ctx }) => {
|
||||||
const didUpdate = await setReadMessage({
|
const didUpdate = await setReadMessage({
|
||||||
chatId: input.chatId,
|
chatId: input.chatId,
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,14 @@
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import { format } from "date-fns";
|
import { format } from "date-fns";
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
import type { EmailsIdEmail } from "~/schemas/public/Emails";
|
import { emailsIdEmail } from "~/schemas/public/Emails";
|
||||||
import type { EventQueueUpdate } from "~/schemas/public/EventQueue";
|
import {
|
||||||
|
EventQueueUpdateSchema,
|
||||||
|
eventQueueEventId,
|
||||||
|
} from "~/schemas/public/EventQueue";
|
||||||
|
import { ordiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
import type { TestiEStringheStingaId } from "~/schemas/public/TestiEStringhe";
|
import type { TestiEStringheStingaId } from "~/schemas/public/TestiEStringhe";
|
||||||
|
import { usersId } from "~/schemas/public/Users";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -27,11 +32,10 @@ import {
|
||||||
import type { MailsTemplates } from "~/server/services/mail-templates";
|
import type { MailsTemplates } from "~/server/services/mail-templates";
|
||||||
import { NewMail } from "~/server/services/mailer";
|
import { NewMail } from "~/server/services/mailer";
|
||||||
import { CONDIZIONI_DEFAULT } from "~/server/services/prezziario.service";
|
import { CONDIZIONI_DEFAULT } from "~/server/services/prezziario.service";
|
||||||
import { zEventId, zOrdineId, zUserId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const comunicazioniRouter = createTRPCRouter({
|
export const comunicazioniRouter = createTRPCRouter({
|
||||||
getEmails: protectedProcedure
|
getEmails: protectedProcedure
|
||||||
.input(z.object({ userId: zUserId }))
|
.input(z.object({ userId: usersId }))
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
return await getEmails({
|
return await getEmails({
|
||||||
userId: input.userId,
|
userId: input.userId,
|
||||||
|
|
@ -40,7 +44,7 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
deleteEmail: adminProcedure
|
deleteEmail: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id_email: z.custom<EmailsIdEmail>(),
|
id_email: emailsIdEmail,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -49,7 +53,7 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
deleteAllUserEmails: adminProcedure
|
deleteAllUserEmails: adminProcedure
|
||||||
.input(z.object({ userId: zUserId }))
|
.input(z.object({ userId: usersId }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
return await deleteAllUserEmails({
|
return await deleteAllUserEmails({
|
||||||
userId: input.userId,
|
userId: input.userId,
|
||||||
|
|
@ -103,7 +107,7 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
sendRicevutaECondizioniEmail: adminProcedure
|
sendRicevutaECondizioniEmail: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
ordineId: zOrdineId,
|
ordineId: ordiniOrdineId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -212,7 +216,7 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
getUserQueuedEmails: protectedProcedure
|
getUserQueuedEmails: protectedProcedure
|
||||||
.input(z.object({ userId: zUserId }))
|
.input(z.object({ userId: usersId }))
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
return await userEmailQueue(input.userId);
|
return await userEmailQueue(input.userId);
|
||||||
}),
|
}),
|
||||||
|
|
@ -220,7 +224,7 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
lock_expires: z.date(),
|
lock_expires: z.date(),
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
template: z.custom<MailsTemplates>(),
|
template: z.custom<MailsTemplates>(),
|
||||||
subject: z.string(),
|
subject: z.string(),
|
||||||
}),
|
}),
|
||||||
|
|
@ -263,7 +267,7 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
removeFromUserEmailQueue: adminProcedure
|
removeFromUserEmailQueue: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
eventId: zEventId,
|
eventId: eventQueueEventId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -271,15 +275,15 @@ export const comunicazioniRouter = createTRPCRouter({
|
||||||
}),
|
}),
|
||||||
|
|
||||||
clearUserEmailQueue: adminProcedure
|
clearUserEmailQueue: adminProcedure
|
||||||
.input(z.object({ userId: zUserId }))
|
.input(z.object({ userId: usersId }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
return await clearUserEmailQueue(input.userId);
|
return await clearUserEmailQueue(input.userId);
|
||||||
}),
|
}),
|
||||||
updateEvent: adminProcedure
|
updateEvent: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
eventId: zEventId,
|
eventId: eventQueueEventId,
|
||||||
data: z.custom<EventQueueUpdate>(),
|
data: EventQueueUpdateSchema,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
|
import { etichetteIdEtichetta } from "~/schemas/public/Etichette";
|
||||||
|
import { usersId } from "~/schemas/public/Users";
|
||||||
import { adminProcedure, createTRPCRouter } from "~/server/api/trpc";
|
import { adminProcedure, createTRPCRouter } from "~/server/api/trpc";
|
||||||
import {
|
import {
|
||||||
addEtichetta,
|
addEtichetta,
|
||||||
|
|
@ -8,7 +10,6 @@ import {
|
||||||
updateEtichetta,
|
updateEtichetta,
|
||||||
} from "~/server/controllers/etichette.controller";
|
} from "~/server/controllers/etichette.controller";
|
||||||
import { db } from "~/server/db";
|
import { db } from "~/server/db";
|
||||||
import { zEtichettaId, zUserId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const etichetteRouter = createTRPCRouter({
|
export const etichetteRouter = createTRPCRouter({
|
||||||
addEtichetta: adminProcedure
|
addEtichetta: adminProcedure
|
||||||
|
|
@ -29,7 +30,7 @@ export const etichetteRouter = createTRPCRouter({
|
||||||
return await getAllEtichette({ db });
|
return await getAllEtichette({ db });
|
||||||
}),
|
}),
|
||||||
removeEtichetta: adminProcedure
|
removeEtichetta: adminProcedure
|
||||||
.input(z.object({ id_etichetta: zEtichettaId }))
|
.input(z.object({ id_etichetta: etichetteIdEtichetta }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
return await removeEtichetta({
|
return await removeEtichetta({
|
||||||
db,
|
db,
|
||||||
|
|
@ -40,7 +41,7 @@ export const etichetteRouter = createTRPCRouter({
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
color_hex: z.string().max(7),
|
color_hex: z.string().max(7),
|
||||||
id_etichetta: zEtichettaId,
|
id_etichetta: etichetteIdEtichetta,
|
||||||
title: z.string(),
|
title: z.string(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -55,8 +56,8 @@ export const etichetteRouter = createTRPCRouter({
|
||||||
addUserEtichetta: adminProcedure
|
addUserEtichetta: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
etichettaId: zEtichettaId,
|
etichettaId: etichetteIdEtichetta,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -78,8 +79,8 @@ export const etichetteRouter = createTRPCRouter({
|
||||||
removeUserEtichetta: adminProcedure
|
removeUserEtichetta: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
etichettaId: zEtichettaId,
|
etichettaId: etichetteIdEtichetta,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
|
import { usersId } from "~/schemas/public/Users";
|
||||||
|
|
||||||
import { adminProcedure, createTRPCRouter } from "~/server/api/trpc";
|
import { adminProcedure, createTRPCRouter } from "~/server/api/trpc";
|
||||||
import {
|
import {
|
||||||
exportUserToFIC,
|
exportUserToFIC,
|
||||||
getClientFromCF,
|
getClientFromCF,
|
||||||
} from "~/server/controllers/fic.controller";
|
} from "~/server/controllers/fic.controller";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const fattureRouter = createTRPCRouter({
|
export const fattureRouter = createTRPCRouter({
|
||||||
getClientFromCF: adminProcedure
|
getClientFromCF: adminProcedure
|
||||||
|
|
@ -20,7 +20,7 @@ export const fattureRouter = createTRPCRouter({
|
||||||
addToFIC: adminProcedure
|
addToFIC: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
|
import { flagsId } from "~/schemas/public/Flags";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -12,13 +13,12 @@ import {
|
||||||
RemoveFlagHandler,
|
RemoveFlagHandler,
|
||||||
} from "~/server/controllers/flags.controller";
|
} from "~/server/controllers/flags.controller";
|
||||||
import { db } from "~/server/db";
|
import { db } from "~/server/db";
|
||||||
import { zFlagsId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const flagsRouter = createTRPCRouter({
|
export const flagsRouter = createTRPCRouter({
|
||||||
AddFlag: adminProcedure
|
AddFlag: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zFlagsId,
|
id: flagsId,
|
||||||
value: z.boolean(),
|
value: z.boolean(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -28,7 +28,7 @@ export const flagsRouter = createTRPCRouter({
|
||||||
EditFlag: adminProcedure
|
EditFlag: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zFlagsId,
|
id: flagsId,
|
||||||
value: z.boolean(),
|
value: z.boolean(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -49,7 +49,7 @@ export const flagsRouter = createTRPCRouter({
|
||||||
|
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zFlagsId,
|
id: flagsId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import z from "zod/v4";
|
import z from "zod/v4";
|
||||||
import { env } from "~/env";
|
import { env } from "~/env";
|
||||||
|
import { annunciId } from "~/schemas/public/Annunci";
|
||||||
|
import { usersId } from "~/schemas/public/Users";
|
||||||
import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc";
|
import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc";
|
||||||
import { db } from "~/server/db";
|
import { db } from "~/server/db";
|
||||||
import {
|
import {
|
||||||
|
|
@ -12,15 +14,14 @@ import {
|
||||||
} from "~/server/services/interests.service";
|
} from "~/server/services/interests.service";
|
||||||
import { NewMail } from "~/server/services/mailer";
|
import { NewMail } from "~/server/services/mailer";
|
||||||
import { findUser_byId_MINI } from "~/server/services/user.service";
|
import { findUser_byId_MINI } from "~/server/services/user.service";
|
||||||
import { zAnnuncioId, zUserId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const intrestsRouter = createTRPCRouter({
|
export const intrestsRouter = createTRPCRouter({
|
||||||
addIntrest: protectedProcedure
|
addIntrest: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annuncioId: zAnnuncioId,
|
annuncioId: annunciId,
|
||||||
/**Optional */
|
/**Optional */
|
||||||
userId: zUserId.optional(),
|
userId: usersId.optional(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ ctx, input }) => {
|
.mutation(async ({ ctx, input }) => {
|
||||||
|
|
@ -72,7 +73,7 @@ export const intrestsRouter = createTRPCRouter({
|
||||||
getUserInterests: protectedProcedure
|
getUserInterests: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
userId: zUserId.optional(),
|
userId: usersId.optional(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input, ctx }) => {
|
.query(async ({ input, ctx }) => {
|
||||||
|
|
@ -81,7 +82,7 @@ export const intrestsRouter = createTRPCRouter({
|
||||||
getUserInterestsAnnunci: protectedProcedure
|
getUserInterestsAnnunci: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
userId: zUserId.optional(),
|
userId: usersId.optional(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input, ctx }) => {
|
.query(async ({ input, ctx }) => {
|
||||||
|
|
@ -90,8 +91,8 @@ export const intrestsRouter = createTRPCRouter({
|
||||||
hasUserInterest: protectedProcedure
|
hasUserInterest: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annuncioId: zAnnuncioId,
|
annuncioId: annunciId,
|
||||||
userId: zUserId.optional(),
|
userId: usersId.optional(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ ctx, input }) => {
|
.query(async ({ ctx, input }) => {
|
||||||
|
|
@ -103,8 +104,8 @@ export const intrestsRouter = createTRPCRouter({
|
||||||
removeIntrest: protectedProcedure
|
removeIntrest: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annuncioId: zAnnuncioId,
|
annuncioId: annunciId,
|
||||||
userId: zUserId.optional(),
|
userId: usersId.optional(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ ctx, input }) => {
|
.mutation(async ({ ctx, input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { env } from "~/env";
|
import { env } from "~/env";
|
||||||
|
import { usersId } from "~/schemas/public/Users";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -14,14 +15,13 @@ import {
|
||||||
} from "~/server/controllers/invites.controller";
|
} from "~/server/controllers/invites.controller";
|
||||||
import { db } from "~/server/db";
|
import { db } from "~/server/db";
|
||||||
import { findUser_byEmail, getUser } from "~/server/services/user.service";
|
import { findUser_byEmail, getUser } from "~/server/services/user.service";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const inviteRouter = createTRPCRouter({
|
export const inviteRouter = createTRPCRouter({
|
||||||
// Admin sends invite
|
// Admin sends invite
|
||||||
sendInvite: adminProcedure
|
sendInvite: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zUserId,
|
id: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
|
import { ordiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
|
import { rinnoviId } from "~/schemas/public/Rinnovi";
|
||||||
|
import { servizioServizioId } from "~/schemas/public/Servizio";
|
||||||
import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc";
|
import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc";
|
||||||
import {
|
import {
|
||||||
getPagamentoDataForCheckout,
|
getPagamentoDataForCheckout,
|
||||||
|
|
@ -13,7 +16,6 @@ import {
|
||||||
|
|
||||||
import { db } from "~/server/db";
|
import { db } from "~/server/db";
|
||||||
import { TypstGenerate } from "~/server/services/typst.service";
|
import { TypstGenerate } from "~/server/services/typst.service";
|
||||||
import { zOrdineId, zRinnovoId, zServizioId } from "~/server/utils/zod_types";
|
|
||||||
import { zResult } from "~/utils/result";
|
import { zResult } from "~/utils/result";
|
||||||
// Create a new ratelimiter, that allows 10 requests per 10 seconds
|
// Create a new ratelimiter, that allows 10 requests per 10 seconds
|
||||||
/*
|
/*
|
||||||
|
|
@ -45,13 +47,13 @@ export const pagamentiRouter = createTRPCRouter({
|
||||||
preparePayment: protectedProcedure
|
preparePayment: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
type: z.enum(OrderTypeEnum),
|
type: orderTypeEnum,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.output(zResult<PreparedPaymentData, PreparePaymentError>())
|
.output(zResult<PreparedPaymentData, PreparePaymentError>())
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
if (input.type === OrderTypeEnum.Rinnovo) {
|
if (input.type === orderTypeEnum.enum.Rinnovo) {
|
||||||
return {
|
return {
|
||||||
ok: false,
|
ok: false,
|
||||||
error: {
|
error: {
|
||||||
|
|
@ -68,7 +70,7 @@ export const pagamentiRouter = createTRPCRouter({
|
||||||
previewSaldo: protectedProcedure
|
previewSaldo: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -77,24 +79,24 @@ export const pagamentiRouter = createTRPCRouter({
|
||||||
preparePaymentRinnovi: protectedProcedure
|
preparePaymentRinnovi: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
rinnovoId: zRinnovoId,
|
rinnovoId: rinnoviId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.output(zResult<PreparedPaymentData, PreparePaymentError>())
|
.output(zResult<PreparedPaymentData, PreparePaymentError>())
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
return await preparePayment({
|
return await preparePayment({
|
||||||
type: OrderTypeEnum.Rinnovo,
|
type: orderTypeEnum.enum.Rinnovo,
|
||||||
rinnovoId: input.rinnovoId,
|
rinnovoId: input.rinnovoId,
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
|
|
||||||
getPagamentoDataForCheckout: protectedProcedure
|
getPagamentoDataForCheckout: protectedProcedure
|
||||||
.input(z.object({ ordineId: zOrdineId }))
|
.input(z.object({ ordineId: ordiniOrdineId }))
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
return await getPagamentoDataForCheckout(input.ordineId);
|
return await getPagamentoDataForCheckout(input.ordineId);
|
||||||
}),
|
}),
|
||||||
getRicevutaCortesiaPdf: protectedProcedure
|
getRicevutaCortesiaPdf: protectedProcedure
|
||||||
.input(z.object({ ordineId: zOrdineId }))
|
.input(z.object({ ordineId: ordiniOrdineId }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
try {
|
try {
|
||||||
const ricData = await getRicevutaData(input.ordineId);
|
const ricData = await getRicevutaData(input.ordineId);
|
||||||
|
|
@ -111,7 +113,7 @@ export const pagamentiRouter = createTRPCRouter({
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
getRicevutaCortesiaPdfQuery: protectedProcedure
|
getRicevutaCortesiaPdfQuery: protectedProcedure
|
||||||
.input(z.object({ ordineId: zOrdineId }))
|
.input(z.object({ ordineId: ordiniOrdineId }))
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
try {
|
try {
|
||||||
const ricData = await getRicevutaData(input.ordineId);
|
const ricData = await getRicevutaData(input.ordineId);
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
import z from "zod";
|
import z from "zod";
|
||||||
import type {
|
import {
|
||||||
NewPotenziali,
|
NewPotenzialiSchema,
|
||||||
PotenzialiId,
|
PotenzialiUpdateSchema,
|
||||||
PotenzialiUpdate,
|
potenzialiId,
|
||||||
} from "~/schemas/public/Potenziali";
|
} from "~/schemas/public/Potenziali";
|
||||||
import type { PotenzialiGroupsId } from "~/schemas/public/PotenzialiGroups";
|
|
||||||
|
import { potenzialiGroupsId } from "~/schemas/public/PotenzialiGroups";
|
||||||
import { adminProcedure, createTRPCRouter } from "~/server/api/trpc";
|
import { adminProcedure, createTRPCRouter } from "~/server/api/trpc";
|
||||||
import {
|
import {
|
||||||
addPotenziale,
|
addPotenziale,
|
||||||
|
|
@ -18,30 +19,6 @@ import {
|
||||||
updatePotenziali,
|
updatePotenziali,
|
||||||
} from "~/server/services/potenziali.service";
|
} from "~/server/services/potenziali.service";
|
||||||
|
|
||||||
const zPotenzialiId = z.custom<PotenzialiId>(
|
|
||||||
(val) => typeof val === "string" && val.length > 0,
|
|
||||||
{ message: "Invalid PotenzialiId" },
|
|
||||||
);
|
|
||||||
|
|
||||||
const zNewPotenziali = z.custom<NewPotenziali>(
|
|
||||||
(val) => {
|
|
||||||
return typeof val === "object" && val !== null;
|
|
||||||
},
|
|
||||||
{ message: "Invalid NewPotenziali" },
|
|
||||||
);
|
|
||||||
|
|
||||||
const zPotenzialiUpdate = z.custom<PotenzialiUpdate>(
|
|
||||||
(val) => {
|
|
||||||
return typeof val === "object" && val !== null;
|
|
||||||
},
|
|
||||||
{ message: "Invalid PotenzialiUpdate" },
|
|
||||||
);
|
|
||||||
|
|
||||||
const zPotenzialiGroupId = z.custom<PotenzialiGroupsId>(
|
|
||||||
(val) => typeof val === "string" && val.length > 0,
|
|
||||||
{ message: "Invalid PotenzialiGroupsId" },
|
|
||||||
);
|
|
||||||
|
|
||||||
export const potenzialiRouter = createTRPCRouter({
|
export const potenzialiRouter = createTRPCRouter({
|
||||||
getPotenziali: adminProcedure.query(async () => {
|
getPotenziali: adminProcedure.query(async () => {
|
||||||
return await getPotenziali();
|
return await getPotenziali();
|
||||||
|
|
@ -52,7 +29,7 @@ export const potenzialiRouter = createTRPCRouter({
|
||||||
addPotenziale: adminProcedure
|
addPotenziale: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
data: zNewPotenziali,
|
data: NewPotenzialiSchema,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -70,8 +47,8 @@ export const potenzialiRouter = createTRPCRouter({
|
||||||
updatePotenziale: adminProcedure
|
updatePotenziale: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
potenzialiId: zPotenzialiId,
|
potenzialiId: potenzialiId,
|
||||||
data: zPotenzialiUpdate,
|
data: PotenzialiUpdateSchema,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -80,7 +57,7 @@ export const potenzialiRouter = createTRPCRouter({
|
||||||
deletePotenziale: adminProcedure
|
deletePotenziale: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
potenzialiId: zPotenzialiId,
|
potenzialiId: potenzialiId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -100,7 +77,7 @@ export const potenzialiRouter = createTRPCRouter({
|
||||||
deletePotenzialeGroup: adminProcedure
|
deletePotenzialeGroup: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
potenzialiGroupId: zPotenzialiGroupId,
|
potenzialiGroupId: potenzialiGroupsId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
import type {
|
import {
|
||||||
NewPrezziario,
|
NewPrezziarioSchema,
|
||||||
PrezziarioUpdate,
|
PrezziarioUpdateSchema,
|
||||||
|
prezziarioIdprezziario,
|
||||||
} from "~/schemas/public/Prezziario";
|
} from "~/schemas/public/Prezziario";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -18,7 +19,6 @@ import {
|
||||||
getPrezziarioConsulenza,
|
getPrezziarioConsulenza,
|
||||||
updatePrezziario,
|
updatePrezziario,
|
||||||
} from "~/server/services/prezziario.service";
|
} from "~/server/services/prezziario.service";
|
||||||
import { zPrezziarioId } from "~/server/utils/zod_types";
|
|
||||||
// Create a new ratelimiter, that allows 10 requests per 10 seconds
|
// Create a new ratelimiter, that allows 10 requests per 10 seconds
|
||||||
/*
|
/*
|
||||||
const ratelimit = new RateLimiterHandler({
|
const ratelimit = new RateLimiterHandler({
|
||||||
|
|
@ -31,7 +31,7 @@ export const prezziarioRouter = createTRPCRouter({
|
||||||
addPrezziario: adminProcedure
|
addPrezziario: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
data: z.custom<NewPrezziario>(),
|
data: NewPrezziarioSchema,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -43,7 +43,7 @@ export const prezziarioRouter = createTRPCRouter({
|
||||||
getPrezziPerTipologia: publicProcedure
|
getPrezziPerTipologia: publicProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
tipologia: z.custom<TipologiaPosizioneEnum>(),
|
tipologia: tipologiaPosizioneEnum,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -60,11 +60,11 @@ export const prezziarioRouter = createTRPCRouter({
|
||||||
}),
|
}),
|
||||||
stabile: await getPrezziarioByTipologia({
|
stabile: await getPrezziarioByTipologia({
|
||||||
db,
|
db,
|
||||||
tipologia: TipologiaPosizioneEnum.Stabile,
|
tipologia: tipologiaPosizioneEnum.enum.Stabile,
|
||||||
}),
|
}),
|
||||||
transitorio: await getPrezziarioByTipologia({
|
transitorio: await getPrezziarioByTipologia({
|
||||||
db,
|
db,
|
||||||
tipologia: TipologiaPosizioneEnum.Transitorio,
|
tipologia: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
|
|
@ -72,8 +72,8 @@ export const prezziarioRouter = createTRPCRouter({
|
||||||
updatePrezziario: adminProcedure
|
updatePrezziario: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
data: z.custom<PrezziarioUpdate>(),
|
data: PrezziarioUpdateSchema,
|
||||||
idprezziario: zPrezziarioId,
|
idprezziario: prezziarioIdprezziario,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,24 @@
|
||||||
import z from "zod";
|
import z from "zod";
|
||||||
import type { NewOrdini, OrdiniUpdate } from "~/schemas/public/Ordini";
|
import { annunciId } from "~/schemas/public/Annunci";
|
||||||
import type {
|
import {
|
||||||
NewRinnovi,
|
NewOrdiniSchema,
|
||||||
Rinnovi,
|
OrdiniUpdateSchema,
|
||||||
RinnoviUpdate,
|
ordiniOrdineId,
|
||||||
|
} from "~/schemas/public/Ordini";
|
||||||
|
import {
|
||||||
|
NewRinnoviSchema,
|
||||||
|
type Rinnovi,
|
||||||
|
RinnoviUpdateSchema,
|
||||||
|
rinnoviId,
|
||||||
} from "~/schemas/public/Rinnovi";
|
} from "~/schemas/public/Rinnovi";
|
||||||
import type { NewServizio, ServizioUpdate } from "~/schemas/public/Servizio";
|
import {
|
||||||
import type { ServizioAnnunciUpdate } from "~/schemas/public/ServizioAnnunci";
|
NewServizioSchema,
|
||||||
import type { Users } from "~/schemas/public/Users";
|
ServizioUpdateSchema,
|
||||||
import type { UsersAnagraficaUpdate } from "~/schemas/public/UsersAnagrafica";
|
servizioServizioId,
|
||||||
|
} from "~/schemas/public/Servizio";
|
||||||
|
import { ServizioAnnunciUpdateSchema } from "~/schemas/public/ServizioAnnunci";
|
||||||
|
import { type Users, usersId } from "~/schemas/public/Users";
|
||||||
|
import { UsersAnagraficaUpdateSchema } from "~/schemas/public/UsersAnagrafica";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -54,21 +64,14 @@ import {
|
||||||
updateServizio,
|
updateServizio,
|
||||||
updateServizioAnnuncio,
|
updateServizioAnnuncio,
|
||||||
} from "~/server/services/servizio.service";
|
} from "~/server/services/servizio.service";
|
||||||
import {
|
|
||||||
zAnnuncioId,
|
|
||||||
zOrdineId,
|
|
||||||
zRinnovoId,
|
|
||||||
zServizioId,
|
|
||||||
zUserId,
|
|
||||||
} from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const servizioRouter = createTRPCRouter({
|
export const servizioRouter = createTRPCRouter({
|
||||||
AnnuncioServizioTipologiaMatch: protectedProcedure
|
AnnuncioServizioTipologiaMatch: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annuncioId: zAnnuncioId,
|
annuncioId: annunciId,
|
||||||
tipologia: z.string(),
|
tipologia: z.string(),
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -81,7 +84,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
addServizio: adminProcedure
|
addServizio: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
data: z.custom<NewServizio>(),
|
data: NewServizioSchema,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -90,8 +93,8 @@ export const servizioRouter = createTRPCRouter({
|
||||||
addServizioAnnunci: adminProcedure
|
addServizioAnnunci: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annunci: z.array(zAnnuncioId),
|
annunci: annunciId.array(),
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -103,7 +106,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
deleteServizio: adminProcedure
|
deleteServizio: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -113,7 +116,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getAcquistoData: protectedProcedure
|
getAcquistoData: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -125,7 +128,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getServizioData: protectedProcedure
|
getServizioData: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -134,7 +137,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getAnnunciAvailableToAdd: adminProcedure
|
getAnnunciAvailableToAdd: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -144,7 +147,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getCompatibileAnnunci: protectedProcedure
|
getCompatibileAnnunci: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
adminOverride: z.boolean().optional(),
|
adminOverride: z.boolean().optional(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -154,7 +157,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getOrdineById: protectedProcedure
|
getOrdineById: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
ordineId: zOrdineId,
|
ordineId: ordiniOrdineId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -164,7 +167,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getOrdini: protectedProcedure
|
getOrdini: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
userId: zUserId.optional(),
|
userId: usersId.optional(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -174,14 +177,14 @@ export const servizioRouter = createTRPCRouter({
|
||||||
isOnboardAvailable: protectedProcedure
|
isOnboardAvailable: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.output(
|
.output(
|
||||||
z.discriminatedUnion("available", [
|
z.discriminatedUnion("available", [
|
||||||
z.object({
|
z.object({
|
||||||
available: z.literal(true),
|
available: z.literal(true),
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
}),
|
}),
|
||||||
z.object({
|
z.object({
|
||||||
available: z.literal(false),
|
available: z.literal(false),
|
||||||
|
|
@ -204,8 +207,8 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getServizioContratto: protectedProcedure
|
getServizioContratto: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annuncioId: zAnnuncioId,
|
annuncioId: annunciId,
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -219,8 +222,8 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getServizioRegistrazione: protectedProcedure
|
getServizioRegistrazione: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annuncioId: zAnnuncioId,
|
annuncioId: annunciId,
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -235,7 +238,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
interruzioneServizio: protectedProcedure
|
interruzioneServizio: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
isAdmin: z.boolean(),
|
isAdmin: z.boolean(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -246,13 +249,13 @@ export const servizioRouter = createTRPCRouter({
|
||||||
processServizioOnboard: protectedProcedure
|
processServizioOnboard: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
anagrafica: z.custom<UsersAnagraficaUpdate>(),
|
anagrafica: UsersAnagraficaUpdateSchema,
|
||||||
servizio: z.custom<ServizioUpdate>(),
|
servizio: ServizioUpdateSchema,
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
user: z.custom<
|
user: z.custom<
|
||||||
Pick<Users, "nome" | "cognome" | "email" | "telefono" | "username">
|
Pick<Users, "nome" | "cognome" | "email" | "telefono" | "username">
|
||||||
>(),
|
>(),
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -263,7 +266,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
attivazioneSenzaPagamento: protectedProcedure
|
attivazioneSenzaPagamento: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
ordineId: zOrdineId,
|
ordineId: ordiniOrdineId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -272,7 +275,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
AdminAttivaServizio_Ufficio: protectedProcedure
|
AdminAttivaServizio_Ufficio: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -282,8 +285,8 @@ export const servizioRouter = createTRPCRouter({
|
||||||
removeAnnuncioServizio: protectedProcedure
|
removeAnnuncioServizio: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annuncioId: zAnnuncioId,
|
annuncioId: annunciId,
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -292,7 +295,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
removeOrder: adminProcedure
|
removeOrder: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
ordineId: zOrdineId,
|
ordineId: ordiniOrdineId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -302,7 +305,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getPacksSolution: protectedProcedure
|
getPacksSolution: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -311,8 +314,8 @@ export const servizioRouter = createTRPCRouter({
|
||||||
unlockServizioContatti: protectedProcedure
|
unlockServizioContatti: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annuncioId: zAnnuncioId,
|
annuncioId: annunciId,
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -324,7 +327,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
createOrdine: adminProcedure
|
createOrdine: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
data: z.custom<NewOrdini>(),
|
data: NewOrdiniSchema,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -333,8 +336,8 @@ export const servizioRouter = createTRPCRouter({
|
||||||
updateOrder: adminProcedure
|
updateOrder: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
data: z.custom<OrdiniUpdate>(),
|
data: OrdiniUpdateSchema,
|
||||||
ordineId: zOrdineId,
|
ordineId: ordiniOrdineId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -347,8 +350,8 @@ export const servizioRouter = createTRPCRouter({
|
||||||
updateServizio: protectedProcedure
|
updateServizio: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
data: z.custom<ServizioUpdate>(),
|
data: ServizioUpdateSchema,
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -360,9 +363,9 @@ export const servizioRouter = createTRPCRouter({
|
||||||
updateServizioAnnunci: protectedProcedure
|
updateServizioAnnunci: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
annuncioId: zAnnuncioId,
|
annuncioId: annunciId,
|
||||||
data: z.custom<ServizioAnnunciUpdate>(),
|
data: ServizioAnnunciUpdateSchema,
|
||||||
servizioId: zServizioId,
|
servizioId: servizioServizioId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -376,7 +379,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getAllServiziData: protectedProcedure
|
getAllServiziData: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -407,7 +410,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
createRinnovo: adminProcedure
|
createRinnovo: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
data: z.custom<NewRinnovi>(),
|
data: NewRinnoviSchema,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -416,8 +419,8 @@ export const servizioRouter = createTRPCRouter({
|
||||||
updateRinnovo: adminProcedure
|
updateRinnovo: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
data: z.custom<RinnoviUpdate>(),
|
data: RinnoviUpdateSchema,
|
||||||
rinnovoId: zRinnovoId,
|
rinnovoId: rinnoviId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -429,7 +432,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
getRinnovo: protectedProcedure
|
getRinnovo: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
rinnovoId: zRinnovoId,
|
rinnovoId: rinnoviId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -438,7 +441,7 @@ export const servizioRouter = createTRPCRouter({
|
||||||
removeRinnovo: adminProcedure
|
removeRinnovo: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
rinnovoId: zRinnovoId,
|
rinnovoId: rinnoviId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import z from "zod";
|
import z from "zod";
|
||||||
import type { NewUsersStorage } from "~/schemas/public/UsersStorage";
|
import { usersId } from "~/schemas/public/Users";
|
||||||
|
import { NewUsersStorageSchema } from "~/schemas/public/UsersStorage";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -20,7 +21,6 @@ import {
|
||||||
editFile,
|
editFile,
|
||||||
getFileInfo,
|
getFileInfo,
|
||||||
} from "~/server/services/storage.service";
|
} from "~/server/services/storage.service";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const storageRouter = createTRPCRouter({
|
export const storageRouter = createTRPCRouter({
|
||||||
getFileInfos: protectedProcedure
|
getFileInfos: protectedProcedure
|
||||||
|
|
@ -43,7 +43,7 @@ export const storageRouter = createTRPCRouter({
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
deleteUserStorageEntry: protectedProcedure
|
deleteUserStorageEntry: protectedProcedure
|
||||||
.input(z.object({ storageId: z.string(), userId: zUserId }))
|
.input(z.object({ storageId: z.string(), userId: usersId }))
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
return await deleteUserStorageEntry(input);
|
return await deleteUserStorageEntry(input);
|
||||||
}),
|
}),
|
||||||
|
|
@ -56,7 +56,7 @@ export const storageRouter = createTRPCRouter({
|
||||||
return "ok";
|
return "ok";
|
||||||
}),
|
}),
|
||||||
retrieveUserFileData: protectedProcedure
|
retrieveUserFileData: protectedProcedure
|
||||||
.input(z.object({ userId: zUserId }))
|
.input(z.object({ userId: usersId }))
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
return await retrieveUserFiles(input);
|
return await retrieveUserFiles(input);
|
||||||
}),
|
}),
|
||||||
|
|
@ -69,7 +69,7 @@ export const storageRouter = createTRPCRouter({
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
addUserStorageEntry: protectedProcedure
|
addUserStorageEntry: protectedProcedure
|
||||||
.input(z.custom<NewUsersStorage>())
|
.input(NewUsersStorageSchema)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
return await addUserStorage(input);
|
return await addUserStorage(input);
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
|
import { testiEStringheStingaId } from "~/schemas/public/TestiEStringhe";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -13,13 +14,12 @@ import {
|
||||||
newStringa,
|
newStringa,
|
||||||
updateStringhe,
|
updateStringhe,
|
||||||
} from "~/server/services/testi_stringhe.service";
|
} from "~/server/services/testi_stringhe.service";
|
||||||
import { zTestiEStringheStingaId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const stringsRouter = createTRPCRouter({
|
export const stringsRouter = createTRPCRouter({
|
||||||
getStringa: publicProcedure
|
getStringa: publicProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
stringaId: zTestiEStringheStingaId,
|
stringaId: testiEStringheStingaId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -37,7 +37,7 @@ export const stringsRouter = createTRPCRouter({
|
||||||
deleteStringa: adminProcedure
|
deleteStringa: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
stringaId: zTestiEStringheStingaId,
|
stringaId: testiEStringheStingaId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -49,7 +49,7 @@ export const stringsRouter = createTRPCRouter({
|
||||||
newStringa: adminProcedure
|
newStringa: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
stringaId: zTestiEStringheStingaId,
|
stringaId: testiEStringheStingaId,
|
||||||
stringaValue: z.string().nullable(),
|
stringaValue: z.string().nullable(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -64,7 +64,7 @@ export const stringsRouter = createTRPCRouter({
|
||||||
updateStringa: adminProcedure
|
updateStringa: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
stringaId: zTestiEStringheStingaId,
|
stringaId: testiEStringheStingaId,
|
||||||
stringaValue: z.string().nullable(),
|
stringaValue: z.string().nullable(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
|
import { ordiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -10,7 +11,6 @@ import {
|
||||||
whIntentFailedHandler,
|
whIntentFailedHandler,
|
||||||
whIntentSucceededHandler,
|
whIntentSucceededHandler,
|
||||||
} from "~/server/controllers/stripe.controller";
|
} from "~/server/controllers/stripe.controller";
|
||||||
import { zOrdineId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const stripeRouter = createTRPCRouter({
|
export const stripeRouter = createTRPCRouter({
|
||||||
health: adminProcedure.query(async () => {
|
health: adminProcedure.query(async () => {
|
||||||
|
|
@ -20,7 +20,7 @@ export const stripeRouter = createTRPCRouter({
|
||||||
whIntentCreated: protectedApiProcedure
|
whIntentCreated: protectedApiProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
ordineId: zOrdineId,
|
ordineId: ordiniOrdineId,
|
||||||
pIntentId: z.string(),
|
pIntentId: z.string(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
@ -41,7 +41,7 @@ export const stripeRouter = createTRPCRouter({
|
||||||
whIntentSucceeded: protectedApiProcedure
|
whIntentSucceeded: protectedApiProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
ordineId: zOrdineId,
|
ordineId: ordiniOrdineId,
|
||||||
pIntentId: z.string(),
|
pIntentId: z.string(),
|
||||||
pm_id: z.string(),
|
pm_id: z.string(),
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
import type { UsersUpdate } from "~/schemas/public/Users";
|
import { UsersUpdateSchema, usersId } from "~/schemas/public/Users";
|
||||||
import type { UsersAnagraficaUpdate } from "~/schemas/public/UsersAnagrafica";
|
import { UsersAnagraficaUpdateSchema } from "~/schemas/public/UsersAnagrafica";
|
||||||
import {
|
import {
|
||||||
adminProcedure,
|
adminProcedure,
|
||||||
createTRPCRouter,
|
createTRPCRouter,
|
||||||
|
|
@ -18,13 +18,12 @@ import {
|
||||||
} from "~/server/controllers/user.controller";
|
} from "~/server/controllers/user.controller";
|
||||||
import { db } from "~/server/db";
|
import { db } from "~/server/db";
|
||||||
import { getClientProfilo } from "~/server/services/user.service";
|
import { getClientProfilo } from "~/server/services/user.service";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
|
|
||||||
export const usersRouter = createTRPCRouter({
|
export const usersRouter = createTRPCRouter({
|
||||||
getUser: protectedProcedure
|
getUser: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zUserId,
|
id: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -49,7 +48,7 @@ export const usersRouter = createTRPCRouter({
|
||||||
getClientProfilo: protectedProcedure
|
getClientProfilo: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
|
|
@ -61,7 +60,7 @@ export const usersRouter = createTRPCRouter({
|
||||||
blockUser: adminProcedure
|
blockUser: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zUserId,
|
id: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -70,7 +69,7 @@ export const usersRouter = createTRPCRouter({
|
||||||
deleteUser: adminProcedure
|
deleteUser: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zUserId,
|
id: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -79,8 +78,8 @@ export const usersRouter = createTRPCRouter({
|
||||||
editUser: protectedProcedure
|
editUser: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
id: zUserId,
|
id: usersId,
|
||||||
data: z.custom<UsersUpdate>(),
|
data: UsersUpdateSchema,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -89,8 +88,8 @@ export const usersRouter = createTRPCRouter({
|
||||||
editUserAnagrafica: protectedProcedure
|
editUserAnagrafica: protectedProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
data: z.custom<UsersAnagraficaUpdate>(),
|
data: UsersAnagraficaUpdateSchema,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
@ -106,7 +105,7 @@ export const usersRouter = createTRPCRouter({
|
||||||
genIntestazione: adminProcedure
|
genIntestazione: adminProcedure
|
||||||
.input(
|
.input(
|
||||||
z.object({
|
z.object({
|
||||||
userId: zUserId,
|
userId: usersId,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.mutation(async ({ input }) => {
|
.mutation(async ({ input }) => {
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@ import type { CreateNextContextOptions } from "@trpc/server/adapters/next";
|
||||||
import superjson from "superjson";
|
import superjson from "superjson";
|
||||||
import z, { ZodError } from "zod/v4";
|
import z, { ZodError } from "zod/v4";
|
||||||
import { env } from "~/env";
|
import { env } from "~/env";
|
||||||
|
import { usersId } from "~/schemas/public/Users";
|
||||||
import { verifyToken } from "~/server/auth/jwt";
|
import { verifyToken } from "~/server/auth/jwt";
|
||||||
import { zUserId } from "~/server/utils/zod_types";
|
|
||||||
import { TOKEN_CONFIG } from "../auth/configs";
|
import { TOKEN_CONFIG } from "../auth/configs";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -25,7 +25,7 @@ import { TOKEN_CONFIG } from "../auth/configs";
|
||||||
*/
|
*/
|
||||||
export const sessionSchema = z.object({
|
export const sessionSchema = z.object({
|
||||||
email: z.email(),
|
email: z.email(),
|
||||||
id: zUserId,
|
id: usersId,
|
||||||
isAdmin: z.boolean(),
|
isAdmin: z.boolean(),
|
||||||
isBlocked: z.boolean(),
|
isBlocked: z.boolean(),
|
||||||
nome: z.string(),
|
nome: z.string(),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { assert, describe, expect, it } from "vitest";
|
import { assert, describe, expect, it } from "vitest";
|
||||||
import type { PrezziarioIdprezziario } from "~/schemas/public/Prezziario";
|
import type { PrezziarioIdprezziario } from "~/schemas/public/Prezziario";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import type TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import {
|
import {
|
||||||
AccontoSolver,
|
AccontoSolver,
|
||||||
SaldoSolver,
|
SaldoSolver,
|
||||||
|
|
@ -22,7 +23,7 @@ type TestCase = {
|
||||||
const testCases: TestCase[] = [
|
const testCases: TestCase[] = [
|
||||||
{
|
{
|
||||||
input: {
|
input: {
|
||||||
tipologia: TipologiaPosizioneEnum.Transitorio,
|
tipologia: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
permanenza: 0,
|
permanenza: 0,
|
||||||
budget: 500,
|
budget: 500,
|
||||||
},
|
},
|
||||||
|
|
@ -32,7 +33,7 @@ const testCases: TestCase[] = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: {
|
input: {
|
||||||
tipologia: TipologiaPosizioneEnum.Transitorio,
|
tipologia: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
permanenza: 1,
|
permanenza: 1,
|
||||||
budget: 500,
|
budget: 500,
|
||||||
},
|
},
|
||||||
|
|
@ -42,7 +43,7 @@ const testCases: TestCase[] = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: {
|
input: {
|
||||||
tipologia: TipologiaPosizioneEnum.Transitorio,
|
tipologia: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
permanenza: 2,
|
permanenza: 2,
|
||||||
budget: 500,
|
budget: 500,
|
||||||
},
|
},
|
||||||
|
|
@ -52,7 +53,7 @@ const testCases: TestCase[] = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: {
|
input: {
|
||||||
tipologia: TipologiaPosizioneEnum.Transitorio,
|
tipologia: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
permanenza: 3,
|
permanenza: 3,
|
||||||
budget: 500,
|
budget: 500,
|
||||||
},
|
},
|
||||||
|
|
@ -62,7 +63,7 @@ const testCases: TestCase[] = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: {
|
input: {
|
||||||
tipologia: TipologiaPosizioneEnum.Transitorio,
|
tipologia: tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
permanenza: 4,
|
permanenza: 4,
|
||||||
budget: 500,
|
budget: 500,
|
||||||
},
|
},
|
||||||
|
|
@ -73,7 +74,7 @@ const testCases: TestCase[] = [
|
||||||
|
|
||||||
{
|
{
|
||||||
input: {
|
input: {
|
||||||
tipologia: TipologiaPosizioneEnum.Stabile,
|
tipologia: tipologiaPosizioneEnum.enum.Stabile,
|
||||||
permanenza: null,
|
permanenza: null,
|
||||||
budget: 500,
|
budget: 500,
|
||||||
},
|
},
|
||||||
|
|
@ -83,7 +84,7 @@ const testCases: TestCase[] = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: {
|
input: {
|
||||||
tipologia: TipologiaPosizioneEnum.Stabile,
|
tipologia: tipologiaPosizioneEnum.enum.Stabile,
|
||||||
permanenza: null,
|
permanenza: null,
|
||||||
budget: 600,
|
budget: 600,
|
||||||
},
|
},
|
||||||
|
|
@ -93,7 +94,7 @@ const testCases: TestCase[] = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: {
|
input: {
|
||||||
tipologia: TipologiaPosizioneEnum.Stabile,
|
tipologia: tipologiaPosizioneEnum.enum.Stabile,
|
||||||
permanenza: null,
|
permanenza: null,
|
||||||
budget: 800,
|
budget: 800,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@ import { TRPCError } from "@trpc/server";
|
||||||
import { add, format, intervalToDuration } from "date-fns";
|
import { add, format, intervalToDuration } from "date-fns";
|
||||||
import { PaymentMethodToString, type PaymentType } from "~/i18n/stripe";
|
import { PaymentMethodToString, type PaymentType } from "~/i18n/stripe";
|
||||||
import { parseDBComune, parseDBNazione } from "~/lib/catasto";
|
import { parseDBComune, parseDBNazione } from "~/lib/catasto";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import type OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
||||||
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type { OrdiniOrdineId } from "~/schemas/public/Ordini";
|
import type { OrdiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
import type {
|
import type {
|
||||||
Prezziario,
|
Prezziario,
|
||||||
|
|
@ -10,7 +11,8 @@ import type {
|
||||||
} from "~/schemas/public/Prezziario";
|
} from "~/schemas/public/Prezziario";
|
||||||
import type { RinnoviId } from "~/schemas/public/Rinnovi";
|
import type { RinnoviId } from "~/schemas/public/Rinnovi";
|
||||||
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import type TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import { getComuni, getNazioni } from "~/server/controllers/catasto.controller";
|
import { getComuni, getNazioni } from "~/server/controllers/catasto.controller";
|
||||||
import type { RicevutaProps } from "~/server/services/typst.service";
|
import type { RicevutaProps } from "~/server/services/typst.service";
|
||||||
import type { Result } from "~/utils/result";
|
import type { Result } from "~/utils/result";
|
||||||
|
|
@ -31,14 +33,15 @@ export type PreparedPaymentData = {
|
||||||
packDesc: string;
|
packDesc: string;
|
||||||
condizioni: string;
|
condizioni: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
type preparePaymentInput =
|
type preparePaymentInput =
|
||||||
| {
|
| {
|
||||||
servizioId: ServizioServizioId;
|
servizioId: ServizioServizioId;
|
||||||
type: Exclude<OrderTypeEnum, OrderTypeEnum.Rinnovo>;
|
type: Exclude<OrderTypeEnum, "Rinnovo">;
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
rinnovoId: RinnoviId;
|
rinnovoId: RinnoviId;
|
||||||
type: OrderTypeEnum.Rinnovo;
|
type: "Rinnovo";
|
||||||
};
|
};
|
||||||
|
|
||||||
export type PreparePaymentError =
|
export type PreparePaymentError =
|
||||||
|
|
@ -51,10 +54,10 @@ export const preparePayment = async (
|
||||||
): Promise<Result<PreparedPaymentData, PreparePaymentError>> => {
|
): Promise<Result<PreparedPaymentData, PreparePaymentError>> => {
|
||||||
try {
|
try {
|
||||||
switch (props.type) {
|
switch (props.type) {
|
||||||
case OrderTypeEnum.Acconto:
|
case "Acconto":
|
||||||
case OrderTypeEnum.Saldo:
|
case "Saldo":
|
||||||
case OrderTypeEnum.Consulenza:
|
case "Consulenza":
|
||||||
case OrderTypeEnum.Altro: {
|
case "Altro": {
|
||||||
const { servizioId, type } = props;
|
const { servizioId, type } = props;
|
||||||
const servizio = await getServizioById(servizioId);
|
const servizio = await getServizioById(servizioId);
|
||||||
const inactiveOrders = await db
|
const inactiveOrders = await db
|
||||||
|
|
@ -66,7 +69,7 @@ export const preparePayment = async (
|
||||||
.execute();
|
.execute();
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case OrderTypeEnum.Acconto: {
|
case orderTypeEnum.enum.Acconto: {
|
||||||
if (!servizio.isOkAcconto) {
|
if (!servizio.isOkAcconto) {
|
||||||
const acconto = await AccontoSolver(servizio.tipologia);
|
const acconto = await AccontoSolver(servizio.tipologia);
|
||||||
if (!acconto.success) {
|
if (!acconto.success) {
|
||||||
|
|
@ -82,7 +85,7 @@ export const preparePayment = async (
|
||||||
// servizio sta aspettando attivazione acconto
|
// servizio sta aspettando attivazione acconto
|
||||||
|
|
||||||
const preExistingAcconto = inactiveOrders.find(
|
const preExistingAcconto = inactiveOrders.find(
|
||||||
(ordine) => ordine.type === OrderTypeEnum.Acconto,
|
(ordine) => ordine.type === orderTypeEnum.enum.Acconto,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (preExistingAcconto) {
|
if (preExistingAcconto) {
|
||||||
|
|
@ -107,7 +110,7 @@ export const preparePayment = async (
|
||||||
servizio_id: servizioId,
|
servizio_id: servizioId,
|
||||||
amount_cent: acconto.pack.prezzo_cent,
|
amount_cent: acconto.pack.prezzo_cent,
|
||||||
packid: acconto.pack.idprezziario,
|
packid: acconto.pack.idprezziario,
|
||||||
type: OrderTypeEnum.Acconto,
|
type: orderTypeEnum.enum.Acconto,
|
||||||
userid: servizio.user_id,
|
userid: servizio.user_id,
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
|
|
@ -133,7 +136,7 @@ export const preparePayment = async (
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
case OrderTypeEnum.Saldo: {
|
case orderTypeEnum.enum.Saldo: {
|
||||||
if (!servizio.isOkAcconto) {
|
if (!servizio.isOkAcconto) {
|
||||||
return {
|
return {
|
||||||
ok: false,
|
ok: false,
|
||||||
|
|
@ -162,7 +165,7 @@ export const preparePayment = async (
|
||||||
}
|
}
|
||||||
|
|
||||||
const preExistingSaldo = inactiveOrders.find(
|
const preExistingSaldo = inactiveOrders.find(
|
||||||
(ordine) => ordine.type === OrderTypeEnum.Saldo,
|
(ordine) => ordine.type === orderTypeEnum.enum.Saldo,
|
||||||
);
|
);
|
||||||
if (preExistingSaldo) {
|
if (preExistingSaldo) {
|
||||||
// saldo già creato, procedere con questo
|
// saldo già creato, procedere con questo
|
||||||
|
|
@ -185,7 +188,7 @@ export const preparePayment = async (
|
||||||
servizio_id: servizioId,
|
servizio_id: servizioId,
|
||||||
amount_cent: saldo.pack.prezzo_cent,
|
amount_cent: saldo.pack.prezzo_cent,
|
||||||
packid: saldo.pack.idprezziario,
|
packid: saldo.pack.idprezziario,
|
||||||
type: OrderTypeEnum.Saldo,
|
type: orderTypeEnum.enum.Saldo,
|
||||||
userid: servizio.user_id,
|
userid: servizio.user_id,
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
|
|
@ -211,7 +214,7 @@ export const preparePayment = async (
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
case OrderTypeEnum.Consulenza: {
|
case orderTypeEnum.enum.Consulenza: {
|
||||||
if (!servizio.isOkAcconto || !servizio.isOkSaldo) {
|
if (!servizio.isOkAcconto || !servizio.isOkSaldo) {
|
||||||
return {
|
return {
|
||||||
ok: false,
|
ok: false,
|
||||||
|
|
@ -224,7 +227,7 @@ export const preparePayment = async (
|
||||||
}
|
}
|
||||||
if (!servizio.isOkConsulenza) {
|
if (!servizio.isOkConsulenza) {
|
||||||
const existingConsulenza = inactiveOrders.find(
|
const existingConsulenza = inactiveOrders.find(
|
||||||
(ordine) => ordine.type === OrderTypeEnum.Consulenza,
|
(ordine) => ordine.type === orderTypeEnum.enum.Consulenza,
|
||||||
);
|
);
|
||||||
if (existingConsulenza) {
|
if (existingConsulenza) {
|
||||||
// consulenza già creato, procedere con questo
|
// consulenza già creato, procedere con questo
|
||||||
|
|
@ -275,9 +278,9 @@ export const preparePayment = async (
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
case OrderTypeEnum.Altro: {
|
case orderTypeEnum.enum.Altro: {
|
||||||
const existingAltro = inactiveOrders.find(
|
const existingAltro = inactiveOrders.find(
|
||||||
(ordine) => ordine.type === OrderTypeEnum.Altro,
|
(ordine) => ordine.type === orderTypeEnum.enum.Altro,
|
||||||
);
|
);
|
||||||
if (existingAltro) {
|
if (existingAltro) {
|
||||||
// altro già creato, procedere con questo
|
// altro già creato, procedere con questo
|
||||||
|
|
@ -323,14 +326,15 @@ export const preparePayment = async (
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case OrderTypeEnum.Rinnovo: {
|
|
||||||
|
case "Rinnovo": {
|
||||||
const { rinnovoId } = props;
|
const { rinnovoId } = props;
|
||||||
|
|
||||||
const ordiniRinnovo = await db
|
const ordiniRinnovo = await db
|
||||||
.selectFrom("ordini")
|
.selectFrom("ordini")
|
||||||
.selectAll()
|
.selectAll()
|
||||||
.where("rinnovo_id", "=", rinnovoId)
|
.where("rinnovo_id", "=", rinnovoId)
|
||||||
.where("type", "=", OrderTypeEnum.Rinnovo)
|
.where("type", "=", orderTypeEnum.enum.Rinnovo)
|
||||||
.execute();
|
.execute();
|
||||||
|
|
||||||
const alreadyPaid = ordiniRinnovo.some((ordine) => ordine.isActive);
|
const alreadyPaid = ordiniRinnovo.some((ordine) => ordine.isActive);
|
||||||
|
|
@ -397,7 +401,7 @@ export const preparePayment = async (
|
||||||
rinnovo_id: rinnovoId,
|
rinnovo_id: rinnovoId,
|
||||||
amount_cent: pack.pack.prezzo_cent,
|
amount_cent: pack.pack.prezzo_cent,
|
||||||
packid: pack.pack.idprezziario,
|
packid: pack.pack.idprezziario,
|
||||||
type: OrderTypeEnum.Rinnovo,
|
type: orderTypeEnum.enum.Rinnovo,
|
||||||
userid: rinnovo.userId,
|
userid: rinnovo.userId,
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
|
|
@ -480,13 +484,13 @@ export const AccontoSolver = async (
|
||||||
tipologia: TipologiaPosizioneEnum,
|
tipologia: TipologiaPosizioneEnum,
|
||||||
): Promise<GetPackResult | GetPackError> => {
|
): Promise<GetPackResult | GetPackError> => {
|
||||||
switch (tipologia) {
|
switch (tipologia) {
|
||||||
case TipologiaPosizioneEnum.Transitorio: {
|
case tipologiaPosizioneEnum.enum.Transitorio: {
|
||||||
const pack = await db
|
const pack = await db
|
||||||
.selectFrom("prezziario")
|
.selectFrom("prezziario")
|
||||||
.selectAll()
|
.selectAll()
|
||||||
.where("isActive", "=", true)
|
.where("isActive", "=", true)
|
||||||
.where("order_type", "=", OrderTypeEnum.Acconto)
|
.where("order_type", "=", orderTypeEnum.enum.Acconto)
|
||||||
.where("service_type", "=", TipologiaPosizioneEnum.Transitorio)
|
.where("service_type", "=", tipologiaPosizioneEnum.enum.Transitorio)
|
||||||
.limit(1)
|
.limit(1)
|
||||||
.executeTakeFirst();
|
.executeTakeFirst();
|
||||||
|
|
||||||
|
|
@ -499,13 +503,13 @@ export const AccontoSolver = async (
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
case TipologiaPosizioneEnum.Stabile: {
|
case tipologiaPosizioneEnum.enum.Stabile: {
|
||||||
const pack = await db
|
const pack = await db
|
||||||
.selectFrom("prezziario")
|
.selectFrom("prezziario")
|
||||||
.selectAll()
|
.selectAll()
|
||||||
.where("isActive", "=", true)
|
.where("isActive", "=", true)
|
||||||
.where("order_type", "=", OrderTypeEnum.Acconto)
|
.where("order_type", "=", orderTypeEnum.enum.Acconto)
|
||||||
.where("service_type", "=", TipologiaPosizioneEnum.Stabile)
|
.where("service_type", "=", tipologiaPosizioneEnum.enum.Stabile)
|
||||||
.limit(1)
|
.limit(1)
|
||||||
.executeTakeFirst();
|
.executeTakeFirst();
|
||||||
|
|
||||||
|
|
@ -532,7 +536,7 @@ export const SaldoSolver = async ({
|
||||||
budget: number;
|
budget: number;
|
||||||
}): Promise<GetPackResult | GetPackError> => {
|
}): Promise<GetPackResult | GetPackError> => {
|
||||||
switch (tipologia) {
|
switch (tipologia) {
|
||||||
case TipologiaPosizioneEnum.Transitorio: {
|
case tipologiaPosizioneEnum.enum.Transitorio: {
|
||||||
if (permanenza === null) {
|
if (permanenza === null) {
|
||||||
return {
|
return {
|
||||||
success: false,
|
success: false,
|
||||||
|
|
@ -544,8 +548,8 @@ export const SaldoSolver = async ({
|
||||||
.selectFrom("prezziario")
|
.selectFrom("prezziario")
|
||||||
.selectAll()
|
.selectAll()
|
||||||
.where("isActive", "=", true)
|
.where("isActive", "=", true)
|
||||||
.where("order_type", "=", OrderTypeEnum.Saldo)
|
.where("order_type", "=", orderTypeEnum.enum.Saldo)
|
||||||
.where("service_type", "=", TipologiaPosizioneEnum.Transitorio)
|
.where("service_type", "=", tipologiaPosizioneEnum.enum.Transitorio)
|
||||||
.where("service_variant", "=", permanenza)
|
.where("service_variant", "=", permanenza)
|
||||||
.limit(1)
|
.limit(1)
|
||||||
.executeTakeFirst();
|
.executeTakeFirst();
|
||||||
|
|
@ -556,14 +560,14 @@ export const SaldoSolver = async ({
|
||||||
|
|
||||||
return { success: true, pack };
|
return { success: true, pack };
|
||||||
}
|
}
|
||||||
case TipologiaPosizioneEnum.Stabile: {
|
case tipologiaPosizioneEnum.enum.Stabile: {
|
||||||
const budget_step = budget > 700 ? 2 : budget > 500 ? 1 : 0;
|
const budget_step = budget > 700 ? 2 : budget > 500 ? 1 : 0;
|
||||||
const pack = await db
|
const pack = await db
|
||||||
.selectFrom("prezziario")
|
.selectFrom("prezziario")
|
||||||
.selectAll()
|
.selectAll()
|
||||||
.where("isActive", "=", true)
|
.where("isActive", "=", true)
|
||||||
.where("order_type", "=", OrderTypeEnum.Saldo)
|
.where("order_type", "=", orderTypeEnum.enum.Saldo)
|
||||||
.where("service_type", "=", TipologiaPosizioneEnum.Stabile)
|
.where("service_type", "=", tipologiaPosizioneEnum.enum.Stabile)
|
||||||
.where("service_variant", "=", budget_step)
|
.where("service_variant", "=", budget_step)
|
||||||
.limit(1)
|
.limit(1)
|
||||||
.executeTakeFirst();
|
.executeTakeFirst();
|
||||||
|
|
@ -607,8 +611,8 @@ export const RinnovoSolver = async (
|
||||||
.selectFrom("prezziario")
|
.selectFrom("prezziario")
|
||||||
.selectAll()
|
.selectAll()
|
||||||
.where("isActive", "=", true)
|
.where("isActive", "=", true)
|
||||||
.where("order_type", "=", OrderTypeEnum.Rinnovo)
|
.where("order_type", "=", orderTypeEnum.enum.Rinnovo)
|
||||||
.where("service_type", "=", TipologiaPosizioneEnum.Transitorio)
|
.where("service_type", "=", tipologiaPosizioneEnum.enum.Transitorio)
|
||||||
.where("service_variant", "=", rinnovoPermanenzaVariant(permanenza))
|
.where("service_variant", "=", rinnovoPermanenzaVariant(permanenza))
|
||||||
.limit(1)
|
.limit(1)
|
||||||
.executeTakeFirst();
|
.executeTakeFirst();
|
||||||
|
|
@ -713,7 +717,7 @@ export const getRicevutaData = async (
|
||||||
|
|
||||||
let previewSaldo: Prezziario | null = null;
|
let previewSaldo: Prezziario | null = null;
|
||||||
|
|
||||||
if (ordine.type === OrderTypeEnum.Acconto && ordine.servizio_id) {
|
if (ordine.type === orderTypeEnum.enum.Acconto && ordine.servizio_id) {
|
||||||
const servizio = await getServizioById(ordine.servizio_id);
|
const servizio = await getServizioById(ordine.servizio_id);
|
||||||
if (servizio) {
|
if (servizio) {
|
||||||
const saldo = await SaldoSolver({
|
const saldo = await SaldoSolver({
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import { TRPCError } from "@trpc/server";
|
||||||
import { add, format } from "date-fns";
|
import { add, format } from "date-fns";
|
||||||
import { env } from "~/env";
|
import { env } from "~/env";
|
||||||
import stripe from "~/lib/stripe";
|
import stripe from "~/lib/stripe";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type { Ordini, OrdiniOrdineId } from "~/schemas/public/Ordini";
|
import type { Ordini, OrdiniOrdineId } from "~/schemas/public/Ordini";
|
||||||
import PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum";
|
import { paymentStatusEnum } from "~/schemas/public/PaymentStatusEnum";
|
||||||
import type { TestiEStringheStingaId } from "~/schemas/public/TestiEStringhe";
|
import type { TestiEStringheStingaId } from "~/schemas/public/TestiEStringhe";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import { db } from "~/server/db";
|
import { db } from "~/server/db";
|
||||||
import { NewMail } from "~/server/services/mailer";
|
import { NewMail } from "~/server/services/mailer";
|
||||||
import { CONDIZIONI_DEFAULT } from "~/server/services/prezziario.service";
|
import { CONDIZIONI_DEFAULT } from "~/server/services/prezziario.service";
|
||||||
|
|
@ -45,7 +45,7 @@ export const whIntentCreatedHandler = async ({
|
||||||
.updateTable("ordini")
|
.updateTable("ordini")
|
||||||
.set({
|
.set({
|
||||||
intent_id: pIntentId,
|
intent_id: pIntentId,
|
||||||
paymentstatus: PaymentStatusEnum.processing,
|
paymentstatus: paymentStatusEnum.enum.processing,
|
||||||
})
|
})
|
||||||
.where("ordine_id", "=", ordineId)
|
.where("ordine_id", "=", ordineId)
|
||||||
.returning("ordine_id")
|
.returning("ordine_id")
|
||||||
|
|
@ -76,7 +76,7 @@ export const whIntentSucceededHandler = async ({
|
||||||
.set({
|
.set({
|
||||||
paid_at: new Date(),
|
paid_at: new Date(),
|
||||||
paymentmethod: paymentMethod.type,
|
paymentmethod: paymentMethod.type,
|
||||||
paymentstatus: PaymentStatusEnum.success,
|
paymentstatus: paymentStatusEnum.enum.success,
|
||||||
isActive: true,
|
isActive: true,
|
||||||
})
|
})
|
||||||
.where("intent_id", "=", pIntentId)
|
.where("intent_id", "=", pIntentId)
|
||||||
|
|
@ -103,7 +103,7 @@ export const whIntentSucceededHandler = async ({
|
||||||
const lock_expires = add(new Date(), { seconds: 30 }); // Lock for 30 sec
|
const lock_expires = add(new Date(), { seconds: 30 }); // Lock for 30 sec
|
||||||
|
|
||||||
switch (ordine.type) {
|
switch (ordine.type) {
|
||||||
case OrderTypeEnum.Acconto: {
|
case orderTypeEnum.enum.Acconto: {
|
||||||
if (!ordine.servizio_id) {
|
if (!ordine.servizio_id) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`No servizio_id for ordine_id: ${ordine.ordine_id}`,
|
`No servizio_id for ordine_id: ${ordine.ordine_id}`,
|
||||||
|
|
@ -187,7 +187,7 @@ export const whIntentSucceededHandler = async ({
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case OrderTypeEnum.Saldo: {
|
case orderTypeEnum.enum.Saldo: {
|
||||||
if (!ordine.servizio_id) {
|
if (!ordine.servizio_id) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`No servizio_id for ordine_id: ${ordine.ordine_id}`,
|
`No servizio_id for ordine_id: ${ordine.ordine_id}`,
|
||||||
|
|
@ -208,7 +208,7 @@ export const whIntentSucceededHandler = async ({
|
||||||
.where("servizio_id", "=", ordine.servizio_id)
|
.where("servizio_id", "=", ordine.servizio_id)
|
||||||
.set({
|
.set({
|
||||||
isOkConsulenza:
|
isOkConsulenza:
|
||||||
servizio.tipologia === TipologiaPosizioneEnum.Transitorio,
|
servizio.tipologia === tipologiaPosizioneEnum.enum.Transitorio,
|
||||||
isOkSaldo: true,
|
isOkSaldo: true,
|
||||||
})
|
})
|
||||||
.execute();
|
.execute();
|
||||||
|
|
@ -243,7 +243,7 @@ export const whIntentSucceededHandler = async ({
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OrderTypeEnum.Rinnovo: {
|
case orderTypeEnum.enum.Rinnovo: {
|
||||||
// nessuna azione aggiuntiva richiesta
|
// nessuna azione aggiuntiva richiesta
|
||||||
if (utente.comms_enabled) {
|
if (utente.comms_enabled) {
|
||||||
await addEventToQueue({
|
await addEventToQueue({
|
||||||
|
|
@ -276,7 +276,7 @@ export const whIntentSucceededHandler = async ({
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OrderTypeEnum.Consulenza: {
|
case orderTypeEnum.enum.Consulenza: {
|
||||||
if (!ordine.servizio_id) {
|
if (!ordine.servizio_id) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`No servizio_id for ordine_id: ${ordine.ordine_id}`,
|
`No servizio_id for ordine_id: ${ordine.ordine_id}`,
|
||||||
|
|
@ -321,7 +321,7 @@ export const whIntentSucceededHandler = async ({
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OrderTypeEnum.Altro:
|
case orderTypeEnum.enum.Altro:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
await addEventToQueue({
|
await addEventToQueue({
|
||||||
|
|
@ -391,10 +391,10 @@ export const whIntentFailedHandler = async ({
|
||||||
const userId = await db
|
const userId = await db
|
||||||
.updateTable("ordini")
|
.updateTable("ordini")
|
||||||
.set({
|
.set({
|
||||||
paymentstatus: PaymentStatusEnum.failed,
|
paymentstatus: paymentStatusEnum.enum.failed,
|
||||||
})
|
})
|
||||||
.returning("userid")
|
.returning("userid")
|
||||||
.where("paymentstatus", "=", PaymentStatusEnum.processing)
|
.where("paymentstatus", "=", paymentStatusEnum.enum.processing)
|
||||||
.where("intent_id", "=", pIntentId)
|
.where("intent_id", "=", pIntentId)
|
||||||
.execute();
|
.execute();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type {
|
import type {
|
||||||
NewPrezziario,
|
NewPrezziario,
|
||||||
Prezziario,
|
Prezziario,
|
||||||
|
|
@ -7,7 +7,8 @@ import type {
|
||||||
PrezziarioUpdate,
|
PrezziarioUpdate,
|
||||||
} from "~/schemas/public/Prezziario";
|
} from "~/schemas/public/Prezziario";
|
||||||
import type { TestiEStringheStingaId } from "~/schemas/public/TestiEStringhe";
|
import type { TestiEStringheStingaId } from "~/schemas/public/TestiEStringhe";
|
||||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
import type TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
|
import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum";
|
||||||
import { db, type Querier } from "~/server/db";
|
import { db, type Querier } from "~/server/db";
|
||||||
|
|
||||||
export const CONDIZIONI_DEFAULT = "CONDIZIONI_CERCHI" as TestiEStringheStingaId;
|
export const CONDIZIONI_DEFAULT = "CONDIZIONI_CERCHI" as TestiEStringheStingaId;
|
||||||
|
|
@ -132,7 +133,7 @@ export const getPrezziarioByTipologia = async ({
|
||||||
const acconto = await trx
|
const acconto = await trx
|
||||||
.selectFrom("prezziario")
|
.selectFrom("prezziario")
|
||||||
.select(["idprezziario", "prezzo_cent", "nome_it", "nome_en", "sconto"])
|
.select(["idprezziario", "prezzo_cent", "nome_it", "nome_en", "sconto"])
|
||||||
.where("order_type", "=", OrderTypeEnum.Acconto)
|
.where("order_type", "=", orderTypeEnum.enum.Acconto)
|
||||||
.where("service_type", "=", tipologia)
|
.where("service_type", "=", tipologia)
|
||||||
.where("isActive", "=", true)
|
.where("isActive", "=", true)
|
||||||
.executeTakeFirst();
|
.executeTakeFirst();
|
||||||
|
|
@ -146,7 +147,7 @@ export const getPrezziarioByTipologia = async ({
|
||||||
const saldi = await trx
|
const saldi = await trx
|
||||||
.selectFrom("prezziario")
|
.selectFrom("prezziario")
|
||||||
.select(["idprezziario", "prezzo_cent", "nome_it", "nome_en", "sconto"])
|
.select(["idprezziario", "prezzo_cent", "nome_it", "nome_en", "sconto"])
|
||||||
.where("order_type", "=", OrderTypeEnum.Saldo)
|
.where("order_type", "=", orderTypeEnum.enum.Saldo)
|
||||||
.where("service_type", "=", tipologia)
|
.where("service_type", "=", tipologia)
|
||||||
.where("isActive", "=", true)
|
.where("isActive", "=", true)
|
||||||
.orderBy("service_variant", "asc")
|
.orderBy("service_variant", "asc")
|
||||||
|
|
@ -178,9 +179,9 @@ export const getPrezziarioConsulenza = async ({ db }: { db: Querier }) => {
|
||||||
const prezzi = await trx
|
const prezzi = await trx
|
||||||
.selectFrom("prezziario")
|
.selectFrom("prezziario")
|
||||||
.select(["idprezziario", "prezzo_cent", "nome_it", "nome_en", "sconto"])
|
.select(["idprezziario", "prezzo_cent", "nome_it", "nome_en", "sconto"])
|
||||||
.where("order_type", "=", OrderTypeEnum.Consulenza)
|
.where("order_type", "=", orderTypeEnum.enum.Consulenza)
|
||||||
.where("isActive", "=", true)
|
.where("isActive", "=", true)
|
||||||
.where("service_type", "=", TipologiaPosizioneEnum.Stabile)
|
.where("service_type", "=", tipologiaPosizioneEnum.enum.Stabile)
|
||||||
.orderBy("prezzo_cent", "asc")
|
.orderBy("prezzo_cent", "asc")
|
||||||
.execute();
|
.execute();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import { jsonArrayFrom } from "kysely/helpers/postgres";
|
import { jsonArrayFrom } from "kysely/helpers/postgres";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type {
|
import type {
|
||||||
NewRinnovi,
|
NewRinnovi,
|
||||||
RinnoviId,
|
RinnoviId,
|
||||||
|
|
@ -72,7 +72,7 @@ export const createRinnovo = async (data: NewRinnovi) => {
|
||||||
const ordineData: NewRinnovoOrdini = {
|
const ordineData: NewRinnovoOrdini = {
|
||||||
rinnovo_id: rinnovo.id,
|
rinnovo_id: rinnovo.id,
|
||||||
userid: rinnovo.userId,
|
userid: rinnovo.userId,
|
||||||
type: OrderTypeEnum.Rinnovo,
|
type: orderTypeEnum.enum.Rinnovo,
|
||||||
amount_cent: pack.pack.prezzo_cent,
|
amount_cent: pack.pack.prezzo_cent,
|
||||||
packid: pack.pack.idprezziario,
|
packid: pack.pack.idprezziario,
|
||||||
isActive: false,
|
isActive: false,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import type { AnnunciId } from "~/schemas/public/Annunci";
|
import type { AnnunciId } from "~/schemas/public/Annunci";
|
||||||
import OrderTypeEnum from "~/schemas/public/OrderTypeEnum";
|
import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum";
|
||||||
import type {
|
import type {
|
||||||
NewServizio,
|
NewServizio,
|
||||||
ServizioServizioId,
|
ServizioServizioId,
|
||||||
|
|
@ -24,7 +24,7 @@ export const addServizio = async (data: NewServizio) => {
|
||||||
.selectFrom("prezziario")
|
.selectFrom("prezziario")
|
||||||
.selectAll()
|
.selectAll()
|
||||||
.where("isActive", "=", true)
|
.where("isActive", "=", true)
|
||||||
.where("order_type", "=", OrderTypeEnum.Acconto)
|
.where("order_type", "=", orderTypeEnum.enum.Acconto)
|
||||||
.where("service_type", "=", data.tipologia)
|
.where("service_type", "=", data.tipologia)
|
||||||
.limit(1)
|
.limit(1)
|
||||||
.executeTakeFirst();
|
.executeTakeFirst();
|
||||||
|
|
@ -37,7 +37,7 @@ export const addServizio = async (data: NewServizio) => {
|
||||||
.values({
|
.values({
|
||||||
servizio_id: servizio.servizio_id,
|
servizio_id: servizio.servizio_id,
|
||||||
userid: servizio.user_id,
|
userid: servizio.user_id,
|
||||||
type: OrderTypeEnum.Acconto,
|
type: orderTypeEnum.enum.Acconto,
|
||||||
amount_cent: acconto.prezzo_cent,
|
amount_cent: acconto.prezzo_cent,
|
||||||
packid: acconto.idprezziario,
|
packid: acconto.idprezziario,
|
||||||
isActive: false,
|
isActive: false,
|
||||||
|
|
|
||||||
49
apps/infoalloggi/src/server/utils/zod_chat_types.ts
Normal file
49
apps/infoalloggi/src/server/utils/zod_chat_types.ts
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
import { z } from "zod/v4";
|
||||||
|
import { chatsChatid } from "~/schemas/public/Chats";
|
||||||
|
import { MessagesSchema, messagesMessageid } from "~/schemas/public/Messages";
|
||||||
|
import { usersId } from "~/schemas/public/Users";
|
||||||
|
|
||||||
|
export const MessageDataSchema = MessagesSchema.omit({
|
||||||
|
time: true,
|
||||||
|
}).extend({
|
||||||
|
time: z.string(),
|
||||||
|
sender_nome: z.string(),
|
||||||
|
sender_isAdmin: z.boolean(),
|
||||||
|
color_str: z.string(),
|
||||||
|
has_attachments: z.boolean(),
|
||||||
|
reply_source: MessagesSchema.pick({
|
||||||
|
messageid: true,
|
||||||
|
message: true,
|
||||||
|
sender: true,
|
||||||
|
})
|
||||||
|
.extend({
|
||||||
|
nome: z.string(),
|
||||||
|
color_str: z.string(),
|
||||||
|
})
|
||||||
|
.nullable(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const TypingDataSchema = z.array(
|
||||||
|
z.object({
|
||||||
|
userId: usersId,
|
||||||
|
username: z.string(),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
export const SidebarUpdateSchema = z.object({
|
||||||
|
chatId: chatsChatid,
|
||||||
|
lastMessage: z.string(),
|
||||||
|
senderName: z.string(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const MessageUpdateEventSchema = z.discriminatedUnion("eventType", [
|
||||||
|
z.object({
|
||||||
|
eventType: z.literal("edit"),
|
||||||
|
data: z.object({ messageId: messagesMessageid, message: z.string() }),
|
||||||
|
}),
|
||||||
|
z.object({
|
||||||
|
eventType: z.literal("delete"),
|
||||||
|
data: messagesMessageid,
|
||||||
|
}),
|
||||||
|
z.object({ eventType: z.literal("read_receipt"), data: z.null() }), // all unread messages in this chat are now read
|
||||||
|
]);
|
||||||
|
|
@ -1,162 +0,0 @@
|
||||||
import { z } from "zod/v4";
|
|
||||||
import type { AnnunciId } from "~/schemas/public/Annunci";
|
|
||||||
import type { BanlistId } from "~/schemas/public/Banlist";
|
|
||||||
import BanType from "~/schemas/public/BanType";
|
|
||||||
import type { ChatsChatid } from "~/schemas/public/Chats";
|
|
||||||
import type { ComuniId } from "~/schemas/public/Comuni";
|
|
||||||
import type { EtichetteIdEtichetta } from "~/schemas/public/Etichette";
|
|
||||||
import type { EventQueueEventId } from "~/schemas/public/EventQueue";
|
|
||||||
import type { FlagsId } from "~/schemas/public/Flags";
|
|
||||||
import type { MessagesMessageid } from "~/schemas/public/Messages";
|
|
||||||
import type { NazioniId } from "~/schemas/public/Nazioni";
|
|
||||||
import type { OrdiniOrdineId } from "~/schemas/public/Ordini";
|
|
||||||
import type { PrezziarioIdprezziario } from "~/schemas/public/Prezziario";
|
|
||||||
import type { ProvincieId } from "~/schemas/public/Provincie";
|
|
||||||
import type { RinnoviId } from "~/schemas/public/Rinnovi";
|
|
||||||
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
|
||||||
import type { TestiEStringheStingaId } from "~/schemas/public/TestiEStringhe";
|
|
||||||
import type { UsersId } from "~/schemas/public/Users";
|
|
||||||
import type { UsersStorageUserStorageId } from "~/schemas/public/UsersStorage";
|
|
||||||
|
|
||||||
export const zUserId = z.custom<UsersId>(
|
|
||||||
(val) => typeof val === "string",
|
|
||||||
"falied to validate UserId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zAnnuncioId = z.custom<AnnunciId>(
|
|
||||||
(val) => typeof val === "number",
|
|
||||||
"falied to validate AnnuncioId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zChatId = z.custom<ChatsChatid>(
|
|
||||||
(val) => typeof val === "string",
|
|
||||||
"falied to validate ChatId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zMessageId = z.custom<MessagesMessageid>(
|
|
||||||
(val) => typeof val === "string",
|
|
||||||
"falied to validate MessageId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zPrezziarioId = z.custom<PrezziarioIdprezziario>(
|
|
||||||
(val) => typeof val === "string",
|
|
||||||
"falied to validate PrezziarioId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zFlagsId = z.custom<FlagsId>(
|
|
||||||
(val) => typeof val === "string",
|
|
||||||
"falied to validate FlagsId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zEtichettaId = z.custom<EtichetteIdEtichetta>(
|
|
||||||
(val) => typeof val === "number",
|
|
||||||
"falied to validate EtichettaId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zOrdineId = z.custom<OrdiniOrdineId>(
|
|
||||||
(val) => typeof val === "string",
|
|
||||||
"falied to validate OrdineId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zTestiEStringheStingaId = z.custom<TestiEStringheStingaId>(
|
|
||||||
(val) => typeof val === "string",
|
|
||||||
"falied to validate TestiEStringheStingaId",
|
|
||||||
);
|
|
||||||
|
|
||||||
// export const zEventDataTypes = z.custom<EventDataTypes>(
|
|
||||||
// (val) => typeof val === "object",
|
|
||||||
// "falied to validate EventDataTypes",
|
|
||||||
// );
|
|
||||||
|
|
||||||
export const zUserStorageId = z.custom<UsersStorageUserStorageId>(
|
|
||||||
(val) => typeof val === "string",
|
|
||||||
"falied to validate UserStorageId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zBanlistId = z.custom<BanlistId>(
|
|
||||||
(val) => typeof val === "number",
|
|
||||||
"falied to validate BanlistId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zBanType = z.enum(BanType, {
|
|
||||||
error: "failed to validate BanType",
|
|
||||||
});
|
|
||||||
|
|
||||||
export const zServizioId = z.custom<ServizioServizioId>(
|
|
||||||
(val) => typeof val === "string",
|
|
||||||
"falied to validate ServizioId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zComuneId = z.custom<ComuniId>(
|
|
||||||
(val) => typeof val === "number",
|
|
||||||
"falied to validate ComuneId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zProvincieId = z.custom<ProvincieId>(
|
|
||||||
(val) => typeof val === "number",
|
|
||||||
"falied to validate ProvinciaId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zNazioneId = z.custom<NazioniId>(
|
|
||||||
(val) => typeof val === "number",
|
|
||||||
"falied to validate NazioneId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zRinnovoId = z.custom<RinnoviId>(
|
|
||||||
(val) => typeof val === "string",
|
|
||||||
"falied to validate RinnovoId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const zEventId = z.custom<EventQueueEventId>(
|
|
||||||
(val) => typeof val === "number",
|
|
||||||
"falied to validate EventId",
|
|
||||||
);
|
|
||||||
|
|
||||||
export const MessageDataSchema = z.object({
|
|
||||||
messageid: zMessageId,
|
|
||||||
message: z.string(),
|
|
||||||
chatid: zChatId,
|
|
||||||
time: z.string(),
|
|
||||||
sender_nome: z.string(),
|
|
||||||
sender_isAdmin: z.boolean(),
|
|
||||||
sender: zUserId,
|
|
||||||
isread: z.boolean(),
|
|
||||||
color_str: z.string(),
|
|
||||||
is_forwarded: z.boolean(),
|
|
||||||
reply_to_id: zMessageId.nullable(),
|
|
||||||
has_attachments: z.boolean(),
|
|
||||||
reply_source: z
|
|
||||||
.object({
|
|
||||||
messageid: zMessageId,
|
|
||||||
message: z.string(),
|
|
||||||
nome: z.string(),
|
|
||||||
sender: zUserId,
|
|
||||||
color_str: z.string(),
|
|
||||||
})
|
|
||||||
.nullable(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export const TypingDataSchema = z.array(
|
|
||||||
z.object({
|
|
||||||
userId: zUserId,
|
|
||||||
username: z.string(),
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
export const SidebarUpdateSchema = z.object({
|
|
||||||
chatId: zChatId,
|
|
||||||
lastMessage: z.string(),
|
|
||||||
senderName: z.string(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export const MessageUpdateEventSchema = z.discriminatedUnion("eventType", [
|
|
||||||
z.object({
|
|
||||||
eventType: z.literal("edit"),
|
|
||||||
data: z.object({ messageId: zMessageId, message: z.string() }),
|
|
||||||
}),
|
|
||||||
z.object({
|
|
||||||
eventType: z.literal("delete"),
|
|
||||||
data: zMessageId,
|
|
||||||
}),
|
|
||||||
z.object({ eventType: z.literal("read_receipt"), data: z.null() }), // all unread messages in this chat are now read
|
|
||||||
]);
|
|
||||||
|
|
@ -1,62 +1,65 @@
|
||||||
export type Caratteristiche = {
|
import z from "zod";
|
||||||
Scheda_Tv: string | null;
|
|
||||||
Scheda_Grado: string | null;
|
export type Caratteristiche = z.infer<typeof CaratteristicheSchema>;
|
||||||
Scheda_Piano: string | null;
|
export const CaratteristicheSchema = z.object({
|
||||||
Scheda_Arredi: string | null;
|
Scheda_Tv: z.string().nullable(),
|
||||||
Scheda_Balconi: string | null;
|
Scheda_Grado: z.string().nullable(),
|
||||||
Scheda_Infissi: string | null;
|
Scheda_Piano: z.string().nullable(),
|
||||||
Scheda_Pulizie: string | null;
|
Scheda_Arredi: z.string().nullable(),
|
||||||
Scheda_Taverna: string | null;
|
Scheda_Balconi: z.string().nullable(),
|
||||||
Scheda_Cauzione: string | null;
|
Scheda_Infissi: z.string().nullable(),
|
||||||
Scheda_Giardino: string | null;
|
Scheda_Pulizie: z.string().nullable(),
|
||||||
Scheda_Internet: string | null;
|
Scheda_Taverna: z.string().nullable(),
|
||||||
Scheda_Panorama: string | null;
|
Scheda_Cauzione: z.string().nullable(),
|
||||||
Scheda_Persiana: string | null;
|
Scheda_Giardino: z.string().nullable(),
|
||||||
Scheda_Terrazzi: string | null;
|
Scheda_Internet: z.string().nullable(),
|
||||||
Scheda_Categoria: string | null;
|
Scheda_Panorama: z.string().nullable(),
|
||||||
Scheda_Magazzino: string | null;
|
Scheda_Persiana: z.string().nullable(),
|
||||||
Scheda_Pavimento: string | null;
|
Scheda_Terrazzi: z.string().nullable(),
|
||||||
Scheda_Posizione: string | null;
|
Scheda_Categoria: z.string().nullable(),
|
||||||
Scheda_AcquaCalda: string | null;
|
Scheda_Magazzino: z.string().nullable(),
|
||||||
Scheda_LatiLiberi: string | null;
|
Scheda_Pavimento: z.string().nullable(),
|
||||||
Scheda_Serramenti: string | null;
|
Scheda_Posizione: z.string().nullable(),
|
||||||
Scheda_TipoCucina: string | null;
|
Scheda_AcquaCalda: z.string().nullable(),
|
||||||
Scheda_PostiSedere: string | null;
|
Scheda_LatiLiberi: z.string().nullable(),
|
||||||
Scheda_TipoRegistr: string | null;
|
Scheda_Serramenti: z.string().nullable(),
|
||||||
Scheda_TotalePiani: string | null;
|
Scheda_TipoCucina: z.string().nullable(),
|
||||||
Scheda_Appartamenti: string | null;
|
Scheda_PostiSedere: z.string().nullable(),
|
||||||
Scheda_Destinazione: string | null;
|
Scheda_TipoRegistr: z.string().nullable(),
|
||||||
Scheda_IncassoAnnuo: string | null;
|
Scheda_TotalePiani: z.string().nullable(),
|
||||||
Scheda_NumeroCamere: string | null;
|
Scheda_Appartamenti: z.string().nullable(),
|
||||||
Scheda_Orientamento: string | null;
|
Scheda_Destinazione: z.string().nullable(),
|
||||||
Scheda_TipoGestione: string | null;
|
Scheda_IncassoAnnuo: z.string().nullable(),
|
||||||
Scheda_TipoImpianto: string | null;
|
Scheda_NumeroCamere: z.string().nullable(),
|
||||||
Scheda_CantinaSolaio: string | null;
|
Scheda_Orientamento: z.string().nullable(),
|
||||||
Scheda_NumeroVetrine: string | null;
|
Scheda_TipoGestione: z.string().nullable(),
|
||||||
Scheda_OrariApertura: string | null;
|
Scheda_TipoImpianto: z.string().nullable(),
|
||||||
Scheda_Riscaldamento: string | null;
|
Scheda_CantinaSolaio: z.string().nullable(),
|
||||||
Scheda_StatoImmobile: string | null;
|
Scheda_NumeroVetrine: z.string().nullable(),
|
||||||
Scheda_TipoContratto: string | null;
|
Scheda_OrariApertura: z.string().nullable(),
|
||||||
Scheda_TipoSoggiorno: string | null;
|
Scheda_Riscaldamento: z.string().nullable(),
|
||||||
Scheda_ElettricitaGas: string | null;
|
Scheda_StatoImmobile: z.string().nullable(),
|
||||||
Scheda_PavimentoBagno: string | null;
|
Scheda_TipoContratto: z.string().nullable(),
|
||||||
Scheda_PavimentoNotte: string | null;
|
Scheda_TipoSoggiorno: z.string().nullable(),
|
||||||
Scheda_Raffrescamento: string | null;
|
Scheda_ElettricitaGas: z.string().nullable(),
|
||||||
Scheda_AccessoDisabili: string | null;
|
Scheda_PavimentoBagno: z.string().nullable(),
|
||||||
Scheda_AffittoMuriAnno: string | null;
|
Scheda_PavimentoNotte: z.string().nullable(),
|
||||||
Scheda_FonteEnergetica: string | null;
|
Scheda_Raffrescamento: z.string().nullable(),
|
||||||
Scheda_PavimentoCucina: string | null;
|
Scheda_AccessoDisabili: z.string().nullable(),
|
||||||
Scheda_PavimentoGiorno: string | null;
|
Scheda_AffittoMuriAnno: z.string().nullable(),
|
||||||
Scheda_TipoSaracinesca: string | null;
|
Scheda_FonteEnergetica: z.string().nullable(),
|
||||||
Scheda_AccoglienzaBimbi: string | null;
|
Scheda_PavimentoCucina: z.string().nullable(),
|
||||||
Scheda_CambioBiancheria: string | null;
|
Scheda_PavimentoGiorno: z.string().nullable(),
|
||||||
Scheda_CanoniAnticipati: string | null;
|
Scheda_TipoSaracinesca: z.string().nullable(),
|
||||||
Scheda_NumeroDipendenti: string | null;
|
Scheda_AccoglienzaBimbi: z.string().nullable(),
|
||||||
Scheda_SpazioParcheggio: string | null;
|
Scheda_CambioBiancheria: z.string().nullable(),
|
||||||
Scheda_ScadenzaContratto: string | null;
|
Scheda_CanoniAnticipati: z.string().nullable(),
|
||||||
Scheda_TipoRiscaldamento: string | null;
|
Scheda_NumeroDipendenti: z.string().nullable(),
|
||||||
Scheda_SpCondominialiAnno: string | null;
|
Scheda_SpazioParcheggio: z.string().nullable(),
|
||||||
Scheda_IndiceEdificabilita: string | null;
|
Scheda_ScadenzaContratto: z.string().nullable(),
|
||||||
Scheda_OneriUrbanizzazione: string | null;
|
Scheda_TipoRiscaldamento: z.string().nullable(),
|
||||||
Scheda_PossibilitàAcquistoMuri: string | null;
|
Scheda_SpCondominialiAnno: z.string().nullable(),
|
||||||
};
|
Scheda_IndiceEdificabilita: z.string().nullable(),
|
||||||
|
Scheda_OneriUrbanizzazione: z.string().nullable(),
|
||||||
|
Scheda_PossibilitàAcquistoMuri: z.string().nullable(),
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue