240 lines
8.1 KiB
Markdown
240 lines
8.1 KiB
Markdown
# Deck of Cards – Proyecto TFG
|
||
|
||
<div align="center">
|
||
|
||

|
||

|
||

|
||

|
||

|
||

|
||

|
||
|
||
</div>
|
||
|
||
<div align="center">
|
||
<strong>Proyecto completo con backend en FastAPI + MongoDB, frontend en React + Vite, contenedores Docker, autenticación por email y Google OAuth 2.0, y sistema de cálculo DoC-MF / DoC-IT2MF.</strong>
|
||
</div>
|
||
|
||
Incluye:
|
||
|
||
- Backend en **FastAPI + MongoDB**
|
||
- Frontend en **Vite + React**
|
||
- Contenedores Docker para todo el proyecto
|
||
- Sistema de historial por usuario
|
||
- Login normal + Login con Google
|
||
|
||
---
|
||
|
||
# ⚡ 0. ¿En qué consiste?
|
||
|
||
**Deck of Cards – TFG** es una herramienta completa diseñada para construir, validar y evaluar **funciones de pertenencia difusas** mediante el método **Deck of Cards (DoC)**, tanto en su versión **T1MF** (tipo-1) como **IT2MF** (tipo-2 intervalar).
|
||
|
||
> [!INFO]
|
||
> El sistema combina un backend robusto en **FastAPI + MongoDB**, un frontend moderno en **React + Vite**, autenticación por email y **Google OAuth 2.0**, y un sistema de historial por usuario para guardar y recuperar trabajos anteriores.
|
||
|
||
---
|
||
|
||
### ◻️ Objetivos del proyecto
|
||
|
||
- Digitalizar el método Deck of Cards, permitiendo calcular funciones de valor y funciones de pertenencia de forma rápida, guiada y sin errores.
|
||
- Facilitar la creación de modelos difusos para toma de decisiones, análisis multicriterio y sistemas expertos.
|
||
- Ofrecer validación automática de núcleos, soportes y nodos para evitar inconsistencias matemáticas.
|
||
- Permitir trabajar tanto con funciones **T1MF** como **IT2MF**, incluyendo intervalos en cartas blancas.
|
||
- Proveer una API modular, clara y reutilizable para estudiantes, investigadores y desarrolladores.
|
||
- Guardar el trabajo del usuario mediante un sistema de historial asociado a su cuenta.
|
||
|
||
---
|
||
|
||
### ◻️ ¿En qué puede ayudar a la gente?
|
||
|
||
Este proyecto es especialmente útil para:
|
||
|
||
- **Estudiantes** que necesiten aprender o aplicar lógica difusa y métodos de decisión.
|
||
- **Investigadores** que requieran generar funciones de pertenencia de forma precisa y reproducible.
|
||
- **Profesionales** que trabajen en:
|
||
- análisis multicriterio (MCDA)
|
||
- sistemas expertos
|
||
- inteligencia artificial explicable
|
||
- sistemas de recomendación
|
||
- **Desarrolladores** que quieran integrar cálculos DoC-MF o IT2MF en sus propias aplicaciones.
|
||
|
||
> [!NOTE]
|
||
> El sistema automatiza cálculos que normalmente se realizan a mano, reduce errores y permite visualizar resultados de forma inmediata.
|
||
|
||
---
|
||
|
||
### ◼️ ¿Cómo se usa?
|
||
|
||
1. El usuario puede (o no) iniciar sesión (email o Google OAuth).
|
||
2. Desde el frontend puede:
|
||
- Crear niveles y cartas blancas
|
||
- Calcular funciones de valor DoC
|
||
- Validar funciones T1MF
|
||
- Construir funciones T1MF e IT2MF completas
|
||
- Evaluar puntos dentro de una función
|
||
3. Cada operación puede guardarse en el **historial personal** del usuario.
|
||
4. El backend expone endpoints claros y modulares, permitiendo integrar el sistema en otros proyectos o automatizar cálculos.
|
||
|
||
|
||
---
|
||
|
||
# 🚀 1. Requisitos previos
|
||
|
||
Antes de empezar, necesitas:
|
||
|
||
- **Docker** para correr el proyecto
|
||
- **Cuenta de Google** para crear credenciales OAuth
|
||
- **Git** para clonar el repositorio
|
||
|
||
---
|
||
|
||
# 📦 2. Instalación y ejecución del proyecto
|
||
|
||
Clona el repositorio:
|
||
|
||
```bash
|
||
git clone https://github.com/tu-repo/deck-of-cards.git
|
||
cd deck-of-cards
|
||
```
|
||
|
||
Levanta los contenedores:
|
||
|
||
```bash
|
||
docker compose up --build
|
||
```
|
||
> [!IMPORTANT]
|
||
>Esto iniciará:
|
||
>- Backend (python) → http://localhost:8000
|
||
>- Frontend (react) → http://localhost:5173
|
||
>- Base de Datos (mongodb) → puerto 27017
|
||
|
||
---
|
||
|
||
# 🔌 3. Endpoints principales del proyecto
|
||
|
||
A continuación se resumen los endpoints más importantes del backend, organizados por funcionalidad.
|
||
|
||
# **Resumen de endpoints**
|
||
|
||
| Módulo | Método | Endpoint | ¿Qué hace? |
|
||
| :--- | :--- | :--- | :--- |
|
||
| **Auth** | `POST` | `/api/auth/register` | Registra un nuevo usuario y devuelve token + user_id. |
|
||
| | `POST` | `/api/auth/login` | Inicia sesión con email y contraseña. |
|
||
| | `POST` | `/api/auth/logout/{user_id}` | Cierra sesión y elimina el token del usuario. |
|
||
| | `GET` | `/api/auth/me` | Devuelve los datos del usuario autenticado. |
|
||
| **Google OAuth** | `GET` | `/api/auth/google/login` | Redirige a Google para iniciar sesión. |
|
||
| | `GET` | `/api/auth/google/callback` | Recibe el código de Google y genera el token de sesión. |
|
||
| **DoC – Función de valor** | `POST` | `/api/criteria/doc/value-function` | Calcula la función de valor DoC a partir de niveles y cartas blancas. |
|
||
| | `POST` | `/api/criteria/doc/value-function/points` | Devuelve los puntos (x,y) de la función de valor. |
|
||
| **T1MF – Validación** | `POST` | `/api/criteria/doc-mf/validate-simple` | Valida núcleo y soporte (sin nodos). |
|
||
| | `POST` | `/api/criteria/doc-mf/validate` | Valida niveles completos: núcleo, soporte y nodos. |
|
||
| **T1MF – Construcción y evaluación** | `POST` | `/api/criteria/doc-mf/build` | Construye la función de pertenencia DoC-MF. |
|
||
| | `POST` | `/api/criteria/doc-mf/evaluate` | Evalúa un punto x dentro de una función DoC-MF. |
|
||
| **IT2MF – Construcción** | `POST` | `/api/criteria/doc-it2mf/build` | Construye funciones IT2MF (lower y upper). |
|
||
| **Historial** | `POST` | `/api/history/add` | Guarda un elemento en el historial del usuario. |
|
||
| | `DELETE` | `/api/history/delete/{history_item_id}` | Elimina un elemento del historial. |
|
||
|
||
|
||
---
|
||
|
||
# 🔐 4. Configuración del archivo .env
|
||
|
||
El backend necesita un archivo `.env` para funcionar correctamente, especialmente para el login con Google.
|
||
|
||
📍 **Este archivo debe estar dentro de la carpeta `backend/`**, así:
|
||
|
||
```
|
||
deck-of-cards/
|
||
│
|
||
├── backend/
|
||
│ ├── .env ← AQUÍ
|
||
│ ├── main.py
|
||
│ ├── routers/
|
||
│ └── ...
|
||
```
|
||
|
||
Contenido mínimo del `.env`:
|
||
|
||
```
|
||
GOOGLE_CLIENT_ID=tu_client_id_de_google
|
||
GOOGLE_CLIENT_SECRET=tu_client_secret_de_google
|
||
```
|
||
|
||
> [!WARNING]
|
||
> No compartas esas claves.
|
||
|
||
---
|
||
|
||
# 🔑 5. Cómo crear GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET
|
||
|
||
Para activar el login con Google, debes crear credenciales OAuth 2.0.
|
||
|
||
### 🟦 Paso 1 — Entra en Google Cloud Console
|
||
https://console.cloud.google.com
|
||
|
||
### 🟩 Paso 2 — Crea un proyecto
|
||
Menú superior → “Seleccionar proyecto” → “Nuevo proyecto”.
|
||
|
||
### 🟧 Paso 3 — Configura la pantalla de consentimiento OAuth
|
||
En el buscador escribe: **OAuth consent screen**
|
||
Selecciona **External** → Rellena los datos → Guardar.
|
||
|
||
### 🟨 Paso 4 — Crea las credenciales OAuth
|
||
Menú lateral:
|
||
**APIs & Services → Credentials → Create Credentials → OAuth Client ID**
|
||
|
||
Tipo de aplicación:
|
||
✔ **Web application**
|
||
|
||
Añade este Redirect URI obligatorio:
|
||
http://localhost:8000/api/auth/google/callback
|
||
|
||
|
||
### 🟥 Paso 5 — Copia tus claves
|
||
Google te mostrará:
|
||
|
||
- **Client ID**
|
||
- **Client Secret**
|
||
|
||
Pégalos en tu `.env` dentro de `backend/`.
|
||
|
||
---
|
||
|
||
# 📚 6. Estructura del proyecto
|
||
```
|
||
deck-of-cards/
|
||
│
|
||
├── backend/ → API FastAPI + OAuth + MongoDB
|
||
│ ├── routers/
|
||
│ ├── models/
|
||
│ ├── utils/
|
||
│ ├── .env
|
||
│ └── main.py
|
||
│
|
||
├── frontend/ → Vite + React
|
||
│ ├── src/
|
||
│ └── ...
|
||
│
|
||
├── docker-compose.yaml
|
||
└── README.md
|
||
```
|
||
|
||
---
|
||
|
||
# 🎉 7. Listo para usar
|
||
|
||
Con esto, ya puedes:
|
||
|
||
- Clonar el proyecto
|
||
- Crear sus credenciales de Google
|
||
- Configurar el ```.env```
|
||
- Levantar el sistema con Docker
|
||
- Usar login normal y login con Google
|
||
|
||
Y ...
|
||
|
||
¡Proyecto listo para ejecutarse en local!
|
||
|
||
Gracias por llegar hasta aquí :)
|