et

module
v1.0.14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 5, 2026 License: MIT

README

ET: Librería para servicios y herramientas en Go

ET es una librería modular en Go para construir servicios, CLIs y aplicaciones web con componentes reutilizables: HTTP server y routing, caché, eventos, jobs, workflows, seguridad (JWT claims), utilidades, y más.

Estado del proyecto

  • Módulo: github.com/cgalvisleon/et
  • Go: 1.23+
  • Licencia: MIT

Instalación

go get github.com/cgalvisleon/et@latest

Para usar paquetes individuales, importa el módulo y el paquete correspondiente, por ejemplo:

import (
    "github.com/cgalvisleon/et/et"
)

Estructura del repositorio

Estructura actual de et/ con una breve descripción por paquete:

et/
├── arg/           # Gestión de argumentos de línea de comandos
├── aws/           # Integración con servicios AWS (S3, SES, SMS)
├── brevo/         # Servicios de comunicación (Email, SMS, WhatsApp)
├── cache/         # Caché (Redis) y Pub/Sub
├── claim/         # Claims y permisos (JWT)
├── cmd/           # Comandos CLI y ejecutables
│   ├── apigateway/  # API Gateway y proxy
│   ├── context/     # Gestión de contexto de aplicación
│   ├── create/      # Generación de proyectos y plantillas
│   ├── daemon/      # Servicios en segundo plano y systemd
│   ├── et/          # Comando principal
│   ├── prepare/     # Preparador de proyectos existentes
│   └── ws/          # Servidor WebSocket dedicado
├── cmds/          # Sistema de comandos y etapas de ejecución
├── config/        # Configuración y parámetros de aplicación
├── create/        # Templates y generadores de código
├── crontab/       # Tareas programadas con persistencia
├── dt/            # Data Transfer Objects (DTOs) y validación
├── envar/         # Variables de entorno / configuración
├── ephemeral/     # Datos temporales y efímeros
├── et/            # Utilidades principales y tipos JSON
├── ettp/          # Servidor HTTP y routing
├── event/         # Sistema de eventos
├── file/          # Manejo de archivos y sincronización
├── graph/         # Soporte Graph/GraphQL
├── jrpc/          # JSON-RPC entre servicios
├── logs/          # Logs estructurados
├── mem/           # Memoria compartida y sincronización
├── middleware/    # Middleware HTTP (auth, CORS, logger, etc.)
├── msg/           # Mensajes del sistema y localización
├── race/          # Detección de condiciones de carrera
├── reg/           # Registro de servicios y service discovery
├── request/       # Request HTTP unificado
├── resilience/    # Patrones de resiliencia (circuit breakers, etc.)
├── response/      # Response HTTP unificado
├── router/        # Enrutamiento HTTP
├── server/        # Servidor HTTP base
├── service/       # Servicios y utilidades de negocio
├── stdrout/       # Rutas estándar y endpoints comunes
├── strs/          # Utilidades de strings
├── timezone/      # Zonas horarias
├── units/         # Unidades de medida y conversiones
├── utility/       # Utilidades generales (crypto, validación, etc.)
└── ws/            # WebSocket y comunicación bidireccional

## Paquetes clave (visión general)
- **HTTP**: `ettp/`, `router/`, `middleware/`, `server/`, `stdrout/`, `request/`, `response/`.
- **Mensajería/IPC**: `event/`, `jrpc/`.
- **Persistencia temporal**: `cache/`, `mem/`, `ephemeral/`.
- **Planificación**: `crontab/`.
- **Seguridad**: `claim/` (JWT).
- **Integraciones**: `aws/`, `brevo/`.
- **Soporte de dominio**: `service/`, `dt/`.
- **Utilities**: `utility/`, `strs/`, `timezone/`, `units/`, `logs/`.
- **CLI**: `cmd/`, `cmds/`, `arg/`.

## CLI y comandos
- Los ejecutables y entradas de CLI se encuentran en `cmd/`.
- El sistema de orquestación de comandos y etapas está en `cmds/`.
- Revisa cada subdirectorio de `cmd/` para ver el propósito de cada comando (por ejemplo, `cmd/et/`).

## Configuración y entorno
- Variables y carga de entorno: `envar/`, archivo `.env` y `config/`.
- Recomendado: documentar las variables requeridas por cada paquete que las consuma.

### API de configuración (nueva)
Funciones principales en `config/`:
- **Lectura**: `GetStr`, `GetInt`, `GetInt64`, `GetBool`, `GetFloat`, `GetTime`.
- **Escritura**: `Set(key, val)` y `SetEnvar(values et.Json)`.
- **Parámetros CLI**: `ParamStr`, `ParamInt`, `ParamInt64`, `ParamBool`, `ParamFloat`, `ParamTime`.
- **App metadata**: `config.App` mantiene `name`, `version`, `company`, `host`, `port`, `stage`, etc. Puedes serializar con `App.ToJson()`.

Ejemplo rápido:
```go
name := config.GetStr("NAME", "et")
port := config.GetInt("PORT", 3300)
config.Set("DEBUG", true)
argsPort := config.ParamInt("port", port)
_ = config.App.ToJson() // et.Json con la configuración activa

Integraciones

  • AWS: utilidades para S3, SES, SMS en aws/ (depende de github.com/aws/aws-sdk-go).
  • Brevo: email/SMS/WhatsApp en brevo/.

Cambios recientes relevantes

  • Claim (JWT): se renombra projectId a tenantId en claim.Claim y helpers (TenantIdKey, TenantId(r)), y en logs/contexto.
  • Service (mensajería):
    • Nuevos mensajes constantes en service/msg.go (MSG_SEND_SMS, MSG_SEND_WHATSAPP, MSG_SEND_EMAIL, MSG_OTP).
    • Nuevos helpers OTP en service/otp.go (SendOTPEmail, SendOTPSms, VerifyOTP), con plantillas en service/templates.go.
    • Firmas actualizadas para usar tenantId en service/send.go y service/event.go.
  • Eventos: se añade el canal global event.EVENT y publicación adicional del evento con {channel, data} en event/handler.go.
  • Cache: cache.Set asegura expiración mínima de 1s cuando se pasa un valor inferior.
  • Config: unificación de getters Get* y CLI Param*; App.Set(key, val) actualiza env y config.App.
  • Crontab (tareas programadas):
    • Nuevo orquestador crontab.Jobs con soporte para jobs tipo cron y one-shot.
    • APIs de alto nivel: Load, AddJob, AddOneShotJob, AddEventJob, AddOneShotEventJob, DeleteJob, StartJob, StopJob, Stop.
    • Integración con eventos (event.Stack, event.Subscribe, event.Publish) vía canales EVENT_CRONTAB_* para registrar, iniciar, detener y eliminar jobs por tag.

Desarrollo

  • Requisitos: Go 1.23+.
  • Dependencias: ver go.mod y go.sum.
  • Pruebas: usa go test ./... en la raíz del módulo.
  • Versionado: consulta version.sh si aplica a pipelines/builds.

Ejemplos y guías

  • Este README describe el mapa de paquetes y cambios recientes. Para ejemplos de uso, consulta READMEs locales por paquete o create/ para plantillas.
Ejemplo rápido: crontab
package main

import (
    "log"

    "github.com/cgalvisleon/et/crontab"
    "github.com/cgalvisleon/et/et"
    "github.com/cgalvisleon/et/event"
)

func main() {
    // Inicializa crontab para una app/tag
    if err := crontab.Load("mi-servicio"); err != nil {
        log.Fatal(err)
    }

    // Job local tipo cron (cada minuto)
    _, err := crontab.AddJob(
        "job-local",
        "0 * * * * *", // spec con segundos
        et.Json{"message": "hola desde job local"},
        0,      // 0 = infinito
        true,   // started
        func(job *crontab.Job) {
            log.Printf("[cron] tag=%s params=%s", job.Tag, job.Params.ToString())
        },
    )
    if err != nil {
        log.Fatal(err)
    }

    // Job basado en eventos: crontab dispara un evento a un canal
    err = crontab.AddEventJob(
        "job-event",
        "@every 30s",
        "channel:job-event",
        0,
        true,
        et.Json{"foo": "bar"},
        func(msg event.Message) {
            log.Printf("[event] channel=%s data=%s", msg.Channel, msg.Data.ToString())
        },
    )
    if err != nil {
        log.Fatal(err)
    }

    select {} // Mantener el proceso vivo
}
gofmt -w . && go run ./cmd/whatcher
gofmt -w . && go run ./cmd/apigateway

Contribuir

  • Issues y PRs son bienvenidos. Sigue el estilo del proyecto y añade pruebas cuando aplique.

Licencia

MIT. Ver LICENSE.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL