199 lines
2.7 KiB
Markdown
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]
|
|
|