Guía de Desarrollo
Esta guía explica cómo configurar y ejecutar la API de Autenticación SaaS en modo de desarrollo.
Prerrequisitos
Antes de comenzar, asegúrate de tener lo siguiente instalado:
- Go 1.24.1 o posterior
- Docker y Docker Compose
- Git
- Cliente de PostgreSQL (opcional, para acceso directo a la base de datos)
- Cliente de Redis (opcional, para acceso directo a la caché)
Obtener el Código
git clone https://github.com/yersonargotev/saas-auth-api.gitcd saas-auth-apiConfiguración del Entorno de Desarrollo
Usando Docker Compose (Recomendado)
El proyecto incluye una configuración de Docker Compose para desarrollo que proporciona:
- Recarga en caliente usando Air
- Base de datos PostgreSQL
- Caché Redis
Para iniciar el entorno de desarrollo:
docker-compose -f docker-compose.dev.yml upEsto realizará:
- Construir la imagen Docker de desarrollo
- Iniciar los servicios de PostgreSQL y Redis
- Ejecutar automáticamente las migraciones de la base de datos
- Iniciar la API con recarga en caliente en http://localhost:3000
Desarrollo Local (Sin Docker)
Si prefieres ejecutar la aplicación directamente en tu máquina:
-
Instalar las dependencias de Go:
Ventana de terminal go mod download -
Instalar Air para recarga en caliente (opcional):
Ventana de terminal go install github.com/air-verse/air@latest -
Configurar PostgreSQL y Redis localmente o utilizar instancias existentes.
-
Crear un archivo
.envcon tu configuración (ver sección de Configuración). -
Ejecutar la aplicación con Air para recarga en caliente:
Ventana de terminal airO sin recarga en caliente:
Ventana de terminal go run cmd/api/main.go
Configuración
La aplicación utiliza un archivo de configuración ubicado en config/config.yaml. Puedes sobrescribir estos ajustes usando variables de entorno:
app: name: saas-auth-api version: 0.1.0 env: development port: 3000
database: host: localhost port: 5432 user: postgres password: postgres name: saas_auth sslmode: disable max_open_conns: 20 max_idle_conns: 5 conn_max_lifetime: 30m
redis: host: localhost port: 6379 password: "" db: 0
jwt: secret: supersecretkey-change-in-production access_ttl: 15m refresh_ttl: 24h
auth: password_salt: change-this-in-production api_key_prefix: sk- api_key_length: 32 rate_limit: enabled: true requests: 100 duration: 1mMapeo de variables de entorno:
APP_ENV→app.envAPP_PORT→app.portDB_HOST→database.hostDB_PORT→database.portDB_USER→database.userDB_PASSWORD→database.passwordDB_NAME→database.nameREDIS_HOST→redis.hostREDIS_PORT→redis.portREDIS_PASSWORD→redis.passwordJWT_SECRET→jwt.secret
Migraciones de Base de Datos
Las migraciones se ejecutan automáticamente cuando se inicia la aplicación. Los archivos de migración se encuentran en el directorio migrations.
Para ejecutar migraciones manualmente, puedes usar la herramienta CLI de golang-migrate:
# Instalar la herramienta de migracióngo install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
# Ejecutar migracionesmigrate -path ./migrations -database "postgres://postgres:postgres@localhost:5432/saas_auth?sslmode=disable" upPruebas
Ejecutar Pruebas Unitarias
go test ./tests/unit/...Ejecutar Pruebas de Integración
go test ./tests/integration/...Ejecutar Pruebas de Extremo a Extremo
go test ./tests/e2e/...Documentación de la API
Puedes ver la documentación de la API en la interfaz Swagger accediendo al endpoint /docs cuando ejecutas la aplicación.
Flujo de Trabajo de Desarrollo
-
Crear una nueva rama para tu función o corrección:
Ventana de terminal git checkout -b feature/mi-funcion -
Realizar tus cambios y escribir pruebas.
-
Ejecutar pruebas para asegurarte de que todo funciona:
Ventana de terminal go test ./... -
Confirmar tus cambios con un mensaje descriptivo:
Ventana de terminal git commit -m "Agregar mi nueva función" -
Enviar tu rama y crear una solicitud de extracción.
Solución de Problemas
Problemas Comunes
-
Conexión rechazada a PostgreSQL o Redis
- Asegúrate de que los servicios estén ejecutándose
- Verifica que el host y el puerto sean correctos en la configuración
- Comprueba que ningún firewall esté bloqueando las conexiones
-
La recarga en caliente no funciona
- Verifica que Air esté instalado y configurado correctamente
- Asegúrate de que el archivo
.air.tomlexista en la raíz del proyecto
-
Problemas con tokens JWT
- Verifica que el secreto JWT esté configurado correctamente
- Comprueba los tiempos de expiración de los tokens en la configuración
-
Fallo en la migración de la base de datos
- Verifica la configuración de conexión a la base de datos
- Asegúrate de que el usuario de la base de datos tenga los permisos necesarios
- Busca errores de sintaxis en los archivos de migración
Registros y Depuración
En modo de desarrollo, los registros de la aplicación son detallados e incluyen información detallada sobre solicitudes, consultas a la base de datos y errores. Puedes ajustar el nivel de registro en el archivo de configuración.
Para habilitar información de depuración adicional, establece la siguiente variable de entorno:
APP_ENV=developmentEstructura del Código
El proyecto sigue un enfoque de arquitectura limpia con la siguiente estructura:
cmd/api: Punto de entrada de la aplicaciónconfig: Archivos de configuracióndocs: Documentación de la APIinternal: Núcleo de la aplicaciónapiKey: Gestión de claves APIauth: Servicio de autenticaciónrole: Gestión de roles y permisosuser: Gestión de usuarios
migrations: Archivos de migración de base de datospkg: Paquetes compartidosconfig: Carga de configuracióndatabase: Conexión a base de datos y repositorioslogger: Utilidades de registromiddleware: Middlewares HTTPvalidator: Validación de entrada
tests: Conjunto de pruebase2e: Pruebas de extremo a extremointegration: Pruebas de integraciónunit: Pruebas unitarias