2025-10-15 10:43:58 -04:00

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]