Skip to content

[TASK]: Configurar PostgreSQL con PostGIS #2

@michifeli

Description

@michifeli

Descripción del Objetivo

Establecer la base de datos PostgreSQL con la extensión PostGIS en el entorno local de desarrollo.
Esta tarea configura la infraestructura para almacenar datos geográficos del campus:

  • Edificios (Multipoligonos)
  • Departamentos (Multipoligonos dentro de edificios)
  • POI (Points of interest)
  • Categorías dinámicas (escalables para agregar nuevas)

Listado de subtareas

  • Instalar PostgreSQL y PostGIS
  • Crear base de datos mapa_usm_cc con extensión PostGIS habilitada
  • Crear usuario de desarrollo con permisos necesarios
  • Crear archivo .env en la raíz con credenciales
  • Instalar Prisma en el proyecto
  • Crear prisma/schema.prisma con 4 modelos:
    • Building (id, name, geometry MultiPolygon, campus, num_floors)
    • Department (id, name, geometry MultiPolygon, building_id FK, campus)
    • Category (id, name unique, color) - dinámico para agregar nuevas
    • POI (id, name, description, image_url, geometry Point, floor, campus, category_id FK, building_id FK nullable, department_id FK nullable)
  • Agregar validaciones en schema:
    • FK constraints entre Department → Building
    • FK constraints entre POI → Building (nullable)
    • FK constraints entre POI → Department (nullable)
    • FK constraints entre POI → Category
  • Crear prisma/seed.ts con las 14 categorías base
  • Crear carpeta /migrations para versionado de schema
  • Ejecutar primera migration
  • Ejecutar seed
  • Crear script de inicialización (scripts/init-db.sh) que automatice todo
  • Crear documentación de setup y explicación teorica del sistema en la wiki del repositorio
  • Verificar conexión

Notas y Referencias

Nota importante:
El import del GeoJSON (polígonos de edificios/departamentos y puntos de POI) se realiza en FASE 4 - Cartografía.

Estructura de datos:

Building (Edificio completo - polígono grande)
├─ id, name, geometry (MultiPolygon), campus, num_floors
├─ departments: Department[]  
└─ pois: POI[] (baños, agua, etc del edificio)

Department (Departamento dentro de edificio - puede solaparse)
├─ id, name, geometry (MultiPolygon), building_id (FK), campus
└─ pois: POI[] (baños, oficinas del depto)

Category (Tipo de POI - dinámico para escalar)
├─ id, name (único: "Baño", "Agua", "Comida", etc)
├─ color (para renderizar en mapa: "#FF5733")
└─ pois: POI[]

POI (Punto de Interés)
├─ id, name, description, image_url (Cloudflare R2)
├─ geometry (Point - coordenada única)
├─ floor (número de piso, nullable si está afuera)
├─ campus (cc, jose_miguel, san_joaquin, concepcion, etc)
├─ category_id (FK - dinámico)
├─ building_id (FK - nullable, para puntos sueltos)
└─ department_id (FK - nullable, no todos están en depto)

Validaciones:

  • Si POI tiene department_id, automáticamente hereda building_id del department.

14 Categorías base (seed.ts):

  1. Baños
  2. Agua (dispensadores)
  3. Comida (cafetería)
  4. Deportes (gimnasio, cancha, etc)
  5. Salas de Estudio
  6. Impresoras
  7. Bancos/Cajeros
  8. Tiendas
  9. Cultura (aula magna, salon de eventos)
  10. Auditorios (E300, C201, todo lo que se considere auditorio)
  11. Bibliotecas
  12. Puntos de Interés (placas conmemorativas, magnolio, etc)
  13. Departamentos (ver NOTA)
  14. Edificios (ver NOTA)

NOTA: Departamentos y Edificios NO son POI, son tablas separadas.
Las categorías son para los PUNTOS específicos dentro del campus.

Recomendación para desarrollo:
Usa Docker para hacer portable el proyecto.
Así todos en el equipo tienen BD igual sin instalar software local.

Referencias útiles:

Metadata

Metadata

Assignees

Labels

Tarea TecnicaSe tiene que realizar para continuar con el desarrollo

Type

No fields configured for Task.

Projects

Status
Pendientes

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions