Reyes Vinces Jeremy Daniel: Servicio REST Delgado Cuadros Jostin Manuel: GRAPHQL Marcos Zambrano: Frontend, Websocket
Este proyecto está construido en una arquitectura de microservicios con diferentes lenguajes de programación en los cuales se desarrollo un componente importante y diferente que construyen este proyecto.
El objetivo del proyecto CINE es ofrecer diferentes peliculas de diferentes generos, poder adquirir un asiento dentro de la sala de cine y ver todas las funciones de esa película.
El rol de administrador cuenta con un panel donde puede ver en tiempo real usuarios activos, funciones, peliculas, etc.
A partir de esta versión, la autenticación se gestiona a través de un microservicio independiente (Auth Service) que centraliza:
- Gestión de usuarios
- Generación de tokens JWT (access y refresh)
- Validación de credenciales
- Rate limiting en login
- Blacklist de tokens revocados
Backend:
- Python 3.10+, FastAPI, Uvicorn (REST API + Auth Service)
- Go 1.20+ (WebSocket)
- NestJS + TypeScript (GraphQL)
Frontend:
- Next.js + React + TypeScript
Base de Datos:
- Supabase (PostgreSQL) - Datos principales
- Supabase (Auth Service) - Gestión de autenticación
Herramientas:
- pnpm (gestor de dependencias frontend)
- Git
Python 3.10+
Node.js 18+
Go 1.20+
pnpm
Git
Terminal 1 - Auth Service:
cd backend/auth-service
python -m venv venv
venv/Scripts/activate # Windows
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8001✅ Acceso: http://localhost:8001/api/v1/docs
Terminal 2 - REST API:
cd backend/api-rest
venv/Scripts/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000✅ Acceso: http://localhost:8000/api/v1/docs
Terminal 3 - GraphQL:
cd backend/graphql-nest
npm install # Si no se ha hecho
npm run start:dev✅ Acceso: http://localhost:3001/graphql
Terminal 4 - WebSocket:
cd backend/websocket-go
go run main.go✅ Acceso: ws://localhost:8080/ws
Terminal 5 - Frontend:
cd frontend
pnpm install # Si no se ha hecho
pnpm dev✅ Acceso: http://localhost:3000
Primero ejecuta el servicio de autenticación:
cd backend/auth-service
python -m venv venv
venv/Scripts/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8001Acceder a: http://localhost:8001/api/v1/docs
Cuándo esté en ejecución el frontend, entrar en la url que genera y listo.
REST: http://localhost:8000/ --Este es el endopoint base, los endopoints de la aplicación son otros, para poder obtener/editar/ingresar/borrar datos de las tablas se usan los siguientes endpoints:
---Para Autenticación:---
POST /auth/register
POST /auth/login
POST /auth/login-json
---Para la tabla Películas:---
GET /peliculas
POST /peliculas
GET /peliculas/{id}
PUT /peliculas/{id}
DELETE /peliculas/{id}
---Para la tabla Salas:---
GET /salas
POST /salas
GET /salas/{id}
PUT /salas/{id}
DELETE /salas/{id}
--- Para la tabla Funciones:---
GET /funciones
POST /funciones
GET /funciones/{id}
PUT /funciones/{id}
DELETE /funciones/{id}
---Para la tabla Asientos:---
GET /asientos
POST /asientos
GET /asientos/{id}
PUT /asientos/{id}
DELETE /asientos/{id}
---Para la tabla Reservas:---
GET /reservas
POST /reservas
GET /reservas/{id}
PUT /reservas/{id}
DELETE /reservas/{id}
---Para la tabla Facturas:---
GET /facturas
POST /facturas
GET /facturas/{id}
PUT /facturas/{id}
DELETE /facturas/{id}
---Para la tabla Incidencias:---
GET /incidencias
POST /incidencias
GET /incidencias/{id}
PUT /incidencias/{id}
DELETE /incidencias/{id}
---Para la tabla Usuarios (requieren auth):---
GET /usuarios
GET /usuarios/me
GET /usuarios/{id}
PUT /usuarios/{id}
DELETE /usuarios/{id}
GRAPHQL: http://localhost:${process.env.PORT ?? 3001}/graphql --El graphql utilizara variable de entorno de supabase que está en un archivo .env
WEBSOCKET: ws://localhost:8080/ws --El websocket corre en el peurto 8080 por defecto.
FRONTEND: El frontend está conectado por defecto al websocket
La arquitectura que se ha usado es de microservicios, por qué está compuesta de diferente servicios dentro de un mismo repositorio. Usamos un servicio para usar REST (Push, Get, Put, Read, Delete), usamos un servicio aparte (Graphql) para obtener consultas personalizadas desde la base de datos, utilizamos frontend para poder visualizar lo que hacemos y utilizamos websocket en un servicio aparte también, para poder unir el REST y el Graphql con el frontend.
cinema-project/ ├── backend/ │ ├── app/ # REST API (Python/FastAPI) │ │ ├── main.py │ │ ├── models.py │ │ ├── schemas/ │ │ ├── routes/ │ │ └── services/ │ ├── graphql/ # GraphQL Service (NestJS) │ ├── websocket/ # WebSocket Server (Go) │ ├── requirements.txt │ ├── .env │ └── venv/ ├── frontend/ # Frontend (Next.js/React) └── README.md