Repositorio del proyecto de seguimiento a la generación energética por tipo de fuente.
API REST desarrollada como ejercicio demostrativo para el curso de Tópicos Avanzados de Bases de Datos, enfocada en la implementación del patrón repositorio y la separación por capas. El dominio de problema aborda el registro de composición de la matriz energética de un país, permitiendo el seguimiento de la producción diaria de diferentes fuentes de energía.
- Demostrar la implementación del patrón repositorio.
- Evidenciar la separación clara entre capas de la aplicación.
- Mostrar el desacople de la capa de persistencia para intercambio de bases de datos.
- Implementar versionamiento de APIs siguiendo estándares de la industria.
- Implementar paginación en las respuestas de las peticiones con gran cantidad de resultados.
- Aplicar mejores prácticas de seguridad usando GUIDs en lugar de IDs secuenciales.
Controllers → Services → Repositories (via Interfaces) → DB Context
↓
IRepositories (Interfaces)
- Controllers: Capa de presentación y manejo de HTTP.
- Services: Lógica de negocio y reglas de dominio.
- Interfaces: Contratos para desacoplamiento.
- Repositories: Implementaciones de acceso a datos.
- Models: Modelos de dominio.
- DBContext: Contextos y configuraciones de base de datos.
Ubicaciones geográficas para las plantas de generación
Id(UUID): Identificador único.CodigoMunicipio(TEXT): Código DIVIPOLA del departamento.CodigoDepartamento(TEXT): Código DIVIPOLA del municipio.IsoDepartamento(TEXT): Código ISO 3166-2:CO del departamento.NombreDepartamento(TEXT): Nombre oficial del departamento según DIVIPOLA.NombreMunicipio(TEXT): Nombre oficial del municipio según DIVIPOLA.
Catálogo de tipos de fuentes energéticas.
Id(UUID): Identificador único.Nombre(TEXT): Nombre del tipo de fuente.Descripcion(TEXT): Descripción detallada.EsRenovable(BOOLEAN): Indica si es fuente renovable.
Registro de plantas generadoras de energía
Id(UUID): Identificador único.Nombre(TEXT): Nombre de la planta.TipoFuenteId(UUID): Referencia al tipo de fuente.UbicacionId(UUID): Referencia a la ubicación geográfica.Capacidad(DOUBLE): Capacidad en Megavatios.
Registro diario de producción energética.
Id(UUID): Identificador único.PlantaId(UUID): Referencia a la planta.Fecha(DATE): Fecha del registro.Valor(DOUBLE): Producción en Megavatios.
- Hidroeléctrica
- Solar Fotovoltáica
- Eólica
- Termoeléctrica por Combustibles Fósiles
- Geotérmica
- Nuclear
- Framework: .NET 9.x
- Base de Datos: PostgreSQL 17.x / MongoDB 8.x
- ORM: Dapper (micro-ORM) 2.1.x
- Documentación: Swagger/OpenAPI
- Identificadores: UUID/GUID para seguridad en versión relacional
- Driver DB Relacional: Npgsql 9.0.3
- Driver DB NoSQL: MongoDB Driver 3.5.x
El versionamiento de los endpoints utilizará parámetro en el encabezado, en lugar de incluirlo en el URL
GET /api/ubicaciones # Listar todas
GET /api/ubicaciones/{id} # Obtener por ID
GET /api/ubicaciones/{id}/plantas # Obtener plantas asociadas por ID de la ubicaciónGET /api/tipos # Listar todos
GET /api/tipos/{id} # Obtener por ID
GET /api/tipos/{id}/plantas # Obtener plantas asociadas por ID del tipo de fuente
POST /api/tipos # Crear nuevo
PUT /api/tipos # Actualizar completo
DELETE /api/tipos/{id} # EliminarGET /api/plantas # Listar todas
GET /api/plantas/{id} # Obtener por ID
POST /api/plantas # Crear nueva
PUT /api/plantas/ # Actualizar completa
DELETE /api/plantas/{id} # EliminarGET /api/produccion # Listar todos
GET /api/produccion/{id} # Obtener por ID del evento
GET /api/produccion/planta/{id} # Por planta
GET /api/produccion/fecha/{fecha} # Por fecha
POST /api/produccion # Crear registro
PUT /api/produccion/ # Actualizar completo
DELETE /api/produccion/{id} # EliminarGET /api/estadisticas/{fecha} # Resumen diario
GET /api/estadisticas/{fecha}/tipo/ # Por tipo de fuente
GET /api/estadisticas/{fecha}/ubicaciones # Por ubicación geográfica
GET /api/estadisticas/rango-fechas?inicio={fecha}&fin={fecha} # Por rango de fechas