{"id":42201143,"url":"https://github.com/rgdevment/open-data-service","last_synced_at":"2026-01-27T00:25:39.250Z","repository":{"id":291213658,"uuid":"976948474","full_name":"rgdevment/open-data-service","owner":"rgdevment","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-10T23:32:57.000Z","size":1129,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-11T02:26:47.210Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rgdevment.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"rgdevment"}},"created_at":"2025-05-03T04:35:01.000Z","updated_at":"2025-09-10T23:33:01.000Z","dependencies_parsed_at":"2025-08-26T04:13:06.462Z","dependency_job_id":"516adf8c-03ad-4011-8fcc-1af7c3ce2fa7","html_url":"https://github.com/rgdevment/open-data-service","commit_stats":null,"previous_names":["rgdevment/open-data-service"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rgdevment/open-data-service","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgdevment%2Fopen-data-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgdevment%2Fopen-data-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgdevment%2Fopen-data-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgdevment%2Fopen-data-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rgdevment","download_url":"https://codeload.github.com/rgdevment/open-data-service/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgdevment%2Fopen-data-service/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28792963,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T21:49:50.245Z","status":"ssl_error","status_checked_at":"2026-01-26T21:48:29.455Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-27T00:25:38.523Z","updated_at":"2026-01-27T00:25:39.236Z","avatar_url":"https://github.com/rgdevment.png","language":"TypeScript","funding_links":["https://github.com/sponsors/rgdevment"],"categories":[],"sub_categories":[],"readme":"# Open Data Services\n\n[![Build CI](https://github.com/rgdevment/open-data-services/actions/workflows/main.yml/badge.svg)](https://github.com/rgdevment/open-data-services/actions/workflows/main.yml)\n[![CodeQL](https://github.com/rgdevment/open-data-services/actions/workflows/codeql.yml/badge.svg)](https://github.com/rgdevment/open-data-services/actions/workflows/codeql.yml)\n[![SonarCloud Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=rgdevment_open-data-service\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=rgdevment_open-data-service)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nUn 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.\n\n---\n## 🚀 Stack Tecnológico\n\nLa arquitectura del proyecto se basa en un conjunto de tecnologías modernas, robustas y escalables.\n\n| Categoría | Tecnología | Propósito |\n| :--- | :--- | :--- |\n| **Orquestación** | [Nx](https://nx.dev/), [pnpm](https://pnpm.io/) | Gestión del monorepo, caché de builds, análisis de dependencias. |\n| **Backend** | [NestJS](https://nestjs.com/), [TypeScript](https://www.typescriptlang.org/) | Framework principal para construir APIs eficientes y escalables. |\n| **Base de Datos** | [MariaDB](https://mariadb.org/), [TypeORM](https://typeorm.io/) | Persistencia de datos relacional y Object-Relational Mapper. |\n| **Caché** | [Redis](https://redis.io/) | Caché en memoria para optimizar el rendimiento de las respuestas. |\n| **DevOps** | [Docker](https://www.docker.com/), [GitHub Actions](https://github.com/features/actions) | Contenerización, CI/CD, builds y despliegues automatizados. |\n| **Monitoreo** | [Prometheus](https://prometheus.io/) | Exposición de métricas de la aplicación para observabilidad. |\n\n---\n## 🌐 Ecosistema de Servicios\n\nActualmente, el ecosistema se compone de los siguientes servicios y librerías:\n\n### Aplicaciones (\"apps/\")\n* **countries-service**: Una API REST completa que sirve información geográfica detallada de países.\n* **indicators-service**: Una API REST enfocada en entregar indicadores financieros y económicos de Chile.\n\n### Librerías Compartidas (\"libs/\")\n* **@libs/database**: Centraliza la conexión y configuración de la base de datos.\n* **@libs/security**: Encapsula toda la lógica de seguridad y autenticación (JWT).\n* **@libs/cache**: Provee una capa de caché unificada con Redis.\n* **@libs/health \u0026 @libs/prometheus**: Exponen endpoints de \"health check\" y métricas.\n* **@libs/common**: Contiene utilidades, enums y DTOs comunes a todo el ecosistema.\n\n---\n## 🏁 Primeros Pasos\n\n### Requisitos Previos\n- Node.js v22+\n- pnpm v10+\n- Docker y Docker Compose\n- Make\n\n### Instalación\n1.  **Clonar el repositorio:**\n\n        git clone [https://github.com/rgdevment/open-data-services.git](https://github.com/rgdevment/open-data-services.git)\n        cd open-data-services\n\n2.  **Instalar dependencias:**\n\n        pnpm install\n\n3.  **Crear la red de Docker:**\n\n        make ensure-network\n\n4.  **Configurar variables de entorno:**\n    Copia los archivos \".env.example\" a \".env\" dentro de la carpeta de cada aplicación que quieras ejecutar.\n\n        cp apps/countries/.env.example apps/countries/.env\n        cp apps/indicators/.env.example apps/indicators/.env\n\n---\n## 🛠️ Flujo de Trabajo en Desarrollo\n\nEl \"Makefile\" está optimizado para simplificar la interacción con el entorno.\n\n### Levantar un Servicio\nPara trabajar en la API de \"countries\" y sus servicios dependientes (\"mariadb\", \"redis\"):\n\n        make dev APP=countries\n\n### Comandos de Desarrollo Útiles\n- **make dev APP=\"nombre\"**: Inicia el entorno de desarrollo para la app especificada.\n- **make dev-down**: Detiene y elimina todos los contenedores de desarrollo.\n- **make logs-dev APP=\"nombre\"**: Muestra los logs en tiempo real de una aplicación.\n- **make test APP=\"nombre\"**: Ejecuta los tests de una app o librería (aprovechando la caché de Nx).\n\n---\n## 🚢 Build y Despliegue a Producción\n\n- **make build APP=\"nombre\"**: Construye la imagen de Docker de producción para una app.\n- **make prod**: Levanta todo el stack de producción definido en \"docker-compose.yml\".\n- **make prod-down**: Detiene y elimina todos los contenedores de producción.\n\n---\n## 📄 Documentación de APIs\n\nCada API incluye su documentación interactiva con **Swagger**. Una vez que una aplicación está corriendo, puedes acceder a ella en la ruta \"/docs\".\n\n**Ejemplo (corriendo \"countries\" en desarrollo):**\nhttp://localhost:3024/docs\n\n---\n## 📜 Licencia\n\nEste proyecto es de código abierto y está distribuido bajo la **Licencia MIT**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frgdevment%2Fopen-data-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frgdevment%2Fopen-data-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frgdevment%2Fopen-data-service/lists"}