Skip to content

Swarch2F/api-gateway

Repository files navigation

🌐 API Gateway - Ecosistema Completo de Microservicios

Status Architecture GraphQL JWT

🎯 Ecosistema 100% Funcional con 4 Microservicios Integrados - API Gateway que orquesta Component-1 (SIA Colegios), Component-2-1 (Profesores), Component-2-2 (Calificaciones) y Component-4 (Autenticación) con 35 endpoints disponibles.

🏗️ ARQUITECTURA DEL SISTEMA

🌐 API Gateway (Node.js + GraphQL) - Puerto 9000
├── 🎓 Component-1 (SIA Colegios) - Puerto 8083
│   ├── 🔧 Django 4.2.9 + Django REST Framework  
│   └── 🗄️ PostgreSQL SIA - Puerto 5433
├── 🔒 Component-4 (Authentication) - Puerto 8082
│   ├── 🔧 Go + Gin + JWT + OAuth2
│   └── 🗄️ PostgreSQL Auth - Puerto 5432
├── 👨‍🏫 Component-2-1 (Profesores & Asignaturas) - Puerto 8080  
│   ├── 🔧 Java Spring Boot + GraphQL
│   └── 🗄️ MongoDB Profesores - Puerto 27018
└── 📊 Component-2-2 (Calificaciones) - Puerto 8081
    ├── 🔧 Java Spring Boot + GraphQL
    └── 🗄️ MongoDB Calificaciones - Puerto 27019

🚀 INICIO RÁPIDO

📋 Prerequisitos

  • Docker y Docker Compose instalados
  • Puertos 9000, 8080, 8081, 8082, 8083, 5432, 5433, 27018, 27019 disponibles

⚡ Despliegue en 30 segundos

# 1. Clonar el repositorio
git clone [URL_DEL_REPOSITORIO]
cd API_Gateway/api-gateway-main

# 2. Iniciar todo el ecosistema
docker-compose up -d

# 3. Verificar que todos los servicios están ejecutándose
docker-compose ps

# 4. Probar conectividad básica
curl -X POST http://localhost:9000/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "query { cursos { count } holaMundo1 holaMundo2 }"}'

🔧 Script de Desarrollo

# Usar el script automatizado para desarrollo
./start-dev.sh

📚 DOCUMENTACIÓN COMPLETA DE ENDPOINTS - 35 ENDPOINTS TOTALES

🎓 SIA COLEGIOS (Component-1) - 15 ENDPOINTS

El Sistema de Información Académica maneja cursos y estudiantes con datos precargados de 18 cursos (desde 1-A hasta 11-B) y 36 estudiantes.

📋 ENDPOINTS DE CURSOS (7 endpoints)

Endpoint Tipo Descripción Parámetros
cursos Query Listar cursos con filtros y paginación search?, ordering?, page?
curso Query Obtener curso específico por ID id!
cursoEstudiantes Query Estudiantes de un curso específico id!
crearCurso Mutation Crear nuevo curso input: {nombre!, codigo!}
actualizarCurso Mutation Actualizar curso completamente id!, input: {nombre!, codigo!}
actualizarCursoParcial Mutation Actualizar curso parcialmente id!, nombre?, codigo?
eliminarCurso Mutation Eliminar curso id!

👨‍🎓 ENDPOINTS DE ESTUDIANTES (8 endpoints)

Endpoint Tipo Descripción Parámetros
estudiantes Query Listar estudiantes con filtros y paginación search?, ordering?, page?
estudiante Query Obtener estudiante específico por ID id!
estudiantesPorCurso Query Estudiantes filtrados por código de curso codigo!
crearEstudiante Mutation Crear nuevo estudiante input: EstudianteInput!
actualizarEstudiante Mutation Actualizar estudiante completamente id!, input: EstudianteInput!
actualizarEstudianteParcial Mutation Actualizar estudiante parcialmente id!, campos opcionales
eliminarEstudiante Mutation Eliminar estudiante id!

📝 Ejemplos de Uso SIA

Crear Curso:

mutation {
  crearCurso(input: {
    nombre: "Doce A"
    codigo: "12-A"
  }) {
    id
    nombre
    codigo
  }
}

Listar Cursos con Filtros:

query {
  cursos(search: "A", ordering: "nombre", page: 1) {
    count
    next
    previous
    results {
      id
      nombre
      codigo
      estudiantes {
        id
        nombreCompleto
        documento
      }
    }
  }
}

Crear Estudiante:

mutation {
  crearEstudiante(input: {
    nombreCompleto: "Ana María Rodríguez"
    documento: "1234567890"
    fechaNacimiento: "2010-05-15"
    acudiente: "Carlos Rodríguez"
    curso: "1"
  }) {
    id
    nombreCompleto
    documento
    curso {
      nombre
      codigo
    }
  }
}

Actualizar Estudiante Parcialmente:

mutation {
  actualizarEstudianteParcial(
    id: "5"
    acudiente: "Nuevo Acudiente"
    curso: "2"
  ) {
    id
    nombreCompleto
    acudiente
    curso {
      nombre
      codigo
    }
  }
}

🔒 AUTENTICACIÓN (Component-4) - 4 ENDPOINTS

Endpoint Tipo Descripción Requiere Token
loginUser Mutation Login con email/password
registerUser Mutation Registro de nuevo usuario
userProfile Query Obtener perfil del usuario
getGoogleLoginUrl Query URL para OAuth2 Google

🔑 Credenciales de Prueba

Email: test@example.com
Password: password123

📝 Ejemplos de Uso

Login:

mutation {
  loginUser(input: {
    email: "test@example.com"
    password: "password123"
  }) {
    token
    message
  }
}

Perfil de Usuario:

# Header: Authorization: Bearer [TOKEN_JWT]
query {
  userProfile {
    message
    user_id
  }
}

👨‍🏫 PROFESORES & ASIGNATURAS (Component-2-1) - 9 ENDPOINTS

Endpoint Tipo Descripción Parámetros
profesores Query Listar todos los profesores -
crearProfesor Mutation Crear nuevo profesor nombre, documento, area
actualizarProfesor Mutation Actualizar profesor existente id, nombre?, documento?, area?
eliminarProfesor Mutation Eliminar profesor id
asignaturas Query Listar todas las asignaturas -
crearAsignatura Mutation Crear nueva asignatura nombre
actualizarAsignatura Mutation Actualizar asignatura id, nombre
asignarProfesorAAsignatura Mutation Asignar profesor a asignatura profesorId, asignaturaId
desasignarProfesorDeAsignatura Mutation Desasignar profesor profesorId, asignaturaId

📝 Ejemplos de Uso

Crear Profesor:

mutation {
  crearProfesor(
    nombre: "Dr. María García"
    documento: "CC87654321"
    area: "Matemáticas"
  ) {
    id
    nombre
    documento
    area
  }
}

Actualizar Asignatura:

mutation {
  actualizarAsignatura(
    id: "65a1b2c3d4e5f6789012345"
    nombre: "Álgebra Lineal Avanzada"
  ) {
    id
    nombre
    profesorIds
  }
}

📊 CALIFICACIONES (Component-2-2) - 5 ENDPOINTS

Endpoint Tipo Descripción Parámetros
calificaciones Query Listar calificaciones (con filtros) estudianteId?, asignaturaId?, cursoId?, periodo?
registrarCalificacion Mutation Registrar nueva calificación estudianteId, asignaturaId, cursoId, periodo, nota, observaciones?
actualizarCalificacion Mutation Actualizar calificación id, nota?, observaciones?
eliminarCalificacion Mutation Eliminar calificación id

📝 Ejemplos de Uso

Registrar Calificación Completa:

mutation {
  registrarCalificacion(
    estudianteId: "est-12345"
    asignaturaId: "65a1b2c3d4e5f6789012346"
    cursoId: "11-A"
    periodo: "2025-1"
    nota: 4.5
    observaciones: "Excelente desempeño en el examen"
  ) {
    id
    estudianteId
    nota
    observaciones
  }
}

🛠️ UTILIDADES - 2 ENDPOINTS

Endpoint Tipo Descripción
holaMundo1 Query Health check Component-2-1
holaMundo2 Query Health check Component-2-2

🧪 TESTING CON POSTMAN - COLECCIÓN COMPLETA

📥 Importar Colección

  1. Descargar: API_Gateway_Tests_DEFINITIVO_COMPLETO.postman_collection.json
  2. Importar en Postman
  3. Configurar variable de entorno base_url: http://localhost:9000

📊 Estructura de la Colección (35 endpoints organizados)

📁 API Gateway - Ecosistema Completo (35 endpoints)
├── 🔒 1. Autenticación (4 endpoints)
│   ├── Login Usuario
│   ├── Registro Usuario  
│   ├── Perfil Usuario (requiere token)
│   └── URL Login Google
├── 🎓 2. SIA Colegios - Cursos (7 endpoints)
│   ├── Listar Cursos (con filtros)
│   ├── Obtener Curso por ID
│   ├── Estudiantes de Curso
│   ├── Crear Curso
│   ├── Actualizar Curso Completo
│   ├── Actualizar Curso Parcial
│   └── Eliminar Curso
├── 👨‍🎓 3. SIA Colegios - Estudiantes (8 endpoints)
│   ├── Listar Estudiantes (con filtros)
│   ├── Obtener Estudiante por ID
│   ├── Estudiantes por Código de Curso
│   ├── Crear Estudiante
│   ├── Actualizar Estudiante Completo
│   ├── Actualizar Estudiante Parcial
│   ├── Transferir Estudiante de Curso
│   └── Eliminar Estudiante
├── 👨‍🏫 4. Profesores & Asignaturas (9 endpoints)
│   ├── Listar Profesores
│   ├── Crear Profesor
│   ├── Actualizar Profesor
│   ├── Eliminar Profesor
│   ├── Listar Asignaturas
│   ├── Crear Asignatura
│   ├── Actualizar Asignatura
│   ├── Asignar Profesor a Asignatura
│   └── Desasignar Profesor de Asignatura
├── 📊 5. Calificaciones (5 endpoints)
│   ├── Listar Calificaciones (con filtros)
│   ├── Registrar Calificación
│   ├── Actualizar Calificación
│   ├── Eliminar Calificación
│   └── Calificaciones por Periodo
└── 🛠️ 6. Utilidades (2 endpoints)
    ├── Health Check MS Profesores
    └── Health Check MS Calificaciones

🔄 Flujo de Pruebas Recomendado

  1. 🔑 Ejecutar LOGIN para obtener token JWT
  2. 🎓 Crear curso y guardar ID
  3. 👨‍🎓 Crear estudiante asignado al curso
  4. 👨‍🏫 Crear profesor y guardar ID
  5. 📚 Crear asignatura y guardar ID
  6. 🔗 Asignar profesor a asignatura
  7. 📊 Registrar calificación usando los IDs anteriores
  8. ✏️ Probar actualizaciones (curso, estudiante, profesor, asignatura, calificación)
  9. 🔄 Probar transferencia de estudiante entre cursos
  10. 🗑️ Limpiar datos (eliminar calificación, estudiante, profesor, curso)

⚙️ Variables Automáticas Manejadas

La colección maneja automáticamente:

  • jwt_token: Token de autenticación
  • curso_id: ID del último curso creado
  • estudiante_id: ID del último estudiante creado
  • profesor_id: ID del último profesor creado
  • asignatura_id: ID de la última asignatura creada
  • calificacion_id: ID de la última calificación registrada

🔧 CONFIGURACIÓN AVANZADA

🌍 Variables de Entorno

// config.js
GX_SIA_URL=http://component-1:8000       // SIA Colegios
GX_MS1_URL=http://component-2-1:8080/graphql  // Profesores
GX_MS2_URL=http://component-2-2:8081/graphql  // Calificaciones  
GX_AUTH_URL=http://component-4:8080           // Autenticación

🗄️ Bases de Datos

Servicio Base de Datos Puerto Uso Datos Precargados
Component-1 PostgreSQL 5433 Cursos y estudiantes 18 cursos, 36 estudiantes
Component-4 PostgreSQL 5432 Usuarios y autenticación Usuario de prueba
Component-2-1 MongoDB 27018 Profesores y asignaturas -
Component-2-2 MongoDB 27019 Calificaciones -

🔐 Autenticación JWT

// Headers para endpoints protegidos
Authorization: Bearer [TOKEN_JWT]

// El token se incluye automáticamente en el contexto GraphQL
// y está disponible en todos los resolvers

🚨 RESOLUCIÓN DE PROBLEMAS

🔍 Verificación de Servicios

# Verificar todos los contenedores están ejecutándose
docker-compose ps

# Ver logs de un servicio específico
docker-compose logs api-gateway
docker-compose logs component-1
docker-compose logs component-4
docker-compose logs component-2-1
docker-compose logs component-2-2

# Reiniciar servicios si hay problemas
docker-compose restart

🏥 Health Checks

# Verificar SIA Colegios
query { cursos { count } }

# Verificar conectividad Component-2-1
query { holaMundo1 }

# Verificar conectividad Component-2-2  
query { holaMundo2 }

# Ver todas las queries disponibles
query {
  __schema {
    queryType {
      fields {
        name
        description
      }
    }
  }
}

🐛 Problemas Comunes

Error: "Cannot query field"

  • Solución: Verificar que todos los contenedores estén ejecutándose
  • Comando: docker-compose restart

Error: "Authentication failed"

  • Solución: Ejecutar login primero y verificar que el token se guardó
  • Credenciales: test@example.com / password123

Error: "Connection refused"

  • Solución: Esperar 30-60 segundos después del docker-compose up
  • Verificar: Los microservicios necesitan tiempo para inicializarse

Error: "Component-1 restarting"

  • Solución: Problema resuelto con comando ["django"] en docker-compose
  • Verificar: Logs no deben mostrar errores de locale

📊 MONITOREO Y MÉTRICAS

📈 URLs de Monitoreo

🌐 API Gateway GraphQL Playground: http://localhost:9000/graphql
🎓 Component-1 SIA API: http://localhost:8083/api/
🔒 Component-4 Health: http://localhost:8082/health
👨‍🏫 Component-2-1 GraphQL: http://localhost:8080/graphql  
📊 Component-2-2 GraphQL: http://localhost:8081/graphql

📊 Métricas de Estado

  • ✅ API Gateway: Operativo en puerto 9000
  • ✅ SIA Colegios: Django REST API funcionando en puerto 8083
  • ✅ Autenticación: JWT + OAuth2 funcionando
  • ✅ CRUD Profesores: Todas las operaciones disponibles
  • ✅ CRUD Asignaturas: Incluyendo actualización y desasignación
  • ✅ CRUD Calificaciones: Con actualización selectiva mejorada
  • ✅ Bases de Datos: 2 PostgreSQL + 2 MongoDB conectadas

🏆 CARACTERÍSTICAS DESTACADAS

⭐ Funcionalidades Implementadas

  1. 🆕 SIA Colegios Completo: 15 endpoints para gestión de cursos y estudiantes
  2. 🆕 Actualización Parcial: Todos los recursos soportan actualización parcial
  3. 🆕 Filtros Avanzados: Búsqueda, ordenamiento y paginación en SIA
  4. 🆕 Relaciones Inteligentes: Cursos-Estudiantes con resolvers automáticos
  5. 🆕 Datos Precargados: 18 cursos (1-A a 11-B) y 36 estudiantes listos
  6. 🆕 Validación de Datos: Documentos únicos, fechas válidas, referencias correctas

🔐 Seguridad

  • JWT Authentication: Tokens seguros con Component-4
  • Google OAuth2: Integración completa con Google
  • Authorization Headers: Protección automática de endpoints
  • Input Validation: Validación en todos los niveles

🚀 Performance

  • GraphQL Caching: Optimización de consultas
  • Connection Pooling: Gestión eficiente de conexiones DB
  • Async/Await: Operaciones no bloqueantes
  • Docker Networking: Comunicación optimizada entre servicios
  • Paginación: Respuestas optimizadas para grandes datasets

📞 SOPORTE Y CONTRIBUCIÓN

🛠️ Stack Tecnológico

  • API Gateway: Node.js 18+ + Express + Apollo GraphQL
  • SIA Colegios: Django 4.2.9 + Django REST Framework + PostgreSQL
  • Authentication: Go + Gin + JWT + OAuth2 + PostgreSQL
  • Microservices: Java Spring Boot + GraphQL + MongoDB
  • Containerization: Docker + Docker Compose
  • Testing: Postman + Jest

📋 Estado del Proyecto

  • Component-1 (SIA) Integrado con 15 endpoints funcionales
  • Component-4 Integrado sin dañar funcionalidades existentes
  • Todas las operaciones CRUD funcionando correctamente
  • Testing exhaustivo completado exitosamente con 35 endpoints
  • Documentación completa actualizada
  • Ecosistema listo para producción

🎯 RESUMEN EJECUTIVO

El ecosistema de microservicios está 100% operativo con las siguientes capacidades:

  • 🎓 Sistema de Información Académica completo con cursos y estudiantes
  • 🔒 Autenticación robusta con JWT y OAuth2
  • 👨‍🏫 Gestión completa de profesores y asignaturas
  • 📊 Sistema de calificaciones con funcionalidades avanzadas
  • 🧪 Suite de testing completa con Postman (35 endpoints)
  • 📚 Documentación exhaustiva y actualizada
  • 🚀 Deployment automatizado con Docker

Todos los objetivos cumplidos exitosamente con 4 microservicios integrados, 35 endpoints disponibles y funcionalidad completa preservada.

About

Capa de comunicación

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5