workspace/projects/gamilit/docs/96-quick-reference/API-CHEATSHEET.md
rckrdmrd 608e1e2a2e
Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Multi-project update: gamilit, orchestration, trading-platform
Gamilit:
- Backend: Teacher services, assignments, gamification, exercise submissions
- Frontend: Admin/Teacher/Student portals, module 4-5 mechanics, monitoring
- Database: DDL functions, seeds for dev/prod, auth/gamification schemas
- Docs: Architecture, features, guides cleanup and reorganization

Core/Orchestration:
- New workspace directives index
- Documentation directive

Trading-platform:
- Database seeds and inventory updates
- Tech leader validation report

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 07:17:46 -06:00

15 KiB

API Cheatsheet - GAMILIT Platform

Versión: 1.0 Última actualización: 2025-12-18 Base URL: http://localhost:3000/api/v1 Formato: JSON

Nota: Este es un cheatsheet rápido. Para documentación completa ver docs/03-desarrollo/backend/API-ENDPOINTS.md


🔑 Autenticación

Todos los endpoints (excepto /auth/register y /auth/login) requieren Bearer token:

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

Obtener token: Usa /auth/login o /auth/register


📋 Quick Reference

Códigos de Estado

Código Significado Cuándo
200 OK Operación exitosa
201 Created Recurso creado
400 Bad Request Validación falló
401 Unauthorized Sin auth o token inválido
403 Forbidden Sin permisos
404 Not Found Recurso no existe
409 Conflict Duplicado (ej: email existe)
429 Too Many Requests Rate limit excedido
500 Internal Server Error Error del servidor

Rate Limits

Endpoint Límite
/auth/login, /auth/register 5 req / 15 min
Otros endpoints 100 req / 1 min

🔐 Authentication Endpoints

Base: /api/v1/auth

# Registrar nuevo usuario (público)
POST   /register
Body: { email, password, first_name?, last_name? }
Auth: No
Note: role is assigned automatically as 'student'

# Login
POST   /login
Body: { email, password }
Auth: No

# Refresh token
POST   /refresh
Body: { refreshToken }
Auth: No

# Obtener perfil actual
GET    /me
Auth: Yes

# Actualizar contraseña
PUT    /password
Body: { currentPassword, newPassword }
Auth: Yes

# Logout
POST   /logout
Auth: Yes

# Forgot password
POST   /forgot-password
Body: { email }
Auth: No

# Reset password
POST   /reset-password
Body: { token, newPassword }
Auth: No

# Listar sesiones activas
GET    /sessions
Auth: Yes

# Revocar todas las sesiones
DELETE /sessions/all
Auth: Yes

Ejemplos

# Register (public self-service)
curl -X POST http://localhost:3000/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "student@example.com",
    "password": "SecurePass123",
    "first_name": "John",
    "last_name": "Doe"
  }'
# Note: role is NOT accepted (assigned as 'student' automatically)

# Login
curl -X POST http://localhost:3000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "student@example.com", "password": "SecurePass123"}'

# Get Profile
curl -X GET http://localhost:3000/api/v1/auth/me \
  -H "Authorization: Bearer YOUR_TOKEN"

🎯 Educational Endpoints

Base: /api/v1/educational

# Listar todos los módulos
GET    /modules
Query: ?limit=10&offset=0
Auth: Yes

# Obtener módulo por ID
GET    /modules/:id
Auth: Yes

# Listar ejercicios de un módulo
GET    /modules/:moduleId/exercises
Query: ?limit=20&offset=0
Auth: Yes

# Obtener ejercicio por ID
GET    /exercises/:id
Auth: Yes

# Enviar intento de ejercicio
POST   /exercises/:id/submit
Body: { answers, timeSpent }
Auth: Yes

# Obtener progreso de módulo
GET    /modules/:id/progress
Auth: Yes

# Marcar módulo como completado
POST   /modules/:id/complete
Auth: Yes

Ejemplos

# Listar módulos
curl http://localhost:3000/api/v1/educational/modules \
  -H "Authorization: Bearer YOUR_TOKEN"

# Obtener ejercicio
curl http://localhost:3000/api/v1/educational/exercises/abc-123 \
  -H "Authorization: Bearer YOUR_TOKEN"

# Submit exercise
curl -X POST http://localhost:3000/api/v1/educational/exercises/abc-123/submit \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "answers": [
      {"questionId": "q1", "answer": "A"},
      {"questionId": "q2", "answer": "Marie Curie"}
    ],
    "timeSpent": 180
  }'

🏆 Gamification Endpoints

Base: /api/v1/gamification

# Obtener estadísticas del usuario
GET    /stats
Auth: Yes

# Añadir ML Coins (admin only)
POST   /coins/add
Body: { userId, amount, reason, transactionType }
Auth: Yes (admin)

# Obtener historial de transacciones
GET    /coins/transactions
Query: ?limit=20
Auth: Yes

# Listar todos los achievements
GET    /achievements
Auth: Yes

# Obtener achievements del usuario
GET    /achievements/me
Auth: Yes

# Reclamar achievement
POST   /achievements/:id/claim
Auth: Yes

# Obtener ranking global
GET    /ranking
Query: ?limit=100&offset=0
Auth: Yes

# Obtener ranking por escuela
GET    /ranking/school/:schoolId
Query: ?limit=100
Auth: Yes

# Obtener misiones activas
GET    /missions/active
Auth: Yes

# Completar misión
POST   /missions/:id/complete
Auth: Yes

# Listar power-ups
GET    /powerups
Auth: Yes

# Activar power-up
POST   /powerups/:id/activate
Auth: Yes

Ejemplos

# Get stats
curl http://localhost:3000/api/v1/gamification/stats \
  -H "Authorization: Bearer YOUR_TOKEN"

# Get transactions
curl http://localhost:3000/api/v1/gamification/coins/transactions?limit=10 \
  -H "Authorization: Bearer YOUR_TOKEN"

# Get ranking
curl http://localhost:3000/api/v1/gamification/ranking?limit=50 \
  -H "Authorization: Bearer YOUR_TOKEN"

# Get achievements
curl http://localhost:3000/api/v1/gamification/achievements/me \
  -H "Authorization: Bearer YOUR_TOKEN"

📊 Progress Endpoints

Base: /api/v1/progress

# Obtener progreso general del estudiante
GET    /student/:id
Auth: Yes

# Obtener progreso de módulo
GET    /module/:moduleId
Auth: Yes

# Registrar intento de ejercicio
POST   /exercise/:exerciseId/attempt
Body: { answers, score, timeSpent }
Auth: Yes

# Obtener analytics del estudiante
GET    /analytics
Query: ?period=week|month|year
Auth: Yes

# Obtener sesiones de estudio
GET    /sessions
Query: ?limit=20&offset=0
Auth: Yes

Ejemplos

# Get student progress
curl http://localhost:3000/api/v1/progress/student/user-123 \
  -H "Authorization: Bearer YOUR_TOKEN"

# Get analytics
curl http://localhost:3000/api/v1/progress/analytics?period=month \
  -H "Authorization: Bearer YOUR_TOKEN"

👥 Social Endpoints

Base: /api/v1/social

# Listar escuelas
GET    /schools
Query: ?limit=50
Auth: Yes

# Obtener escuela por ID
GET    /schools/:id
Auth: Yes

# Listar aulas
GET    /classrooms
Query: ?schoolId=123
Auth: Yes

# Agregar amigo
POST   /friends/add
Body: { friendId }
Auth: Yes

# Listar amigos
GET    /friends
Auth: Yes

# Eliminar amigo
DELETE /friends/:friendId
Auth: Yes

# Listar equipos
GET    /teams
Auth: Yes

# Crear equipo
POST   /teams
Body: { name, description }
Auth: Yes

# Listar competencias
GET    /competitions
Query: ?status=active|upcoming|past
Auth: Yes

Ejemplos

# List schools
curl http://localhost:3000/api/v1/social/schools \
  -H "Authorization: Bearer YOUR_TOKEN"

# Add friend
curl -X POST http://localhost:3000/api/v1/social/friends/add \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"friendId": "user-456"}'

# List competitions
curl http://localhost:3000/api/v1/social/competitions?status=active \
  -H "Authorization: Bearer YOUR_TOKEN"

👨‍🏫 Teacher Endpoints

Base: /api/v1/teacher

# Listar aulas del profesor
GET    /classrooms
Auth: Yes (teacher)

# Crear aula
POST   /classrooms
Body: { name, schoolId, gradeLevel }
Auth: Yes (teacher)

# Obtener aula por ID
GET    /classrooms/:id
Auth: Yes (teacher)

# Listar estudiantes del aula
GET    /classrooms/:id/students
Auth: Yes (teacher)

# Agregar estudiante al aula
POST   /classrooms/:id/students
Body: { studentId }
Auth: Yes (teacher)

# Crear asignación
POST   /assignments
Body: { classroomId, moduleId, dueDate }
Auth: Yes (teacher)

# Listar asignaciones
GET    /assignments
Query: ?classroomId=123
Auth: Yes (teacher)

# Calificar asignación
PUT    /grades/:id
Body: { score, feedback }
Auth: Yes (teacher)

# Ver progreso de estudiante
GET    /students/:id/progress
Auth: Yes (teacher)

# Generar reporte de clase
GET    /classrooms/:id/report
Query: ?format=pdf|json
Auth: Yes (teacher)

Ejemplos

# List classrooms
curl http://localhost:3000/api/v1/teacher/classrooms \
  -H "Authorization: Bearer YOUR_TOKEN"

# Create assignment
curl -X POST http://localhost:3000/api/v1/teacher/assignments \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "classroomId": "class-123",
    "moduleId": "module-456",
    "dueDate": "2025-12-01T23:59:59Z"
  }'

# Get student progress
curl http://localhost:3000/api/v1/teacher/students/student-789/progress \
  -H "Authorization: Bearer YOUR_TOKEN"

🔔 Notifications Endpoints

Base: /api/v1/notifications

# Listar notificaciones del usuario
GET    /
Query: ?limit=20&offset=0&read=true|false
Auth: Yes

# Marcar como leída
PUT    /notifications/:id/read
Auth: Yes

# Marcar todas como leídas
PUT    /read-all
Auth: Yes

# Eliminar notificación
DELETE /notifications/:id
Auth: Yes

# Enviar notificación (admin)
POST   /send
Body: { userId, title, message, type }
Auth: Yes (admin)

Ejemplos

# Get notifications
curl http://localhost:3000/api/v1/notifications?limit=10 \
  -H "Authorization: Bearer YOUR_TOKEN"

# Mark as read
curl -X PUT http://localhost:3000/api/v1/notifications/notif-123/read \
  -H "Authorization: Bearer YOUR_TOKEN"

# Mark all as read
curl -X PUT http://localhost:3000/api/v1/notifications/read-all \
  -H "Authorization: Bearer YOUR_TOKEN"

👤 Admin Endpoints

Base: /api/v1/admin

# Listar usuarios
GET    /users
Query: ?limit=50&offset=0&role=student|teacher|admin
Auth: Yes (admin)

# Crear usuario (admin only)
POST   /users
Body: { email, password, role, first_name, last_name }
Auth: Yes (admin)
Note: Admin endpoint can set role explicitly

# Actualizar usuario
PUT    /users/:id
Body: { first_name, last_name, role, active }
Auth: Yes (admin)

# Eliminar usuario
DELETE /users/:id
Auth: Yes (admin)

# Listar organizaciones
GET    /organizations
Auth: Yes (admin)

# Crear organización
POST   /organizations
Body: { name, type, contactEmail }
Auth: Yes (admin)

# Ver estadísticas del sistema
GET    /system/stats
Auth: Yes (admin)

# Ver logs del sistema
GET    /system/logs
Query: ?level=error|warning|info&limit=100
Auth: Yes (admin)

Ejemplos

# List users
curl http://localhost:3000/api/v1/admin/users?role=student&limit=20 \
  -H "Authorization: Bearer YOUR_ADMIN_TOKEN"

# Create user (admin can set role)
curl -X POST http://localhost:3000/api/v1/admin/users \
  -H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "newuser@example.com",
    "password": "TempPass123",
    "role": "student",
    "first_name": "Jane",
    "last_name": "Smith"
  }'

# Get system stats
curl http://localhost:3000/api/v1/admin/system/stats \
  -H "Authorization: Bearer YOUR_ADMIN_TOKEN"

🏥 Health Endpoints

Base: /api

# Health check general
GET    /health
Auth: No

# Health check de base de datos
GET    /health/db
Auth: No

# System info (admin only)
GET    /system/info
Auth: Yes (admin)

Ejemplos

# Check health
curl http://localhost:3000/api/health

# Check DB
curl http://localhost:3000/api/health/db

📦 Formato de Respuesta Estándar

Success (200, 201)

{
  "success": true,
  "data": {
    // ... datos específicos
  }
}

Error (4xx, 5xx)

{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "Human readable message",
    "details": {}  // Opcional
  }
}

🚀 Tips de Uso

1. Guardar Token

# Guardar token en variable
TOKEN="eyJhbGciOiJIUzI1NiIs..."

# Usar en requests
curl http://localhost:3000/api/v1/auth/me \
  -H "Authorization: Bearer $TOKEN"

2. Debugging con verbose

curl -v http://localhost:3000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "test@example.com", "password": "test123"}'

3. Pretty print JSON (con jq)

curl http://localhost:3000/api/v1/auth/me \
  -H "Authorization: Bearer $TOKEN" | jq '.'

4. Save response to file

curl http://localhost:3000/api/v1/gamification/stats \
  -H "Authorization: Bearer $TOKEN" \
  -o stats.json

5. POST con archivo

curl -X POST http://localhost:3000/api/v1/content/upload \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@image.png"

🔍 Ejemplos Comunes

Login completo y usar token

# 1. Login
response=$(curl -s -X POST http://localhost:3000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "student@example.com", "password": "test123"}')

# 2. Extraer token
token=$(echo $response | jq -r '.data.token')

# 3. Usar token
curl http://localhost:3000/api/v1/educational/modules \
  -H "Authorization: Bearer $token"

Submit ejercicio completo

# 1. Get exercise
curl http://localhost:3000/api/v1/educational/exercises/ex-123 \
  -H "Authorization: Bearer $TOKEN" | jq '.'

# 2. Submit answers
curl -X POST http://localhost:3000/api/v1/educational/exercises/ex-123/submit \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "answers": [
      {"questionId": "q1", "answer": "A"},
      {"questionId": "q2", "answer": "Marie Curie"},
      {"questionId": "q3", "answer": ["A", "C"]}
    ],
    "timeSpent": 180
  }' | jq '.'

# 3. Check stats
curl http://localhost:3000/api/v1/gamification/stats \
  -H "Authorization: Bearer $TOKEN" | jq '.data.mlCoins'

Ver progreso completo

# Stats generales
curl http://localhost:3000/api/v1/gamification/stats \
  -H "Authorization: Bearer $TOKEN" | jq '.'

# Progreso por módulo
curl http://localhost:3000/api/v1/progress/module/module-123 \
  -H "Authorization: Bearer $TOKEN" | jq '.'

# Analytics
curl http://localhost:3000/api/v1/progress/analytics?period=month \
  -H "Authorization: Bearer $TOKEN" | jq '.'

# Achievements
curl http://localhost:3000/api/v1/gamification/achievements/me \
  -H "Authorization: Bearer $TOKEN" | jq '.'

📚 Recursos

Documentación completa:

Testing:

  • Postman Collection: docs/02-especificaciones-tecnicas/apis/GLIT.postman_collection.json
  • Swagger UI: http://localhost:3000/api/docs (cuando esté disponible)

Troubleshooting:

  • ONBOARDING.md - Solución de problemas comunes
  • Slack: #gamilit-backend

Última actualización: 2025-12-18 Versión: 1.0 Método: Extracted from API-ENDPOINTS.md