Skip to content

IngSoft1-Bobina/dotc-backend

Repository files navigation

Death on the Cards - Backend

Python Framework Comms ORM Tests

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.

🏛️ Arquitectura del proyecto

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.

Estructura de capas


/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)

🚀 Configuración y ejecución

Sigue estos pasos para levantar el entorno de desarrollo local:

1. Prerrequisitos

  • Python 3.10+
  • uv: Un instalador y gestor de paquetes de Python. Si no lo tienes, instálalo con pip install uv o tu administrador de paquetes del SO.

2. Instalación

  1. Clona el repositorio:

    git clone https://github.com/IngSoft1-Bobina/dotc-backend.git
    cd dotc-backend
  2. Crea el entorno virtual:

    uv venv
  3. Activa el entorno virtual:

    • En Linux / macOS:

      source .venv/bin/activate
    • En Windows (PowerShell):

      .venv\Scripts\Activate.ps1
  4. Instala las dependencias:

    uv pip install -r requirements.txt

3. Ejecución

  1. Inicia el servidor de desarrollo: El flag --reload reiniciará el servidor automáticamente cada vez que guardes un cambio en el código.

    uv run uvicorn app.main:app --reload
  2. 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

✅ Ejecución de tests

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 5

Languages