implementacion - Lemoncode/embalse-info GitHub Wiki

Global

Estructura del mono repo

.
├── packages
│   ├── db-model
│   └── db-commands-import
├── integrations
│   ├── arcgis
│   │   ├── integration
│   │   └── console-runner
│   ├── scrapi-cuenca-andalucia
│   │   ├── integration
│   │   └── console-runner
│   └── scraping-cuenca-cantabrico
│       ├── integration
│       └── console-runner
├── functions
│   ├── arcgis-function
│   └── scraping-functions
├── rest-api (*) Lo vamos a eliminar y lo dejamos en NextJS
└── front

Tanto packages como integrations serán librerías internas y tendrás dependencia de compilación.

La idea es que podamos probar cada herramienta de integración con un console runner, que por ejemplo podría volcar a un fichero.

Las azure functions usaran esas integraciones y tiraran de db-commands-import para volcarlas a BBDD.

Backend

Modelado

Ver modelo en proyecto (pedir permiso): https://drive.google.com/open?id=1y6TD1BQqxnzuzYa6UQuqZDdmxZEP87YW&usp=drive_fs

https://github.com/Lemoncode/gex-doc

Propuesta End points

Duda

¿Utilizamos GET para las lecturas o usamos POSTs y así podemos meter cuerpo con parametros?

Endpoints

Obtener datos de un embalse

Esto lo que haremos cuando queramos cargar los datos de un embalse, creo que a nivel posicionamiento deberíamos de generar un slug para cada embalse (fragmento que le pasemos como paremetro)

Verbo: GET ?

Parametros:

// Usamos el _id interno de mongo o el embalse_id?
// Creo que mejor nombre, pero tener como slug, para así poder tener SEO
nombre : string

Respuesta

{
  "embalse_id": "E12345",
  "nombre": "Embalse El Valle",
  "cuenca": {
    "id": "C456",
    "nombre": "Cuenca del Río Verde"
  },
  "provincia": {
    "nombre": "Granada"
  },
  "capacidad": 120000000,
  "aguaActual": 85000000,
  "fechaMedidaAguaActual": "2025-06-20",
  "capacidad_total": 120000000,
  "uso": ["abastecimiento", "riego", "generación eléctrica"],
  "descripcion": "El embalse El Valle es una infraestructura hidráulica clave en la provincia de Granada. Se construyó para garantizar el suministro de agua potable, el riego agrícola y la producción de energía hidroeléctrica. Además, actúa como regulador del caudal del río Verde, contribuyendo a la prevención de inundaciones."
}

Obtener listado de provincias

Esto nos servira para que un crawler pueda econtrar todos los pantanos, podríamos poner en el footer todos las provincias y al pinchar en una de ella fuera al listado de embalses.

También se podría hacer por comunidad autónoma.

Verbo: GET ?

Parametros: Ninguno

Respuesta

[
  { "id": 1, "slug": "alava", "nombre": "Álava" },
  { "id": 2, "slug": "albacete", "nombre": "Albacete" },
  { "id": 3, "slug": "alicante", "nombre": "Alicante" },
  { "id": 4, "slug": "almeria", "nombre": "Almería" },
  { "id": 5, "slug": "asturias", "nombre": "Asturias" },
  { "id": 6, "slug": "avila", "nombre": "Ávila" },
  { "id": 7, "slug": "badajoz", "nombre": "Badajoz" },
  { "id": 8, "slug": "barcelona", "nombre": "Barcelona" },
  { "id": 9, "slug": "burgos", "nombre": "Burgos" },
  { "id": 10, "slug": "caceres", "nombre": "Cáceres" },
  { "id": 11, "slug": "cadiz", "nombre": "Cádiz" },
  { "id": 12, "slug": "cantabria", "nombre": "Cantabria" },
  { "id": 13, "slug": "castellon", "nombre": "Castellón" },
  { "id": 14, "slug": "ciudad-real", "nombre": "Ciudad Real" },
  { "id": 15, "slug": "cordoba", "nombre": "Córdoba" },
  { "id": 16, "slug": "cuenca", "nombre": "Cuenca" },
  { "id": 17, "slug": "gerona", "nombre": "Gerona" },
  { "id": 18, "slug": "granada", "nombre": "Granada" },
  { "id": 19, "slug": "guadalajara", "nombre": "Guadalajara" },
  { "id": 20, "slug": "guipuzcoa", "nombre": "Guipúzcoa" },
  { "id": 21, "slug": "huelva", "nombre": "Huelva" },
  { "id": 22, "slug": "huesca", "nombre": "Huesca" },
  { "id": 23, "slug": "jaen", "nombre": "Jaén" },
  { "id": 24, "slug": "la-coruna", "nombre": "La Coruña" },
  { "id": 25, "slug": "la-rioja", "nombre": "La Rioja" },
  { "id": 26, "slug": "las-palmas", "nombre": "Las Palmas" },
  { "id": 27, "slug": "leon", "nombre": "León" },
  { "id": 28, "slug": "lerida", "nombre": "Lérida" },
  { "id": 29, "slug": "lugo", "nombre": "Lugo" },
  { "id": 30, "slug": "madrid", "nombre": "Madrid" },
  { "id": 31, "slug": "malaga", "nombre": "Málaga" },
  { "id": 32, "slug": "murcia", "nombre": "Murcia" },
  { "id": 33, "slug": "navarra", "nombre": "Navarra" },
  { "id": 34, "slug": "orense", "nombre": "Orense" },
  { "id": 35, "slug": "palencia", "nombre": "Palencia" },
  { "id": 36, "slug": "pontevedra", "nombre": "Pontevedra" },
  { "id": 37, "slug": "salamanca", "nombre": "Salamanca" },
  { "id": 38, "slug": "santa-cruz-de-tenerife", "nombre": "Santa Cruz de Tenerife" },
  { "id": 39, "slug": "segovia", "nombre": "Segovia" },
  { "id": 40, "slug": "sevilla", "nombre": "Sevilla" },
  { "id": 41, "slug": "soria", "nombre": "Soria" },
  { "id": 42, "slug": "tarragona", "nombre": "Tarragona" },
  { "id": 43, "slug": "teruel", "nombre": "Teruel" },
  { "id": 44, "slug": "toledo", "nombre": "Toledo" },
  { "id": 45, "slug": "valencia", "nombre": "Valencia" },
  { "id": 46, "slug": "valladolid", "nombre": "Valladolid" },
  { "id": 47, "slug": "vizcaya", "nombre": "Vizcaya" },
  { "id": 48, "slug": "zamora", "nombre": "Zamora" },
  { "id": 49, "slug": "zaragoza", "nombre": "Zaragoza" },
  { "id": 50, "slug": "ceuta-y-melilla", "nombre": "Ceuta y Melilla" }
]

Obtener embalse por provincia

Y ahora un endpoint que por provincia me dice que embalses tenemos.

[
  {
    "embalse_id": "GR001",
    "nombre": "Embalse de Quéntar",
    "cuenca": {
      "id": "CU001",
      "nombre": "Cuenca del Guadalquivir"
    },
    "provincia": {
      "nombre": "Granada"
    },
    "capacidad": 13500000,
    "aguaActual": 9200000,
    "fechaMedidaAguaActual": "2025-06-20",
    "capacidad_total": 13500000,
    "uso": ["abastecimiento", "riego"],
    "descripcion": "El embalse de Quéntar se ubica en la Sierra de Huétor. Es fundamental para el suministro de agua potable a Granada capital y parte de su área metropolitana."
  },
  {
    "embalse_id": "GR002",
    "nombre": "Embalse de Canales",
    "cuenca": {
      "id": "CU001",
      "nombre": "Cuenca del Guadalquivir"
    },
    "provincia": {
      "nombre": "Granada"
    },
    "capacidad": 70000000,
    "aguaActual": 54000000,
    "fechaMedidaAguaActual": "2025-06-20",
    "capacidad_total": 70000000,
    "uso": ["abastecimiento", "riego", "hidroeléctrico"],
    "descripcion": "Situado junto al embalse de Quéntar, el embalse de Canales sirve de regulación y apoyo para el suministro de agua y producción de energía hidroeléctrica."
  },
  {
    "embalse_id": "GR003",
    "nombre": "Embalse de Rules",
    "cuenca": {
      "id": "CU002",
      "nombre": "Cuenca del Guadalfeo"
    },
    "provincia": {
      "nombre": "Granada"
    },
    "capacidad": 114000000,
    "aguaActual": 88000000,
    "fechaMedidaAguaActual": "2025-06-20",
    "capacidad_total": 114000000,
    "uso": ["riego", "control de avenidas"],
    "descripcion": "El embalse de Rules, en la costa de Granada, fue diseñado para el riego intensivo del valle del río Guadalfeo y como protección contra inundaciones."
  }
]

Busqueda por texto libre

En la página principal de infoembalses, mostraremos un campo de texto libre para buscar, podemos empezar por dejar buscar por el nombre del pantano (más adelante podríamos meter más campos), y te puede devolver una lista de pantanos que cumplen con el patrón de busqueda (podría ser nombre pantano, slug, provincia para así dar algo de contexto).

Verbo: GET ?

Parametros:

busqueda: string

Respuesta

[
  {
    "embalse_id": "GR001",
    "slug": "embalse-de-quentar",
    "nombre": "Embalse de Quéntar",
    "provincia": "Granada"
  },
  {
    "embalse_id": "GR002",
    "slug": "embalse-de-canales",
    "nombre": "Embalse de Canales",
    "provincia": "Granada"
  },
  {
    "embalse_id": "GR003",
    "slug": "embalse-de-rules",
    "nombre": "Embalse de Rules",
    "provincia": "Granada"
  },
  {
    "embalse_id": "SE001",
    "slug": "embalse-del-pintado",
    "nombre": "Embalse del Pintado",
    "provincia": "Sevilla"
  },
  {
    "embalse_id": "MA001",
    "slug": "embalse-de-la-vinuela",
    "nombre": "Embalse de La Viñuela",
    "provincia": "Málaga"
  },
  {
    "embalse_id": "HU001",
    "slug": "embalse-de-aracena",
    "nombre": "Embalse de Aracena",
    "provincia": "Huelva"
  }
]