Es una aplicación web integral para la organización, difusión y evaluación de eventos científicos. Permite a organizadores, ponentes, evaluadores y administradores coordinar todo el ciclo de vida de un congreso o conferencia: desde la creación del evento y la gestión de su agenda, hasta la recepción, revisión y decisión final de trabajos científicos, todo con un flujo de notificaciones automatizado y mensajería interna.
Registro de nuevos usuarios con validación de correo.
Inicio / cierre de sesión con token seguro.
Recuperación de contraseña mediante clave temporal por correo.
Gestión de roles y permisos (Administrador, Participante, Ponente, Revisor, Comité Científico).
Creación de eventos en dos pasos (datos generales + fecha de cierre de inscripciones).
Edición y eliminación de eventos.
Cierre / apertura manual de inscripciones, o automático al llegar la fecha límite.
Validaciones: nombre único, fechas no pasadas, ubicación (país/ciudad).
Exploración de eventos disponibles con filtros (texto, país, ciudad, rango de fechas).
Vista detallada de cada evento.
Inscripción con formulario y confirmación.
Actualización automática del estado de inscripción.
Formulario de envío de trabajo.
Lista de trabajos del ponente con opciones (subir revisión, ver historial).
Historial de versiones y cambios de estado.
🧪 Evaluación científica (Comité y Revisores) Para el Comité Científico: Visualización de todos los trabajos con búsqueda y filtros.
Asignación de revisores a cada trabajo.
Consulta de evaluaciones recibidas (promedio, detalles por revisor).
Decisión final: ACEPTADO, RECHAZADO o PENDIENTE DE REVISIÓN, con comentario para el autor.
Conversaciones privadas y grupales entre cualquier usuario autenticado.
Envío de mensajes de texto y archivos adjuntos.
Gestión de participantes (añadir/eliminar en conversaciones existentes).
Notificaciones en tiempo real de nuevos mensajes.
Asignación/retiro de roles a usuarios.
Creación y modificación del catálogo de roles.
Gestión granular de permisos y su asociación a recursos funcionales.
Acceso restringido según el permiso del usuario, no solo por rol.
Prof. Jean Carlos Guzmán (Agile Coach ) | jeancguzman2050@gmail.com
- Samuel Rodríguez (Team Lead) | samuel.rodriguez16@hotmail.com
- Sergio Carrillo | 14-11315@usb.ve
- Jesús Cuéllar | jedave.co@gmail.com
- Abel Zabaleta | abelzavaleta08@gmail.com
- Blanyer Vielma | vblanyer@gmail.com
- Mauricio Fragachan | mfragachan11@gmail.com
- Anya Marcano (Team Lead) | anyanmf@gmail.com
- Rafael Valera | rafa.valera98@gmail.com
- Franco Murillo | murillo.franc@gmail.com
- Laura León | laura.leon.27121999@gmail.com
- David Pereira | djpb2000@gmail.com
- Carlo Herrera | carlomhd2001@gmail.com
- Leonardo Dolande | leodolande84@gmail.com
Universidad Simón Bolívar, Venezuela.
Este proyecto contiene:
- Frontend en React + TypeScript (Vite)
- Backend en Google Go (API en
backend/cmd/api/main.go) - Pruebas unitarias con Jest (frontend)
- Pruebas end-to-end con Cypress
- Colección de Postman para probar el API
- CI con GitHub Actions (archivo en
.github/workflows/ci.yml)
- Node.js 18+ (idealmente 20)
- Go 1.20+
cd frontend
npm install
npm run dev # iniciar Vite (desarrollo)
npm run build # construir
npm run preview # servir build en 5173
npm run test # Jest
npm run test:e2e # Cypress (requiere backend en :8080)cd backend
go run ./cmd/api # inicia el servidor en :8080
go test ./... # ejecuta pruebasEl backend envia correos usando una API privada local (mailer-api) con endpoint HTTP POST /send.
La API privada se conecta por SMTP a Gmail usando App Password.
- Inicia sesion en tu cuenta Google.
- Ve a Seguridad:
https://myaccount.google.com/security. - Activa
Verificacion en 2 pasos. - Entra a
Contrasenas de aplicaciones:https://myaccount.google.com/apppasswords. - Selecciona app
Maily dispositivoOtro(por ejemplo:Docker Mailer Local). - Copia la clave generada de 16 caracteres.
Notas:
- No uses la contraseña normal de Gmail en SMTP.
- Si no ves
Contraseñas de aplicaciones, normalmente falta 2FA o tu cuenta tiene una restricción administrativa.
Configura estas variables:
MAILER_API_URL=http://localhost:3000/send
MAILER_API_AUTH_KEY=dev-mailer-key
MAILER_FROM=tu_correo@gmail.com
MAILER_DEFAULT_CC=
MAILER_TIMEOUT_SECONDS=10
MAILER_SERVER_PORT=3000
MAILER_AUTHORIZATION_KEY=dev-mailer-key
MAILER_WHITELIST=
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=tu_correo@gmail.com
SMTP_FROM=tu_correo@gmail.com
SMTP_PASS=tu_app_password_de_16_caracteres
SMTP_SECURE=false
SMTP_CC=Para flujo completo local:
make dev localEse comando inicia:
- Postgres en Docker
- API privada de correo en Docker (
http://localhost:3000/send) - Backend Go en
:8080 - Frontend Vite en
:5173
Si solo quieres levantar Docker:
docker compose up -d db mailer-apiSi cambias .env.local, recrea el contenedor del mailer:
docker compose up -d --force-recreate mailer-apiHealthcheck:
curl http://localhost:3000/healthPrueba manual de envio:
curl -X POST http://localhost:3000/send \
-H 'Authorization: dev-mailer-key' \
-H 'Content-Type: application/json' \
-d '{
"from": "tu_correo@gmail.com",
"to": "destinatario@correo.com",
"subject": "Prueba SAGEC",
"text": "Correo de prueba",
"html": "<p>Correo de prueba</p>"
}'534-5.7.9 Application-specific password required:SMTP_PASSno es App Password valida.550 From header sender domain not verified: el remitente SMTP no esta permitido por tu proveedor.401 Unauthorizeden/send:MAILER_API_AUTH_KEYyMAILER_AUTHORIZATION_KEYno coinciden.
frontend/: app React + Vite (UI, rutas, servicios, estilos)backend/: API Go (entrypoint encmd/api/main.go)backend/internal/: modulos del dominio (handlers, servicios, repos, DTOs, validaciones)backend/prisma/: schema y migracionespostman/: coleccion de requests
Pasos recomendados:
- Crear carpeta en
backend/internal/<modulo>/con estructura similar ausersoevents:handler/para HTTP handlersservice/para logica de negociorepo/para acceso a datosdto/yvalidation/si aplica
- Registrar rutas en
backend/cmd/api/main.go. - Si hay cambios de datos, actualizar
backend/prisma/schema.prismay crear migracion. - Agregar pruebas unitarias en el modulo nuevo.
Este backend usa Prisma Client Go con Postgres.
Comandos Prisma (desde la raiz del proyecto):
npm run prisma:migrate:local # usa .env.local
npm run prisma:migrate:neon # usa .env.neon
npm run prisma:studio:local # Prisma Studio con .env.local
npm run prisma:studio:neon # Prisma Studio con .env.neon
npm run prisma:status:local # estado de migraciones con .env.local
npm run prisma:status:neon # estado de migraciones con .env.neon
npm run prisma:reset:local # reset DB con .env.local
npm run prisma:reset:neon # reset DB con .env.neonmake backend # inicia backend en :8080
make backend-test # pruebas Go
make frontend-install # instala deps frontend
make frontend-dev # Vite dev server (puerto por defecto 5173)
make frontend-build # build frontend
make frontend-test # Jest
make frontend-e2e # Cypress E2E tests
make dev local # backend + frontend, Postgres via Docker (usa .env.local en raiz)
make dev neon # backend + frontend contra Neon (usa .env.neon en raiz)
make dev server # frontend local, API remoto en Koyeb (usa .env en raiz)Importa postman/collection.json en Postman para probar los modulos principales del API.
Cobertura actual de la colección:
- Auth (registro, login, recuperación y logout)
- Users, Roles y Permissions
- Eventos, Inscripciones, Registrations
- Notifications, Paises, Sesiones
- Trabajos cientificos (participante, revisor y comité)
- Mensajes (conversaciones, mensajes, participantes, busqueda y adjuntos)
- SMTP utilitario (
/api/smtp/send,/api/smtp/sandbox)
Variable de entorno usada por Postman:
base_url = http://localhost:8080
Las rutas HTTP se registran en backend/cmd/api/main.go. Grupos principales:
/api/auth/*/api/users,/api/user/*,/api/roles*,/api/permissions*,/api/resources/api/eventos*,/api/inscripciones*,/api/registrations*/api/notifications*/api/paises,/api/ciudades,/api/sesiones*/api/trabajos-cientificos*/api/mensajes/*/api/smtp/*
- Ejecuta pruebas de Go y Jest
- Construye el frontend
- Corre Cypress contra
vite previewy el backend