# BridgeLearn - Proyecto Final

Este repositorio contiene el código correspondiente al proyecto final desarrollado por un equipo de estudiantes de segundo curso del Grado en Ciencia de Datos. El objetivo de este trabajo es la creación de una plataforma educativa orientada a reducir la brecha digital, integrando conceptos de analítica de datos, desarrollo backend y despliegue de software.

## Desarrollo y Metodología

Es importante destacar que todos los componentes de este proyecto han sido desarrollados manualmente desde cero, con un enfoque académico y técnico orientado a consolidar los conocimientos adquiridos durante el curso:

- Modelos de Machine Learning: Diseñados, entrenados e implementados desde la base, evitando el uso de herramientas automatizadas o soluciones de caja negra.
- Contenedores Docker: Los archivos de configuración (Dockerfile y compose.yaml) han sido programados para orquestar los distintos servicios y asegurar la reproducibilidad del entorno.
- Backend y API: Toda la lógica del servidor, rutas y endpoints han sido construidos utilizando el framework FastAPI.
- Base de Datos y SQL: Los esquemas relacionales, el modelado de datos y las consultas han sido definidos mediante sentencias SQL en PostgreSQL, conectados al entorno mediante SQLAlchemy.

## Arquitectura del Proyecto

El código está estructurado de la siguiente manera para separar responsabilidades y facilitar su mantenimiento:

### 1. Base de Datos (PostgreSQL)
Ubicada en el directorio `schemas`, contiene los archivos `.sql` necesarios para la inicialización y estructuración de la base de datos relacional (usuarios, entregas, calificaciones, etc.). Se optó por PostgreSQL debido a su fiabilidad en entornos de producción y su capacidad para manejar estructuras complejas propias de la ciencia de datos.

### 2. Backend (FastAPI y Python)
El directorio `src/backend` contiene el servidor principal. Se utilizó Python y el framework FastAPI por su eficiencia y tipado estático, cualidades fundamentales para proyectos de datos. 
- `models.py`: Encargado del mapeo objeto-relacional (ORM) mediante SQLAlchemy.
- `routers`: Contiene la lógica de negocio dividida por dominios. Incluye un módulo de autenticación (JWT y encriptación bcrypt) y módulos de gestión académica.

### 3. Frontend (HTML, CSS y JavaScript Vanilla)
En `src/frontend` se aloja la interfaz de usuario. Con el fin de minimizar dependencias externas y demostrar un control sólido sobre las tecnologías web, se desarrolló como una Single Page Application (SPA) utilizando únicamente JavaScript puro (Vanilla JS). Las peticiones asíncronas al backend permiten actualizar la interfaz de manera dinámica sin recargar el navegador.

### 4. Despliegue (Docker Compose)
Para asegurar que el proyecto se ejecute de manera idéntica en cualquier sistema, se ha empaquetado en contenedores Docker. El archivo `compose.yaml` define la red interna, las variables de entorno y los volúmenes persistentes tanto para la base de datos como para el servidor de FastAPI.

## Instrucciones de Ejecución

Para iniciar el proyecto en un entorno local, es necesario disponer de Docker. El despliegue automatizado se realiza ejecutando el siguiente comando en la raíz del repositorio:

```bash
docker compose up --build -d user_backend
```

Una vez finalizada la construcción de las imágenes y levantados los contenedores, la aplicación estará disponible en el navegador web accediendo a la dirección `http://localhost:8001`.
