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

199 lines
2.7 KiB
Markdown

\# 📦 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]