https://github.com/rgdevment/open-data-service
https://github.com/rgdevment/open-data-service
Last synced: 5 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/rgdevment/open-data-service
- Owner: rgdevment
- Created: 2025-05-03T04:35:01.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-09-10T23:32:57.000Z (10 months ago)
- Last Synced: 2025-09-11T02:26:47.210Z (10 months ago)
- Language: TypeScript
- Size: 1.08 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
# Open Data Services
[](https://github.com/rgdevment/open-data-services/actions/workflows/main.yml)
[](https://github.com/rgdevment/open-data-services/actions/workflows/codeql.yml)
[](https://sonarcloud.io/summary/new_code?id=rgdevment_open-data-service)
[](https://opensource.org/licenses/MIT)
Un monorepo de alto rendimiento con APIs de datos públicos para la comunidad de desarrolladores. Este proyecto está gestionado con **Nx** para potenciar la compartición de código, los builds inteligentes y una experiencia de desarrollo consistente en todo el ecosistema.
---
## 🚀 Stack Tecnológico
La arquitectura del proyecto se basa en un conjunto de tecnologías modernas, robustas y escalables.
| Categoría | Tecnología | Propósito |
| :--- | :--- | :--- |
| **Orquestación** | [Nx](https://nx.dev/), [pnpm](https://pnpm.io/) | Gestión del monorepo, caché de builds, análisis de dependencias. |
| **Backend** | [NestJS](https://nestjs.com/), [TypeScript](https://www.typescriptlang.org/) | Framework principal para construir APIs eficientes y escalables. |
| **Base de Datos** | [MariaDB](https://mariadb.org/), [TypeORM](https://typeorm.io/) | Persistencia de datos relacional y Object-Relational Mapper. |
| **Caché** | [Redis](https://redis.io/) | Caché en memoria para optimizar el rendimiento de las respuestas. |
| **DevOps** | [Docker](https://www.docker.com/), [GitHub Actions](https://github.com/features/actions) | Contenerización, CI/CD, builds y despliegues automatizados. |
| **Monitoreo** | [Prometheus](https://prometheus.io/) | Exposición de métricas de la aplicación para observabilidad. |
---
## 🌐 Ecosistema de Servicios
Actualmente, el ecosistema se compone de los siguientes servicios y librerías:
### Aplicaciones ("apps/")
* **countries-service**: Una API REST completa que sirve información geográfica detallada de países.
* **indicators-service**: Una API REST enfocada en entregar indicadores financieros y económicos de Chile.
### Librerías Compartidas ("libs/")
* **@libs/database**: Centraliza la conexión y configuración de la base de datos.
* **@libs/security**: Encapsula toda la lógica de seguridad y autenticación (JWT).
* **@libs/cache**: Provee una capa de caché unificada con Redis.
* **@libs/health & @libs/prometheus**: Exponen endpoints de "health check" y métricas.
* **@libs/common**: Contiene utilidades, enums y DTOs comunes a todo el ecosistema.
---
## 🏁 Primeros Pasos
### Requisitos Previos
- Node.js v22+
- pnpm v10+
- Docker y Docker Compose
- Make
### Instalación
1. **Clonar el repositorio:**
git clone [https://github.com/rgdevment/open-data-services.git](https://github.com/rgdevment/open-data-services.git)
cd open-data-services
2. **Instalar dependencias:**
pnpm install
3. **Crear la red de Docker:**
make ensure-network
4. **Configurar variables de entorno:**
Copia los archivos ".env.example" a ".env" dentro de la carpeta de cada aplicación que quieras ejecutar.
cp apps/countries/.env.example apps/countries/.env
cp apps/indicators/.env.example apps/indicators/.env
---
## 🛠️ Flujo de Trabajo en Desarrollo
El "Makefile" está optimizado para simplificar la interacción con el entorno.
### Levantar un Servicio
Para trabajar en la API de "countries" y sus servicios dependientes ("mariadb", "redis"):
make dev APP=countries
### Comandos de Desarrollo Útiles
- **make dev APP="nombre"**: Inicia el entorno de desarrollo para la app especificada.
- **make dev-down**: Detiene y elimina todos los contenedores de desarrollo.
- **make logs-dev APP="nombre"**: Muestra los logs en tiempo real de una aplicación.
- **make test APP="nombre"**: Ejecuta los tests de una app o librería (aprovechando la caché de Nx).
---
## 🚢 Build y Despliegue a Producción
- **make build APP="nombre"**: Construye la imagen de Docker de producción para una app.
- **make prod**: Levanta todo el stack de producción definido en "docker-compose.yml".
- **make prod-down**: Detiene y elimina todos los contenedores de producción.
---
## 📄 Documentación de APIs
Cada API incluye su documentación interactiva con **Swagger**. Una vez que una aplicación está corriendo, puedes acceder a ella en la ruta "/docs".
**Ejemplo (corriendo "countries" en desarrollo):**
http://localhost:3024/docs
---
## 📜 Licencia
Este proyecto es de código abierto y está distribuido bajo la **Licencia MIT**.