\# 📦 go-sync-service \*\*go-sync-service\*\* es un microservicio escrito en Go para la ejecución de tareas de sincronización basadas en cron, integrando Redis como sistema de control y configuración dinámica, y PostgreSQL mediante GORM como base de datos. Está diseñado con una arquitectura modular y desacoplada para facilitar su reutilización y escalabilidad. --- \## 🚀 Características \- 🔁 Ejecución de tareas periódicas con `robfig/cron` \- 📦 Carga de configuraciones de tareas desde Redis (configuración dinámica) \- 🧩 Arquitectura limpia con separación por capas (`ports`, `dto`, `config`, `scheduler`) \- 🛠️ Servicio desacoplado de sincronización con posibilidad de extensiones \- 🗂️ Organización clara del código con submódulos reutilizables \- 🗃️ Persistencia con PostgreSQL vía `gorm.io/gorm` \- 🧠 Logger centralizado --- \## 🛠️ Requisitos \- Go 1.20+ \- Redis \- PostgreSQL \- Docker (opcional para despliegue) --- \## 📁 Estructura del Proyecto ``` go-sync-service/ ├── cmd/ │ └── go-sync-service/ # Punto de entrada: main.go ├── internal/ │ ├── config/ # Configuración de BD, Redis, logger │ ├── scheduler/ # Orquestador de cron jobs │ ├── sync/ # Lógica de sincronización (fetchers) │ ├── domain/ │ │ ├── dto/ # Estructuras de datos │ │ └── ports/ # Interfaces de abstracción ├── README.md └── go.mod / go.sum ``` --- \## ▶️ Cómo ejecutar \### 1. Clonar el proyecto ```bash git clone https://github.com/tuusuario/go-sync-service.git cd go-sync-service ``` \### 2. Configurar variables de entorno Crear un archivo `.env` o configurar los valores necesarios: ```env DB\_HOST=localhost DB\_PORT=5432 DB\_NAME=sync\_db DB\_USER=postgres DB\_PASS=secret REDIS\_ADDR=localhost:6379 REDIS\_PASS= ``` \### 3. Ejecutar el servicio ```bash go run cmd/go-sync-service/main.go ``` --- \## 🧪 Pruebas Puedes lanzar las pruebas (si las implementas) con: ```bash go test ./... ``` --- \## 📌 Notas técnicas \- Las configuraciones de cron (`CronConfigList`) se cargan desde Redis mediante un esquema de deserialización JSON. \- El archivo `internal/scheduler/manager.go` coordina la carga y reinicio dinámico de tareas cuando hay cambios en la configuración Redis. \- La interfaz `RedisConfigProvider` permite desacoplar la fuente de datos de configuración, haciéndolo fácilmente intercambiable. --- \## 🧑‍💻 Autor Desarrollado por \[tuusuario]