Desarrollo backend del proyecto "Death on the Cards" para el laboratorio de la materia Ingeniería de Software I 2025 - FAMAF - UNC.
Este servidor gestiona toda la lógica de negocio, la comunicación en tiempo real y la persistencia de datos para la adaptación del juego de mesa homónimo.
El sistema está diseñado en capas y módulos con responsabilidades únicas, siguiendo los principios de alta cohesión y bajo acoplamiento:
- Interfaces (
api,websockets): Comunicación en tiempo real, utilizando endpoints claros, siguiendo un protocolo definido, y permitiendo notificaciones para clientes individuales, de una partida en especifíco o del lobby general. - Dominio (
domain): Define las entidades centrales del sistema. - Lógica de Aplicación (
game): Implementa las reglas y flujos del juego, gestionando el estado de las partidas y la interacción entre jugadores. - Acceso a Datos (
database): Separación de la responsabilidad de comandos (escritura) y consultas (lectura). - Inyección de Dependencias (
dependencies): Facilita el testing, la mantenibilidad y el bajo acoplamiento.
/app
│
├── main.py
│
├── api/ # (1. Capa de interfaz API REST)
│ ├── endpoints/ # (Rutas: /games, /players)
│ ├── exception_handlers.py
│ ├── router.py
│ └── schemas.py
│
├── websockets/ # (1. Capa de interfaz Websocket)
│ ├── connection_manager.py
│ ├── interfaces.py
│ ├── router.py
│ └── protocol/ # (Eventos, mensajes y detalles)
│
├── domain/ # (2. Capa de dominio)
│ ├── models.py
│ └── enums.py
│
├── game/ # (3. Capa de lógica de aplicación)
│ ├── exceptions.py
│ ├── effect_executor.py
│ ├── game_manager.py
│ ├── interfaces.py
│ ├── services/ # (Servicios especializados: lobby, setup, turno, etc.)
│ ├── effects/ # (Efectos de sets y de eventos)
│ └── helpers/ # (Utilidades reutilizables: validadores, notificadores)
│
├── database/ # (4. Capa de persistencia de datos)
│ ├── orm_models.py
│ ├── interfaces.py
│ ├── queries.py
│ ├── commands.py
│ └── mappers.py
│
├── dependencies/ # (Mecanismo de inyección de dependencias)
│ └── dependencies.py
│
└── tests/ # (Batería de tests sobre las capas anteriores)
Sigue estos pasos para levantar el entorno de desarrollo local:
- Python 3.10+
uv: Un instalador y gestor de paquetes de Python. Si no lo tienes, instálalo conpip install uvo tu administrador de paquetes del SO.
-
Clona el repositorio:
git clone https://github.com/IngSoft1-Bobina/dotc-backend.git cd dotc-backend -
Crea el entorno virtual:
uv venv
-
Activa el entorno virtual:
-
En Linux / macOS:
source .venv/bin/activate -
En Windows (PowerShell):
.venv\Scripts\Activate.ps1
-
-
Instala las dependencias:
uv pip install -r requirements.txt
-
Inicia el servidor de desarrollo: El flag
--reloadreiniciará el servidor automáticamente cada vez que guardes un cambio en el código.uv run uvicorn app.main:app --reload
-
Accede a la documentación de la API: Una vez que el servidor esté corriendo, FastAPI genera automáticamente una documentación interactiva. Abre en tu navegador: http://127.0.0.1:8000/docs
Para asegurar que la lógica de negocio y las operaciones de base de datos funcionan correctamente, ejecuta la suite de tests con pytest.
El flag --cov=app permite visualizar el coverage que tienen los tests implementados por sobre la aplicación.
uv run pytest tests/ --cov=app