diff --git a/front/src/app/embalse-provincia/[provincia]/page.tsx b/front/src/app/embalse-provincia/[provincia]/page.tsx index 41edcda..88f8f30 100644 --- a/front/src/app/embalse-provincia/[provincia]/page.tsx +++ b/front/src/app/embalse-provincia/[provincia]/page.tsx @@ -1,17 +1,20 @@ import { PROVINCIAS } from "@/core/constants"; import { EmbalseProvinciaPod } from "@/pods/embalse-provincia"; +import { mapEmbalseListFromApiToLookup } from "@/pods/embalse-provincia/embalse-provincia.mapper"; +import { getEmbalsesByProvince } from "@/pods/embalse-provincia/embalse-provincia.repository"; import { Metadata } from "next"; interface Props { params: Promise<{ provincia: string }>; } +const getNombreProvincia = (id: string): string => + PROVINCIAS.find((p) => p.id === id)?.name ?? "Provincia"; + export async function generateMetadata({ params }: Props): Promise { const { provincia } = await params; - const nombreProvincia = PROVINCIAS.find( - (province) => province.id === provincia, - )?.name; + const nombreProvincia = getNombreProvincia(provincia); return { title: `Embalses de ${nombreProvincia}`, @@ -21,24 +24,18 @@ export async function generateMetadata({ params }: Props): Promise { export default async function EmbalseProvinciaListadoPage({ params }: Props) { const { provincia } = await params; - const nombreProvincia = PROVINCIAS.find( - (province) => province.id === provincia, - )?.name; + const nombreProvincia = getNombreProvincia(provincia); + const embalsesByProvinceFromApi = + await getEmbalsesByProvince(nombreProvincia); - // TODO: Reemplazar con datos reales obtenidos de la API - const reservoirs = [ - { id: "ullibarri-gamboa", name: "Ullibarri-Gamboa" }, - { id: "zadorra", name: "Zadorra" }, - { id: "urrúnaga", name: "Urrunaga" }, - { id: "maroño", name: "Maroño" }, - { id: "albina", name: "Albina" }, - { id: "santa-engracia", name: "Santa Engracia" }, - ]; + const embalsesByProvinceLookup = mapEmbalseListFromApiToLookup( + embalsesByProvinceFromApi, + ); return ( ); } diff --git a/front/src/pods/embalse-provincia/embalse-provincia.api-model.ts b/front/src/pods/embalse-provincia/embalse-provincia.api-model.ts new file mode 100644 index 0000000..ff4f9c8 --- /dev/null +++ b/front/src/pods/embalse-provincia/embalse-provincia.api-model.ts @@ -0,0 +1,4 @@ +export interface EmbalseApi { + _id: string; + name: string; +} \ No newline at end of file diff --git a/front/src/pods/embalse-provincia/embalse-provincia.component.tsx b/front/src/pods/embalse-provincia/embalse-provincia.component.tsx index a5a53ee..4f6bc7d 100644 --- a/front/src/pods/embalse-provincia/embalse-provincia.component.tsx +++ b/front/src/pods/embalse-provincia/embalse-provincia.component.tsx @@ -12,7 +12,11 @@ export const EmbalseProvincia: React.FC = (props) => { const { nombreProvincia, embalses } = props; return ( -

Embalses de {nombreProvincia}

+ {embalses.length === 0 ? ( +

No se encontraron embalses para {nombreProvincia}

+ ) : ( +

Embalses de {nombreProvincia}

+ )} {embalses.map(({ id, name }) => ( diff --git a/front/src/pods/embalse-provincia/embalse-provincia.mapper.ts b/front/src/pods/embalse-provincia/embalse-provincia.mapper.ts new file mode 100644 index 0000000..cc1ee36 --- /dev/null +++ b/front/src/pods/embalse-provincia/embalse-provincia.mapper.ts @@ -0,0 +1,13 @@ +import { Lookup } from "@/common/models"; +import { EmbalseApi } from "./embalse-provincia.api-model"; + +export const mapEmbalseListFromApiToLookup = ( + embalses: EmbalseApi[] +): Lookup[] => + Array.isArray(embalses) + ? embalses.map((embalse) => ({ + id: embalse._id, + text: embalse.name, + name: embalse.name, + })) + : []; \ No newline at end of file diff --git a/front/src/pods/embalse-provincia/embalse-provincia.repository.ts b/front/src/pods/embalse-provincia/embalse-provincia.repository.ts new file mode 100644 index 0000000..64d8304 --- /dev/null +++ b/front/src/pods/embalse-provincia/embalse-provincia.repository.ts @@ -0,0 +1,38 @@ +"use server"; + +import { getDb } from "@/lib/mongodb"; +import type { EmbalseApi } from "./embalse-provincia.api-model"; + +export async function getEmbalsesByProvince( + provincia: string, +): Promise { + try { + const db = await getDb(); + const docs = await db + .collection("embalses") + .find( + { provincia }, + { + projection: { + _id: 1, + nombre: 1, + slug: 1, + }, + }, + ) + .toArray(); + + console.log(docs); + return docs.map((doc) => ({ + _id: doc.slug ?? String(doc._id), + name: doc.nombre ?? "", + })); + } catch (error) { + console.warn( + "getEmbalsesByProvince: MongoDB not available (build time?), returning empty array.", + "Error:", + error instanceof Error ? error.message : error, + ); + return []; + } +} diff --git a/package-lock.json b/package-lock.json index bdf99ea..9a32a24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5853,17 +5853,16 @@ "arcgis": "*", "db-model": "*", "mongodb": "^6.19.0", - "scraping-cuenca-mediterranea": "*" - }, - "devDependencies": { - "@types/prompts": "^2.4.9", - "prompts": "^2.4.2", "scraping-cuenca-cantabrico": "*", "scraping-cuenca-catalana": "*", "scraping-cuenca-duero": "*", "scraping-cuenca-guadalquivir": "*", "scraping-cuenca-jucar": "*", "scraping-cuenca-mediterranea": "*" + }, + "devDependencies": { + "@types/prompts": "^2.4.9", + "prompts": "^2.4.2" } }, "packages/db-model": {