From 830b89d4b18adc9c1233ccbb7e65302405210449 Mon Sep 17 00:00:00 2001 From: Marco Pedone Date: Fri, 28 Nov 2025 15:11:14 +0100 Subject: [PATCH] refactor: implement getStorageUrl utility for consistent storage URL generation --- .../emails/onboarding-servizio.tsx | 2 +- .../src/components/allegato-iframe.tsx | 6 +- .../src/components/annunci_map.tsx | 9 +- .../src/components/annuncio_card.tsx | 97 ++++++++++++++++--- .../components/area-riservata/allegati.tsx | 8 +- .../area-riservata/documenti_personali.tsx | 5 +- .../src/components/servizio/annuncio_card.tsx | 9 +- .../src/components/servizio/conferma.tsx | 6 +- apps/infoalloggi/src/lib/storage_utils.ts | 26 +++++ .../src/middlewares/api_middleware.ts | 4 +- apps/infoalloggi/src/pages/annuncio/[cod].tsx | 11 ++- .../allegato-view/[allegatoId].tsx | 8 +- .../contratto-registrazione/[...slug].tsx | 6 +- .../pages/servizio/contratto/[...slug].tsx | 6 +- .../server/controllers/annunci.controller.ts | 10 +- 15 files changed, 186 insertions(+), 27 deletions(-) create mode 100644 apps/infoalloggi/src/lib/storage_utils.ts diff --git a/apps/infoalloggi/emails/onboarding-servizio.tsx b/apps/infoalloggi/emails/onboarding-servizio.tsx index c7c2378..25a5b18 100644 --- a/apps/infoalloggi/emails/onboarding-servizio.tsx +++ b/apps/infoalloggi/emails/onboarding-servizio.tsx @@ -65,7 +65,7 @@ const OnboardingServizio = ({ alt={`Annuncio image - ${annuncio.codice}`} className="block w-[240px] rounded-[4px] object-cover object-center" height="140px" - src={`${env.BASE_URL}/storage-api/get/${annuncio.immagine}?image=true`} + src={`${env.BASE_URL}/storage-api/get/${annuncio.immagine}?media=image`} width="100%" /> diff --git a/apps/infoalloggi/src/components/allegato-iframe.tsx b/apps/infoalloggi/src/components/allegato-iframe.tsx index 24a5d25..e46ce0f 100644 --- a/apps/infoalloggi/src/components/allegato-iframe.tsx +++ b/apps/infoalloggi/src/components/allegato-iframe.tsx @@ -1,6 +1,7 @@ import dynamic from "next/dynamic"; import { useEffect, useRef, useState } from "react"; import { LoadingPage } from "~/components/loading"; +import { getStorageUrl } from "~/lib/storage_utils"; import { cn } from "~/lib/utils"; import type { FileMetadata } from "~/server/services/storage.service"; @@ -50,7 +51,10 @@ export const AllegatoIframe = ({ } }; - const requestUrl = `/storage-api/get/${allegato.id}?mode=inline`; + const requestUrl = getStorageUrl({ + storageId: allegato.id, + params: { mode: "inline" }, + }); // For PDF on iOS, provide download link instead if (isPDF && (isIOS || isMobile)) { return ( diff --git a/apps/infoalloggi/src/components/annunci_map.tsx b/apps/infoalloggi/src/components/annunci_map.tsx index 2b5ed63..78d945b 100644 --- a/apps/infoalloggi/src/components/annunci_map.tsx +++ b/apps/infoalloggi/src/components/annunci_map.tsx @@ -11,6 +11,7 @@ import { import { LoadingPage } from "~/components/loading"; import { Status500 } from "~/components/status-page"; import { handleConsegna } from "~/lib/annuncio_details"; +import { getStorageUrl } from "~/lib/storage_utils"; import { formatCurrency } from "~/lib/utils"; import { useTranslation } from "~/providers/I18nProvider"; import { useRicerca } from "~/providers/RicercaProvider"; @@ -123,7 +124,13 @@ const SelectedComp = memo( alt="a" className="size-24 rounded-md object-cover sm:size-40" height={500} - src={`/storage-api/get/${selected.images[0].img}?image=true&cachekey=${selected?.toString()}`} + src={getStorageUrl({ + storageId: selected.images[0].img, + params: { + media: "image", + cacheKey: selected.media_updated_at?.toISOString(), + }, + })} width={500} /> ) : ( diff --git a/apps/infoalloggi/src/components/annuncio_card.tsx b/apps/infoalloggi/src/components/annuncio_card.tsx index c7e8239..dc37568 100644 --- a/apps/infoalloggi/src/components/annuncio_card.tsx +++ b/apps/infoalloggi/src/components/annuncio_card.tsx @@ -27,6 +27,7 @@ import { DialogTitle, } from "~/components/ui/dialog"; import { camereTesti, handleConsegna } from "~/lib/annuncio_details"; +import { getStorageUrl } from "~/lib/storage_utils"; import { cn, formatCurrency } from "~/lib/utils"; import { useTranslation } from "~/providers/I18nProvider"; import type { ImagesRefs } from "~/schemas/public/ImagesRefs"; @@ -217,14 +218,26 @@ export const CardAnnuncio = ({ @@ -241,9 +254,21 @@ export const CardAnnuncio = ({ > ); @@ -275,11 +300,23 @@ export const CardAnnuncio = ({ {images && images.length > 0 && images[0] ? ( ) : ( @@ -420,7 +457,13 @@ export const CarouselAnnuncio = ({ height={400} onClick={() => handleOpenModal(idx)} priority={idx === 0} - src={`/storage-api/get/${img.img}?image=true&cachekey=${updated_at?.toString()}`} + src={getStorageUrl({ + storageId: img.img, + params: { + cacheKey: updated_at?.toISOString(), + media: "image", + }, + })} width={800} /> @@ -498,8 +559,20 @@ export const CarouselAnnuncio = ({ > ); diff --git a/apps/infoalloggi/src/components/area-riservata/allegati.tsx b/apps/infoalloggi/src/components/area-riservata/allegati.tsx index b313be2..da96079 100644 --- a/apps/infoalloggi/src/components/area-riservata/allegati.tsx +++ b/apps/infoalloggi/src/components/area-riservata/allegati.tsx @@ -36,6 +36,7 @@ import { } from "~/components/ui/dropdown-menu"; import { Separator } from "~/components/ui/separator"; import { UploadModal } from "~/components/upload_modal"; +import { getStorageUrl } from "~/lib/storage_utils"; import { cn } from "~/lib/utils"; import { useTranslation } from "~/providers/I18nProvider"; @@ -324,7 +325,12 @@ function FileList({ {format(new Date(file.uploadedAt), "d MMM yyyy")}
- +