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

97 lines
3 KiB
TypeScript
Raw Normal View History

import z from "zod";
import { createTRPCRouter, protectedApiProcedure } from "~/server/api/trpc";
import { db } from "~/server/db";
type ClienteData = {
cognome?: string | undefined;
nome?: string | undefined;
cf?: string | undefined;
telefono?: string | undefined;
email?: string | undefined;
data_nascita?: string | undefined;
luogo_nascita?: string | undefined;
naz_residenza?: string | undefined;
provincia_residenza?: string | undefined;
cap_residenza?: string | undefined;
comune_residenza?: string | undefined;
indirizzo_residenza?: string | undefined;
civico_residenza?: string | undefined;
};
const clienteDataSchema = z.object({
cap_residenza: z.string().optional(),
cf: z.string().optional(),
civico_residenza: z.string().optional(),
cognome: z.string().optional(),
comune_residenza: z.string().optional(),
data_nascita: z.string().optional(),
email: z.string().optional(),
indirizzo_residenza: z.string().optional(),
luogo_nascita: z.string().optional(),
naz_residenza: z.string().optional(),
nome: z.string().optional(),
provincia_residenza: z.string().optional(),
telefono: z.string().optional(),
});
export const syncRouter = createTRPCRouter({
syncGet: protectedApiProcedure
.input(z.object({ cf: z.string() }))
.query(async ({ input }) => {
const user = await db
.selectFrom("users_anagrafica")
.select([
"users_anagrafica.codice_fiscale",
"users_anagrafica.userid",
"users_anagrafica.data_nascita",
"users_anagrafica.luogo_nascita",
"users_anagrafica.nazione_residenza",
"users_anagrafica.provincia_residenza",
"users_anagrafica.cap_residenza",
"users_anagrafica.comune_residenza",
"users_anagrafica.via_residenza",
"users_anagrafica.civico_residenza",
])
.innerJoin("users", "users.id", "users_anagrafica.userid")
.select([
"users.nome",
"users.cognome",
"users.email",
"users.telefono",
])
.where("users_anagrafica.codice_fiscale", "=", input.cf)
.executeTakeFirst();
const result: ClienteData = {
cognome: user?.cognome,
nome: user?.nome,
cf: user?.codice_fiscale || undefined,
telefono: user?.telefono,
email: user?.email,
data_nascita: user?.data_nascita?.toLocaleDateString("it-IT", {
year: "numeric",
month: "2-digit",
day: "2-digit",
}),
luogo_nascita: user?.luogo_nascita || undefined,
naz_residenza: user?.nazione_residenza || undefined,
provincia_residenza: user?.provincia_residenza || undefined,
cap_residenza: user?.cap_residenza || undefined,
comune_residenza: user?.comune_residenza || undefined,
indirizzo_residenza: user?.via_residenza || undefined,
civico_residenza: user?.civico_residenza || undefined,
};
return result;
}),
syncPost: protectedApiProcedure
.input(z.object({ data: clienteDataSchema }))
.mutation(async ({ input }) => {
console.log("input", input);
// const parsed = clienteDataSchema.safeParse(JSON.parse(input.data));
// console.log("parsed", parsed);
return { message: "Data received" };
}),
});