refactor: clean up unused code and improve type definitions in various components
This commit is contained in:
parent
d4c28117d7
commit
0e606aa60e
6 changed files with 206 additions and 190 deletions
|
|
@ -51,7 +51,6 @@ import { useTranslation } from "~/providers/I18nProvider";
|
|||
import { useServizio } from "~/providers/ServizioProvider";
|
||||
import type { AnnunciId } from "~/schemas/public/Annunci";
|
||||
import type { Ordini } from "~/schemas/public/Ordini";
|
||||
import type { Prezziario } from "~/schemas/public/Prezziario";
|
||||
import type { ServizioServizioId } from "~/schemas/public/Servizio";
|
||||
import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum";
|
||||
import type { UsersId } from "~/schemas/public/Users";
|
||||
|
|
@ -246,7 +245,16 @@ export const OrdersModal = ({
|
|||
}: {
|
||||
children: React.ReactNode;
|
||||
isAdmin: boolean;
|
||||
ordini: (Ordini & Pick<Prezziario, "testo_condizioni">)[];
|
||||
ordini: Pick<
|
||||
Ordini,
|
||||
| "isActive"
|
||||
| "ordine_id"
|
||||
| "created_at"
|
||||
| "packid"
|
||||
| "amount_cent"
|
||||
| "userid"
|
||||
| "type"
|
||||
>[];
|
||||
}) => {
|
||||
const [openOrders, setOpenOrders] = useState(false);
|
||||
const [openEdit, setOpenEdit] = useState(false);
|
||||
|
|
|
|||
|
|
@ -305,6 +305,7 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => {
|
|||
|
||||
const activeAcconto = acconti.find((a) => a.isActive);
|
||||
|
||||
//hasActiveAcconto
|
||||
if (activeAcconto) {
|
||||
badgeClass = "border-yellow-500 bg-yellow-500/10 text-yellow-600";
|
||||
contents = (
|
||||
|
|
@ -359,6 +360,7 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => {
|
|||
return;
|
||||
}
|
||||
if (
|
||||
//hasConsulanzaDaPagare
|
||||
row.original.ordini_servizio.some(
|
||||
(o) => o.type === OrderTypeEnum.Consulenza && !o.isActive,
|
||||
)
|
||||
|
|
@ -557,9 +559,11 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => {
|
|||
{
|
||||
accessorKey: "ordini",
|
||||
cell: ({ row }) => {
|
||||
//paidOrdiniCount
|
||||
const paidOrders = row.original.ordini_servizio.filter(
|
||||
(o) => o.isActive,
|
||||
).length;
|
||||
//unpaidOrdiniCount
|
||||
const unpaidOrders = row.original.ordini_servizio.length - paidOrders;
|
||||
return (
|
||||
<OrdersModal isAdmin={true} ordini={row.original.ordini_servizio}>
|
||||
|
|
|
|||
|
|
@ -50,6 +50,24 @@ export type WithParsedDates<
|
|||
? WithParsedDates<SetNestedPath<T, Head>, Tail>
|
||||
: T;
|
||||
|
||||
/** Extracts dot-separated paths leading to a `string` or `Date` leaf, auto-traversing arrays. */
|
||||
type DateConvertiblePaths<
|
||||
T,
|
||||
Depth extends unknown[] = [],
|
||||
> = Depth["length"] extends 5
|
||||
? never
|
||||
: T extends Record<string, unknown>
|
||||
? {
|
||||
[K in keyof T & string]:
|
||||
| (NonNullable<T[K]> extends string | Date ? K : never)
|
||||
| (NonNullable<T[K]> extends readonly (infer U)[]
|
||||
? `${K}.${DateConvertiblePaths<U, [...Depth, unknown]>}`
|
||||
: NonNullable<T[K]> extends Record<string, unknown>
|
||||
? `${K}.${DateConvertiblePaths<NonNullable<T[K]>, [...Depth, unknown]>}`
|
||||
: never);
|
||||
}[keyof T & string]
|
||||
: never;
|
||||
|
||||
// --- Runtime ---
|
||||
|
||||
type ParsedPath = string[];
|
||||
|
|
@ -144,7 +162,10 @@ type PluggedQuery<T> = {
|
|||
* ).execute();
|
||||
* // rows: { items: { id: number; box_id: number; created_at: Date }[] }[]
|
||||
*/
|
||||
export function withParsedDates<const Paths extends readonly string[], T>(
|
||||
export function withParsedDates<
|
||||
T,
|
||||
const Paths extends readonly DateConvertiblePaths<T>[],
|
||||
>(
|
||||
query: {
|
||||
withPlugin(plugin: KyselyPlugin): PluggedQuery<T>;
|
||||
},
|
||||
|
|
|
|||
|
|
@ -37,18 +37,6 @@ export const prezziarioRouter = createTRPCRouter({
|
|||
.mutation(async ({ input }) => {
|
||||
return await addPrezziario({ db, input: input.data });
|
||||
}),
|
||||
// deletePrezziario: adminProcedure
|
||||
// .input(
|
||||
// z.object({
|
||||
// idprezziario: zPrezziarioId,
|
||||
// }),
|
||||
// )
|
||||
// .mutation(async ({ input }) => {
|
||||
// return await deletePrezziario({
|
||||
// db,
|
||||
// prezziarioId: input.idprezziario,
|
||||
// });
|
||||
// }),
|
||||
getPrezziario: publicProcedure.query(async () => {
|
||||
return await getPrezziario();
|
||||
}),
|
||||
|
|
|
|||
|
|
@ -31,11 +31,7 @@ import {
|
|||
import { db } from "~/server/db";
|
||||
import { NewMail, type NewMailProps } from "~/server/services/mailer";
|
||||
import { getUser } from "~/server/services/user.service";
|
||||
import {
|
||||
parseNullableDateString,
|
||||
withImages,
|
||||
withVideos,
|
||||
} from "~/utils/kysely-helper";
|
||||
import { withImages, withVideos } from "~/utils/kysely-helper";
|
||||
import { GetUserInterests } from "../services/interests.service";
|
||||
import { getServizioById } from "../services/servizio.service";
|
||||
import type { AnnuncioRicerca } from "./annunci.controller";
|
||||
|
|
@ -487,8 +483,6 @@ export const getAllServizioAnnunci = async (
|
|||
"annunci.modificato_il",
|
||||
"annunci.created_at",
|
||||
"annunci.open_contatti_at",
|
||||
"annunci.user_confirmed_at",
|
||||
"annunci.accettato_conferma_at",
|
||||
"annunci.contratto_decorrenza",
|
||||
"annunci.contratto_scadenza",
|
||||
"annunci.disponibile_da",
|
||||
|
|
@ -511,144 +505,138 @@ export const getServizioDataById = async (
|
|||
servizioId: ServizioServizioId,
|
||||
): Promise<ServizioData> => {
|
||||
try {
|
||||
const data = await db
|
||||
.selectFrom("servizio")
|
||||
.leftJoin(
|
||||
"users_anagrafica",
|
||||
"servizio.user_id",
|
||||
"users_anagrafica.userid",
|
||||
)
|
||||
.selectAll("servizio")
|
||||
.select((eb) => [
|
||||
jsonObjectFrom(
|
||||
eb
|
||||
.selectFrom("users_storage")
|
||||
.select([
|
||||
"users_storage.storageId as storageId",
|
||||
"users_anagrafica.doc_personale_fronte_ref as ref",
|
||||
])
|
||||
.whereRef(
|
||||
"users_storage.user_storage_id",
|
||||
"=",
|
||||
"users_anagrafica.doc_personale_fronte_ref",
|
||||
),
|
||||
).as("doc_personale_fronte"),
|
||||
jsonObjectFrom(
|
||||
eb
|
||||
.selectFrom("users_storage")
|
||||
.select([
|
||||
"users_storage.storageId as storageId",
|
||||
"users_anagrafica.doc_personale_retro_ref as ref",
|
||||
])
|
||||
.whereRef(
|
||||
"users_storage.user_storage_id",
|
||||
"=",
|
||||
"users_anagrafica.doc_personale_retro_ref",
|
||||
),
|
||||
).as("doc_personale_retro"),
|
||||
jsonObjectFrom(
|
||||
eb
|
||||
.selectFrom("users_storage")
|
||||
.select([
|
||||
"users_storage.storageId as storageId",
|
||||
"servizio.doc_motivazione_ref as ref",
|
||||
])
|
||||
.whereRef(
|
||||
"users_storage.user_storage_id",
|
||||
"=",
|
||||
"servizio.doc_motivazione_ref",
|
||||
),
|
||||
).as("doc_motivazione"),
|
||||
jsonArrayFrom(
|
||||
eb
|
||||
.selectFrom("servizio_annunci")
|
||||
.selectAll("servizio_annunci")
|
||||
.innerJoin("annunci", "annunci.id", "servizio_annunci.annunci_id")
|
||||
.select((_eb) => [
|
||||
"annunci.id",
|
||||
"annunci.codice",
|
||||
"annunci.comune",
|
||||
"annunci.provincia",
|
||||
"annunci.prezzo",
|
||||
"annunci.consegna",
|
||||
"annunci.numero_camere",
|
||||
"annunci.mq",
|
||||
"annunci.tipo",
|
||||
"annunci.titolo_it",
|
||||
"annunci.titolo_en",
|
||||
"annunci.desc_en",
|
||||
"annunci.desc_it",
|
||||
"annunci.modificato_il",
|
||||
"annunci.stato",
|
||||
"annunci.external_videos",
|
||||
"annunci.media_updated_at",
|
||||
"annunci.homepage",
|
||||
"annunci.web",
|
||||
"annunci.disponibile_da",
|
||||
"annunci.persone",
|
||||
"annunci.permanenza",
|
||||
withImages(),
|
||||
withVideos(),
|
||||
])
|
||||
//ignora annunci che non sono disponibili
|
||||
//.where("annunci.web", "=", true)
|
||||
//.where("annunci.stato", "!=", "Sospeso")
|
||||
.orderBy("servizio_annunci.status_conferma", (ob) =>
|
||||
ob.asc().nullsLast(),
|
||||
)
|
||||
.orderBy("servizio_annunci.open_contatti_at", (ob) =>
|
||||
ob.asc().nullsLast(),
|
||||
)
|
||||
.orderBy("servizio_annunci.created_at", "asc")
|
||||
.whereRef(
|
||||
"servizio_annunci.servizio_id",
|
||||
"=",
|
||||
"servizio.servizio_id",
|
||||
),
|
||||
).as("annunci"),
|
||||
jsonArrayFrom(
|
||||
eb
|
||||
.selectFrom("ordini")
|
||||
.selectAll("ordini")
|
||||
.innerJoin("prezziario", "prezziario.idprezziario", "ordini.packid")
|
||||
.select("prezziario.testo_condizioni")
|
||||
.whereRef("ordini.servizio_id", "=", "servizio.servizio_id")
|
||||
.orderBy("ordini.created_at", "desc"),
|
||||
).as("ordini"),
|
||||
])
|
||||
.orderBy("servizio.created_at", "desc")
|
||||
.where("servizio.servizio_id", "=", servizioId)
|
||||
.executeTakeFirst();
|
||||
const data = await withParsedDates(
|
||||
db
|
||||
.selectFrom("servizio")
|
||||
.leftJoin(
|
||||
"users_anagrafica",
|
||||
"servizio.user_id",
|
||||
"users_anagrafica.userid",
|
||||
)
|
||||
.selectAll("servizio")
|
||||
.select((eb) => [
|
||||
jsonObjectFrom(
|
||||
eb
|
||||
.selectFrom("users_storage")
|
||||
.select([
|
||||
"users_storage.storageId as storageId",
|
||||
"users_anagrafica.doc_personale_fronte_ref as ref",
|
||||
])
|
||||
.whereRef(
|
||||
"users_storage.user_storage_id",
|
||||
"=",
|
||||
"users_anagrafica.doc_personale_fronte_ref",
|
||||
),
|
||||
).as("doc_personale_fronte"),
|
||||
jsonObjectFrom(
|
||||
eb
|
||||
.selectFrom("users_storage")
|
||||
.select([
|
||||
"users_storage.storageId as storageId",
|
||||
"users_anagrafica.doc_personale_retro_ref as ref",
|
||||
])
|
||||
.whereRef(
|
||||
"users_storage.user_storage_id",
|
||||
"=",
|
||||
"users_anagrafica.doc_personale_retro_ref",
|
||||
),
|
||||
).as("doc_personale_retro"),
|
||||
jsonObjectFrom(
|
||||
eb
|
||||
.selectFrom("users_storage")
|
||||
.select([
|
||||
"users_storage.storageId as storageId",
|
||||
"servizio.doc_motivazione_ref as ref",
|
||||
])
|
||||
.whereRef(
|
||||
"users_storage.user_storage_id",
|
||||
"=",
|
||||
"servizio.doc_motivazione_ref",
|
||||
),
|
||||
).as("doc_motivazione"),
|
||||
jsonArrayFrom(
|
||||
eb
|
||||
.selectFrom("servizio_annunci")
|
||||
.selectAll("servizio_annunci")
|
||||
.innerJoin("annunci", "annunci.id", "servizio_annunci.annunci_id")
|
||||
.select((_eb) => [
|
||||
"annunci.id",
|
||||
"annunci.codice",
|
||||
"annunci.comune",
|
||||
"annunci.provincia",
|
||||
"annunci.prezzo",
|
||||
"annunci.consegna",
|
||||
"annunci.numero_camere",
|
||||
"annunci.mq",
|
||||
"annunci.tipo",
|
||||
"annunci.titolo_it",
|
||||
"annunci.titolo_en",
|
||||
"annunci.desc_en",
|
||||
"annunci.desc_it",
|
||||
"annunci.modificato_il",
|
||||
"annunci.stato",
|
||||
"annunci.external_videos",
|
||||
"annunci.media_updated_at",
|
||||
"annunci.homepage",
|
||||
"annunci.web",
|
||||
"annunci.disponibile_da",
|
||||
"annunci.persone",
|
||||
"annunci.permanenza",
|
||||
withImages(),
|
||||
withVideos(),
|
||||
])
|
||||
//ignora annunci che non sono disponibili
|
||||
//.where("annunci.web", "=", true)
|
||||
//.where("annunci.stato", "!=", "Sospeso")
|
||||
.orderBy("servizio_annunci.status_conferma", (ob) =>
|
||||
ob.asc().nullsLast(),
|
||||
)
|
||||
.orderBy("servizio_annunci.open_contatti_at", (ob) =>
|
||||
ob.asc().nullsLast(),
|
||||
)
|
||||
.orderBy("servizio_annunci.created_at", "asc")
|
||||
.whereRef(
|
||||
"servizio_annunci.servizio_id",
|
||||
"=",
|
||||
"servizio.servizio_id",
|
||||
),
|
||||
).as("annunci"),
|
||||
jsonArrayFrom(
|
||||
eb
|
||||
.selectFrom("ordini")
|
||||
.selectAll("ordini")
|
||||
.innerJoin(
|
||||
"prezziario",
|
||||
"prezziario.idprezziario",
|
||||
"ordini.packid",
|
||||
)
|
||||
.select("prezziario.testo_condizioni")
|
||||
.whereRef("ordini.servizio_id", "=", "servizio.servizio_id")
|
||||
.orderBy("ordini.created_at", "desc"),
|
||||
).as("ordini"),
|
||||
])
|
||||
.orderBy("servizio.created_at", "desc")
|
||||
.where("servizio.servizio_id", "=", servizioId),
|
||||
[
|
||||
"annunci.created_at",
|
||||
"annunci.open_contatti_at",
|
||||
"annunci.contratto_decorrenza",
|
||||
"annunci.contratto_scadenza",
|
||||
"annunci.modificato_il",
|
||||
"annunci.disponibile_da",
|
||||
"annunci.media_updated_at",
|
||||
"ordini.created_at",
|
||||
"ordini.paid_at",
|
||||
],
|
||||
).executeTakeFirst();
|
||||
if (!data) {
|
||||
throw new TRPCError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Servizio not found",
|
||||
});
|
||||
}
|
||||
const formattedData = {
|
||||
...data,
|
||||
annunci: data.annunci.map((annuncio) => ({
|
||||
...annuncio,
|
||||
created_at: new Date(annuncio.created_at),
|
||||
open_contatti_at: parseNullableDateString(annuncio.open_contatti_at),
|
||||
|
||||
contratto_decorrenza: parseNullableDateString(
|
||||
annuncio.contratto_decorrenza,
|
||||
),
|
||||
contratto_scadenza: parseNullableDateString(
|
||||
annuncio.contratto_scadenza,
|
||||
),
|
||||
modificato_il: parseNullableDateString(annuncio.modificato_il),
|
||||
disponibile_da: parseNullableDateString(annuncio.disponibile_da),
|
||||
media_updated_at: parseNullableDateString(annuncio.media_updated_at),
|
||||
})),
|
||||
ordini: data.ordini.map((ordine) => ({
|
||||
...ordine,
|
||||
created_at: new Date(ordine.created_at),
|
||||
paid_at: ordine.paid_at ? new Date(ordine.paid_at) : null,
|
||||
})),
|
||||
};
|
||||
return formattedData;
|
||||
return data;
|
||||
} catch (e) {
|
||||
throw new TRPCError({
|
||||
code: "NOT_FOUND",
|
||||
|
|
@ -1149,10 +1137,31 @@ export const getCompatibileAnnunci = async ({
|
|||
}
|
||||
};
|
||||
|
||||
export type RichiesteData = Servizio &
|
||||
export type RichiesteData = Pick<
|
||||
Servizio,
|
||||
| "servizio_id"
|
||||
| "user_id"
|
||||
| "isInterrotto"
|
||||
| "isOkAcconto"
|
||||
| "isOkSaldo"
|
||||
| "decorrenza"
|
||||
| "tipologia"
|
||||
| "onboardOk"
|
||||
| "isOkConsulenza"
|
||||
| "interruzioneDays"
|
||||
> &
|
||||
Pick<Users, "username" | "note" | "telefono"> & {
|
||||
annunci_servizio: ServizioAnnuncioData[];
|
||||
ordini_servizio: (Ordini & Pick<Prezziario, "testo_condizioni">)[];
|
||||
ordini_servizio: Pick<
|
||||
Ordini,
|
||||
| "isActive"
|
||||
| "ordine_id"
|
||||
| "created_at"
|
||||
| "packid"
|
||||
| "amount_cent"
|
||||
| "userid"
|
||||
| "type"
|
||||
>[];
|
||||
};
|
||||
|
||||
export const getRichieste = async (): Promise<RichiesteData[]> => {
|
||||
|
|
@ -1161,7 +1170,18 @@ export const getRichieste = async (): Promise<RichiesteData[]> => {
|
|||
db
|
||||
.selectFrom("servizio")
|
||||
.innerJoin("users", "users.id", "servizio.user_id")
|
||||
.selectAll("servizio")
|
||||
.select([
|
||||
"servizio.servizio_id",
|
||||
"servizio.user_id",
|
||||
"servizio.isInterrotto",
|
||||
"servizio.isOkAcconto",
|
||||
"servizio.isOkSaldo",
|
||||
"servizio.decorrenza",
|
||||
"servizio.tipologia",
|
||||
"servizio.onboardOk",
|
||||
"servizio.isOkConsulenza",
|
||||
"servizio.interruzioneDays",
|
||||
])
|
||||
.select(["users.username", "users.note", "users.telefono"])
|
||||
.select((eb) => [
|
||||
jsonArrayFrom(
|
||||
|
|
@ -1213,13 +1233,15 @@ export const getRichieste = async (): Promise<RichiesteData[]> => {
|
|||
jsonArrayFrom(
|
||||
eb
|
||||
.selectFrom("ordini")
|
||||
.selectAll("ordini")
|
||||
.innerJoin(
|
||||
"prezziario",
|
||||
"prezziario.idprezziario",
|
||||
.select([
|
||||
"ordini.isActive",
|
||||
"ordini.ordine_id",
|
||||
"ordini.created_at",
|
||||
"ordini.packid",
|
||||
)
|
||||
.select("prezziario.testo_condizioni")
|
||||
"ordini.amount_cent",
|
||||
"ordini.userid",
|
||||
"ordini.type",
|
||||
])
|
||||
.whereRef("ordini.servizio_id", "=", "servizio.servizio_id")
|
||||
.orderBy("ordini.created_at", "desc"),
|
||||
).as("ordini_servizio"),
|
||||
|
|
@ -1229,16 +1251,14 @@ export const getRichieste = async (): Promise<RichiesteData[]> => {
|
|||
"annunci_servizio.created_at",
|
||||
"annunci_servizio.open_contatti_at",
|
||||
"annunci_servizio.disponibile_da",
|
||||
"annunci_servizio.user_confirmed_at",
|
||||
"annunci_servizio.accettato_conferma_at",
|
||||
"annunci_servizio.contratto_decorrenza",
|
||||
"annunci_servizio.contratto_scadenza",
|
||||
"annunci_servizio.modificato_il",
|
||||
"annunci_servizio.media_updated_at",
|
||||
"ordini_servizio.created_at",
|
||||
"ordini_servizio.paid_at",
|
||||
],
|
||||
).execute();
|
||||
|
||||
return data;
|
||||
} catch (e) {
|
||||
throw new TRPCError({
|
||||
|
|
|
|||
|
|
@ -46,31 +46,6 @@ export const editAnagraficaHandler = async ({
|
|||
});
|
||||
}
|
||||
|
||||
// if (anagraficaId) {
|
||||
// return await db
|
||||
// .updateTable("users_anagrafica")
|
||||
// .set({
|
||||
// ...rest,
|
||||
// })
|
||||
// .where("userid", "=", userId)
|
||||
// .returningAll()
|
||||
// .executeTakeFirst();
|
||||
// }
|
||||
// const searched = await db
|
||||
// .selectFrom("users_anagrafica")
|
||||
// .select("idanagrafica")
|
||||
// .where("userid", "=", userId)
|
||||
// .executeTakeFirst();
|
||||
// if (searched) {
|
||||
// return await db
|
||||
// .updateTable("users_anagrafica")
|
||||
// .set({
|
||||
// ...rest,
|
||||
// })
|
||||
// .where("userid", "=", userId)
|
||||
// .returningAll()
|
||||
// .executeTakeFirst();
|
||||
// }
|
||||
return await db
|
||||
.insertInto("users_anagrafica")
|
||||
.values({
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue