2.7 KiB
# 📦 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
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:
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
go run cmd/go-sync-service/main.go
## 🧪 Pruebas
Puedes lanzar las pruebas (si las implementas) con:
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]