refactor: remove commented sections and clean up code in various files
This commit is contained in:
@@ -16,9 +16,6 @@ from api.routers.test_mongo import router as test_mongo_router
|
|||||||
from api.routers.docit2mf_build import router as docit2mf_router
|
from api.routers.docit2mf_build import router as docit2mf_router
|
||||||
from api.routers.google_auth import router as google_auth_router
|
from api.routers.google_auth import router as google_auth_router
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
yield
|
yield
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
# models/docit2mf_models.py
|
|
||||||
|
|
||||||
from pydantic import BaseModel, Field, field_validator, ValidationInfo
|
from pydantic import BaseModel, Field, field_validator, ValidationInfo
|
||||||
from typing import List, Tuple, Union
|
from typing import List, Tuple, Union
|
||||||
|
|
||||||
|
|
||||||
BlankCardInput = Union[int, Tuple[int, int], List[int]]
|
BlankCardInput = Union[int, Tuple[int, int], List[int]]
|
||||||
|
|
||||||
|
|
||||||
class DoCIT2MFRequest(BaseModel):
|
class DoCIT2MFRequest(BaseModel):
|
||||||
term: str
|
term: str
|
||||||
core: tuple[float, float] = Field(..., description="Núcleo del conjunto difuso: [a, b]")
|
core: tuple[float, float] = Field(..., description="Núcleo del conjunto difuso: [a, b]")
|
||||||
|
|||||||
@@ -1,13 +1,8 @@
|
|||||||
# api/models/user_models.py
|
|
||||||
|
|
||||||
from typing import List, Optional, Union
|
from typing import List, Optional, Union
|
||||||
from pydantic import BaseModel, EmailStr, Field
|
from pydantic import BaseModel, EmailStr, Field
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# MODELOS DE FUNCIONES DIFUSAS
|
# MODELOS DE FUNCIONES DIFUSAS
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
class FuzzyTerm(BaseModel):
|
class FuzzyTerm(BaseModel):
|
||||||
term: str
|
term: str
|
||||||
@@ -23,9 +18,7 @@ class IT2FuzzyTerm(BaseModel):
|
|||||||
upper: FuzzyTerm
|
upper: FuzzyTerm
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# HISTORIAL
|
# HISTORIAL
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
class HistoryItem(BaseModel):
|
class HistoryItem(BaseModel):
|
||||||
id: Optional[str] = Field(default=None, alias="_id")
|
id: Optional[str] = Field(default=None, alias="_id")
|
||||||
@@ -39,9 +32,7 @@ class HistoryCreateRequest(BaseModel):
|
|||||||
results: List[Union[FuzzyTerm, IT2FuzzyTerm]]
|
results: List[Union[FuzzyTerm, IT2FuzzyTerm]]
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# USUARIOS
|
# USUARIOS
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
class UserCreate(BaseModel):
|
class UserCreate(BaseModel):
|
||||||
username: str
|
username: str
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
# api/routers/docit2mf_build.py
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from fastapi import APIRouter, HTTPException, Request
|
from fastapi import APIRouter, HTTPException, Request
|
||||||
from slowapi import Limiter
|
from slowapi import Limiter
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ def validate_simple_docmf(request: SimpleValidationRequest):
|
|||||||
results = validate_simple_levels(request.levels)
|
results = validate_simple_levels(request.levels)
|
||||||
invalid = [r for r in results if not r["valid"]]
|
invalid = [r for r in results if not r["valid"]]
|
||||||
|
|
||||||
# Caso: un solo nivel
|
|
||||||
if len(request.levels) == 1:
|
if len(request.levels) == 1:
|
||||||
if invalid:
|
if invalid:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
@@ -24,7 +23,6 @@ def validate_simple_docmf(request: SimpleValidationRequest):
|
|||||||
"details": results[0]
|
"details": results[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
# Caso: varios niveles
|
|
||||||
if invalid:
|
if invalid:
|
||||||
return {
|
return {
|
||||||
"message": "Validación completada.",
|
"message": "Validación completada.",
|
||||||
|
|||||||
@@ -14,10 +14,6 @@ GOOGLE_CLIENT_SECRET = os.getenv("GOOGLE_CLIENT_SECRET")
|
|||||||
REDIRECT_URI = os.getenv("GOOGLE_REDIRECT_URI")
|
REDIRECT_URI = os.getenv("GOOGLE_REDIRECT_URI")
|
||||||
SECRET_KEY = os.getenv("SECRET_KEY")
|
SECRET_KEY = os.getenv("SECRET_KEY")
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# 1. LOGIN → REDIRECCIÓN A GOOGLE
|
|
||||||
# -----------------------------
|
|
||||||
@router.get("/login")
|
@router.get("/login")
|
||||||
async def google_login():
|
async def google_login():
|
||||||
google_auth_url = (
|
google_auth_url = (
|
||||||
@@ -32,10 +28,6 @@ async def google_login():
|
|||||||
|
|
||||||
return RedirectResponse(google_auth_url)
|
return RedirectResponse(google_auth_url)
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# 2. CALLBACK → GOOGLE DEVUELVE EL CODE
|
|
||||||
# -----------------------------
|
|
||||||
@router.get("/callback")
|
@router.get("/callback")
|
||||||
async def google_callback(request: Request):
|
async def google_callback(request: Request):
|
||||||
|
|
||||||
|
|||||||
@@ -10,10 +10,6 @@ from api.utils.security import get_current_user
|
|||||||
|
|
||||||
router = APIRouter(prefix="/history", tags=["history"])
|
router = APIRouter(prefix="/history", tags=["history"])
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# 1. Añadir un elemento al historial
|
|
||||||
# -----------------------------
|
|
||||||
@router.post("/add")
|
@router.post("/add")
|
||||||
async def add_history_item(
|
async def add_history_item(
|
||||||
data: HistoryCreateRequest,
|
data: HistoryCreateRequest,
|
||||||
@@ -39,10 +35,6 @@ async def add_history_item(
|
|||||||
"history_item_id": str(history_item_id),
|
"history_item_id": str(history_item_id),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# 2. Eliminar un elemento del historial
|
|
||||||
# -----------------------------
|
|
||||||
@router.delete("/delete/{history_item_id}")
|
@router.delete("/delete/{history_item_id}")
|
||||||
async def delete_history_item(
|
async def delete_history_item(
|
||||||
history_item_id: str,
|
history_item_id: str,
|
||||||
@@ -64,9 +56,6 @@ async def delete_history_item(
|
|||||||
return {"message": "Elemento eliminado del historial"}
|
return {"message": "Elemento eliminado del historial"}
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# 3. Obtener todos los historiales de todos los usuarios (ordenados)
|
|
||||||
# -----------------------------
|
|
||||||
@router.get("/all")
|
@router.get("/all")
|
||||||
async def get_all_histories():
|
async def get_all_histories():
|
||||||
users = await users_collection.find().to_list(None)
|
users = await users_collection.find().to_list(None)
|
||||||
@@ -90,7 +79,6 @@ async def get_all_histories():
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
# Ordenar por fecha
|
|
||||||
all_histories_sorted = sorted(
|
all_histories_sorted = sorted(
|
||||||
all_histories,
|
all_histories,
|
||||||
key=lambda h: h["history_item"]["created_at"]
|
key=lambda h: h["history_item"]["created_at"]
|
||||||
@@ -98,10 +86,6 @@ async def get_all_histories():
|
|||||||
|
|
||||||
return {"count": len(all_histories_sorted), "histories": all_histories_sorted}
|
return {"count": len(all_histories_sorted), "histories": all_histories_sorted}
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# 4. Obtener historiales del usuario autenticado (ordenados)
|
|
||||||
# -----------------------------
|
|
||||||
@router.get("/user")
|
@router.get("/user")
|
||||||
async def get_user_histories(current_user: dict = Depends(get_current_user)):
|
async def get_user_histories(current_user: dict = Depends(get_current_user)):
|
||||||
user_id = current_user["_id"]
|
user_id = current_user["_id"]
|
||||||
@@ -116,7 +100,6 @@ async def get_user_histories(current_user: dict = Depends(get_current_user)):
|
|||||||
|
|
||||||
history = user.get("history", [])
|
history = user.get("history", [])
|
||||||
|
|
||||||
# Ordenar por fecha
|
|
||||||
history_sorted = sorted(history, key=lambda h: h["created_at"])
|
history_sorted = sorted(history, key=lambda h: h["created_at"])
|
||||||
|
|
||||||
formatted_history = []
|
formatted_history = []
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
# services/docit2mf_build_service.py
|
|
||||||
|
|
||||||
from typing import List, Union
|
from typing import List, Union
|
||||||
from api.models.docit2mf_models import DoCIT2MFRequest
|
from api.models.docit2mf_models import DoCIT2MFRequest
|
||||||
from api.models.docmf_models import DoCMFRequest
|
from api.models.docmf_models import DoCMFRequest
|
||||||
@@ -32,13 +30,11 @@ def _enforce_upper_ge_lower(lower, upper):
|
|||||||
Garantiza que la UMF (upper) nunca quede por debajo de la LMF (lower).
|
Garantiza que la UMF (upper) nunca quede por debajo de la LMF (lower).
|
||||||
Ajusta los valores de pertenencia si es necesario.
|
Ajusta los valores de pertenencia si es necesario.
|
||||||
"""
|
"""
|
||||||
# left nodes
|
|
||||||
for i in range(len(lower["left_nodes"])):
|
for i in range(len(lower["left_nodes"])):
|
||||||
ly = lower["left_nodes"][i][1]
|
ly = lower["left_nodes"][i][1]
|
||||||
uy = upper["left_nodes"][i][1]
|
uy = upper["left_nodes"][i][1]
|
||||||
upper["left_nodes"][i][1] = max(uy, ly)
|
upper["left_nodes"][i][1] = max(uy, ly)
|
||||||
|
|
||||||
# right nodes
|
|
||||||
for i in range(len(lower["right_nodes"])):
|
for i in range(len(lower["right_nodes"])):
|
||||||
ly = lower["right_nodes"][i][1]
|
ly = lower["right_nodes"][i][1]
|
||||||
uy = upper["right_nodes"][i][1]
|
uy = upper["right_nodes"][i][1]
|
||||||
@@ -58,9 +54,6 @@ def build_it2mf_from_level(level: DoCIT2MFRequest):
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# -------------------------
|
|
||||||
# LMF (mínimos)
|
|
||||||
# -------------------------
|
|
||||||
left_min = _extract_bounds(level.left_blank_cards, "min")
|
left_min = _extract_bounds(level.left_blank_cards, "min")
|
||||||
right_min = _extract_bounds(level.right_blank_cards, "min")
|
right_min = _extract_bounds(level.right_blank_cards, "min")
|
||||||
|
|
||||||
@@ -74,18 +67,13 @@ def build_it2mf_from_level(level: DoCIT2MFRequest):
|
|||||||
right_blank_cards=right_min,
|
right_blank_cards=right_min,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Convertir a dict para poder manipular como diccionario
|
|
||||||
lower = build_doc_mf_level(lower_level)
|
lower = build_doc_mf_level(lower_level)
|
||||||
if hasattr(lower, "model_dump"):
|
if hasattr(lower, "model_dump"):
|
||||||
lower = lower.model_dump()
|
lower = lower.model_dump()
|
||||||
|
|
||||||
# Asegurar que los nodos son listas mutables y ordenar
|
|
||||||
lower["left_nodes"] = _sort_nodes(lower["left_nodes"])
|
lower["left_nodes"] = _sort_nodes(lower["left_nodes"])
|
||||||
lower["right_nodes"] = _sort_nodes(lower["right_nodes"])
|
lower["right_nodes"] = _sort_nodes(lower["right_nodes"])
|
||||||
|
|
||||||
# -------------------------
|
|
||||||
# UMF (máximos)
|
|
||||||
# -------------------------
|
|
||||||
left_max = _extract_bounds(level.left_blank_cards, "max")
|
left_max = _extract_bounds(level.left_blank_cards, "max")
|
||||||
right_max = _extract_bounds(level.right_blank_cards, "max")
|
right_max = _extract_bounds(level.right_blank_cards, "max")
|
||||||
|
|
||||||
@@ -99,18 +87,13 @@ def build_it2mf_from_level(level: DoCIT2MFRequest):
|
|||||||
right_blank_cards=right_max,
|
right_blank_cards=right_max,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Convertir a dict para poder manipular como diccionario
|
|
||||||
upper = build_doc_mf_level(upper_level)
|
upper = build_doc_mf_level(upper_level)
|
||||||
if hasattr(upper, "model_dump"):
|
if hasattr(upper, "model_dump"):
|
||||||
upper = upper.model_dump()
|
upper = upper.model_dump()
|
||||||
|
|
||||||
# Asegurar que los nodos son listas mutables y ordenar
|
|
||||||
upper["left_nodes"] = _sort_nodes(upper["left_nodes"])
|
upper["left_nodes"] = _sort_nodes(upper["left_nodes"])
|
||||||
upper["right_nodes"] = _sort_nodes(upper["right_nodes"])
|
upper["right_nodes"] = _sort_nodes(upper["right_nodes"])
|
||||||
|
|
||||||
# -------------------------
|
|
||||||
# FIX: evitar inversión vertical (UMF < LMF)
|
|
||||||
# -------------------------
|
|
||||||
upper = _enforce_upper_ge_lower(lower, upper)
|
upper = _enforce_upper_ge_lower(lower, upper)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
# services/docmf_build_service.py
|
|
||||||
|
|
||||||
from api.models.docmf_models import DoCMFRequest
|
from api.models.docmf_models import DoCMFRequest
|
||||||
from api.models.user_models import FuzzyTerm
|
from api.models.user_models import FuzzyTerm
|
||||||
|
|
||||||
@@ -8,7 +6,6 @@ def build_single_docmf(request: DoCMFRequest):
|
|||||||
a, b = request.core
|
a, b = request.core
|
||||||
c, d = request.support
|
c, d = request.support
|
||||||
|
|
||||||
# LEFT
|
|
||||||
TL = sum(e + 1 for e in request.left_blank_cards)
|
TL = sum(e + 1 for e in request.left_blank_cards)
|
||||||
YL = 1 / TL
|
YL = 1 / TL
|
||||||
left_nodes = []
|
left_nodes = []
|
||||||
@@ -21,7 +18,6 @@ def build_single_docmf(request: DoCMFRequest):
|
|||||||
acc += request.left_blank_cards[i - 1] + 1
|
acc += request.left_blank_cards[i - 1] + 1
|
||||||
left_nodes.append((x, round(acc * YL, 4)))
|
left_nodes.append((x, round(acc * YL, 4)))
|
||||||
|
|
||||||
# RIGHT
|
|
||||||
TR = sum(e + 1 for e in request.right_blank_cards)
|
TR = sum(e + 1 for e in request.right_blank_cards)
|
||||||
YR = 1 / TR
|
YR = 1 / TR
|
||||||
right_nodes = []
|
right_nodes = []
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ def validate_simple_level(level: dict):
|
|||||||
a, b = level["core"]
|
a, b = level["core"]
|
||||||
c, d = level["support"]
|
c, d = level["support"]
|
||||||
|
|
||||||
# Validación: núcleo dentro del soporte
|
|
||||||
if not (c <= a < b <= d):
|
if not (c <= a < b <= d):
|
||||||
errors.append("El núcleo debe estar completamente dentro del soporte.")
|
errors.append("El núcleo debe estar completamente dentro del soporte.")
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,9 @@ def validate_single_level(level: dict):
|
|||||||
a, b = level["core"]
|
a, b = level["core"]
|
||||||
c, d = level["support"]
|
c, d = level["support"]
|
||||||
|
|
||||||
# Core dentro del soporte
|
|
||||||
if not (c <= a < b <= d):
|
if not (c <= a < b <= d):
|
||||||
errors.append("El núcleo debe estar completamente dentro del soporte.")
|
errors.append("El núcleo debe estar completamente dentro del soporte.")
|
||||||
|
|
||||||
# Nodos cubren correctamente el soporte
|
|
||||||
left = level["left_nodes"]
|
left = level["left_nodes"]
|
||||||
right = level["right_nodes"]
|
right = level["right_nodes"]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user