elvis

module
v1.1.196 Latest Latest
Warning

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

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

README

🎸 Elvis - Framework para Microservicios en Go

Go Version License Latest Release Go Report Card GitHub Stars GitHub Issues Documentation

🚀 Framework moderno y robusto para el desarrollo de microservicios escalables en Go

📑 Tabla de Contenidos

📖 Descripción

Elvis es un framework moderno y robusto diseñado para facilitar el desarrollo de microservicios en Go. Proporciona un conjunto completo de herramientas y estructuras para crear aplicaciones escalables con capacidades avanzadas de:

  • 🛡️ Sistema de resiliencia y recuperación automática
  • 📅 Tareas programadas (Crontab)
  • 🗄️ Base de datos avanzada con triggers automáticos
  • 🔄 Sistema de eventos distribuidos
  • 💾 Cache inteligente multi-backend
  • 🔐 Middleware de seguridad integrado
  • 📊 Telemetría, logging y monitoreo

Requisitos Previos

  • Go 1.23 o superior
  • Git
  • PostgreSQL (para base de datos)
  • Redis (para cache)
  • NATS (para eventos)

🚀 Instalación Rápida

1. Inicializar el Proyecto
go mod init github.com/tu-usuario/tu-proyecto
2. Instalar Elvis
go get github.com/celsiainternet/elvis@v1.1.195
go run github.com/celsiainternet/elvis/cmd/prepare
3. Crear Proyecto con Elvis
go run github.com/celsiainternet/elvis/cmd/create go
4. Configurar Variables de Entorno

Copia el archivo .env.example a .env y ajusta los valores según tu entorno:

cp .env.example .env

⚙️ Configuración de Desarrollo

IDE Configuration (Cursor/VSCode)

El proyecto incluye configuración optimizada para Cursor y VSCode:

  • .vscode/settings.json: Configuración del workspace con staticcheck deshabilitado
  • staticcheck.conf: Configuración específica de staticcheck para evitar warnings molestos
  • Linting: ST1020 y otras reglas de documentación están deshabilitadas para mayor comodidad
Ejecutar en Modo Desarrollo
# Creacion de elementos
gofmt -w . && go run ./cmd/create go

# Creacion de elementos de jdb
gofmt -w . && go run ./cmd/jdb go

# Cliente WorkFlow
gofmt -w . && go run ./cmd/flow go

# Crontab
gofmt -w . && go run ./cmd/crontab go

Uso

Creación del Proyecto

Para crear un nuevo proyecto con Elvis, ejecuta el siguiente comando:

go run github.com/celsiainternet/elvis/cmd/create go

Este comando generará:

  • Estructura base del proyecto
  • Microservicios iniciales
  • Modelos de datos
  • Configuraciones necesarias
Ejecutar el Proyecto

Para ejecutar el proyecto:

gofmt -w . && go run ./cmd/test -port 3400 -rpc 4400
gofmt -w . && go run ./cmd/resilence

Donde:

  • -port: Puerto para el servidor HTTP (default: 3400)
  • -rpc: Puerto para el servidor gRPC (default: 4400)

Características Principales

  • 🛡️ Sistema de resiliencia y recuperación automática
// Configurar resiliencia
resilience.SetNotifyType(resilience.TpNotifyEmail)
resilience.SetContactNumbers([]string{"+573160479724"})

// Agregar transacción con reintentos automáticos
transaction := resilience.Add("email-send", "Enviar email de confirmación", sendEmail, userEmail, content)
  • 📅 Tareas programadas (Crontab)
// Configurar crontab
// Crear tarea programada
jobs := crontab.New()
jobs.AddJob("backup-daily", "Backup diario", "0 2 * * *", "backup-channel", map[string]interface{}{
    "type": "daily",
    "path": "/backup",
})

// Iniciar tareas
jobs.Start()
  • 🗄️ Base de datos avanzada con triggers automáticos
// Configurar base de datos
// Definir modelo con triggers
model := linq.NewModel(db, "users", "Usuarios", 1)
model.DefineColum("_id", "", "VARCHAR(80)", "-1")
model.DefineColum("name", "", "VARCHAR(250)", "")
model.DefineColum("email", "", "VARCHAR(250)", "")

// Configurar triggers
model.Trigger(linq.BeforeInsert, func(model *linq.Model, old, new *et.Json, data et.Json) error {
    // Lógica antes de insertar
    return nil
})

model.Trigger(linq.AfterInsert, func(model *linq.Model, old, new *et.Json, data et.Json) error {
    // Lógica después de insertar
    return nil
})
  • 🔄 Sistema de eventos distribuidos
// Configurar eventos
// Publicar evento
event.Publish("user.created", map[string]interface{}{
    "user_id": "123",
    "email":   "user@example.com",
})

// Suscribirse a eventos
event.Subscribe("user.created", func(msg event.EvenMessage) {
    fmt.Println("Usuario creado:", msg.Data)
})

// Trabajos distribuidos
work := event.Work("email.send", map[string]interface{}{
    "to":      "user@example.com",
    "subject": "Bienvenido",
})
  • 💾 Cache inteligente multi-backend
// Configurar cache
// Configurar cache
cache.Load()

// Operaciones de cache
cache.Set("key", "value", 3600)
value, err := cache.Get("key")
cache.Delete("key")

// Cache hash
cache.SetH("user:123", map[string]interface{}{
    "name":  "Juan",
    "email": "juan@example.com",
})
  • 🔐 Middleware de seguridad integrado
// Configurar seguridad
// Middleware de autenticación
r.Use(middleware.Authentication)

// Middleware de autorización
r.Use(middleware.Authorization)

// Middleware de CORS
r.Use(middleware.CORS)

// Middleware de logging
r.Use(middleware.Logger)
  • 📊 Telemetría, logging y monitoreo
// Configurar telemetría
// Logging estructurado
logs.Log("user-service", "Usuario creado exitosamente")
logs.Alert(fmt.Errorf("Error de conexión"))

📁 Estructura del Proyecto

elvis/ ├── 📂 cmd/ # Comandos ejecutables │ ├── cmd/ # Servidor principal │ ├── create-go/ # Generador de proyectos │ ├── daemon/ # Daemon del sistema │ ├── resilence/ # Servidor de resiliencia │ └── rpc/ # Servidores RPC (cliente/servidor) ├── 📂 cache/ # Sistema de cache ├── 📂 claim/ # Manejo de claims/tokens ├── 📂 config/ # Configuración global ├── 📂 console/ # Utilidades de consola ├── 📂 create/ # Generación de código │ └── template/ # Plantillas de código ├── 📂 crontab/ # Tareas programadas ├── 📂 envar/ # Variables de entorno ├── 📂 et/ # Tipos y utilidades ├── 📂 event/ # Sistema de eventos ├── 📂 file/ # Manejo de archivos ├── 📂 jdb/ # Database abstraction layer ├── 📂 jrpc/ # JSON-RPC implementation ├── 📂 linq/ # Query builder ├── 📂 logs/ # Sistema de logging ├── 📂 mem/ # Cache en memoria ├── 📂 middleware/ # Middleware HTTP ├── 📂 msg/ # Mensajería ├── 📂 race/ # Control de concurrencia ├── 📂 resilience/ # Sistema de resiliencia ├── 📂 response/ # Manejo de respuestas HTTP ├── 📂 router/ # Enrutamiento HTTP ├── 📂 service/ # Servicios base ├── 📂 stdrout/ # Salida estándar ├── 📂 strs/ # Utilidades de strings ├── 📂 timezone/ # Manejo de zonas horarias ├── 📂 utility/ # Utilidades generales ├── 📂 .vscode/ # Configuración IDE │ ├── settings.json # Configuración optimizada │ └── launch.json # Configuración debug ├── 📄 staticcheck.conf # Configuración linting ├── 📄 go.mod # Dependencias Go ├── 📄 go.sum # Checksums dependencias ├── 📄 version.sh # Script versionamiento └── 📄 README.md # Documentación

🚀 Quick Start

package main

import (
    "github.com/celsiainternet/elvis/router"
    "github.com/celsiainternet/elvis/middleware"
    "github.com/celsiainternet/elvis/response"
)

func main() {
    // Crear router
    r := router.New()

    // Agregar middleware
    r.Use(middleware.CORS)
    r.Use(middleware.Logger)

    // Definir rutas
    r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
        response.JSON(w, r, 200, map[string]string{
            "status": "ok",
            "message": "Elvis está funcionando!",
        })
    })

    // Iniciar servidor
    r.Listen(":3400")
}

workflow:f2334584-71f5-4be7-9c2c-0c3352bc9d50

Directories

Path Synopsis
cmd
create command
crontab command
flow command
install command
jdb command
create
v1
v2

Jump to

Keyboard shortcuts

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