from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from typing import List, Optional from fastapi import Path from backend.db.conexion import get_conexion from backend.services.text_manager import ( crear_biblioteca, listar_bibliotecas, agregar_nota_a_biblioteca, listar_notas_de_biblioteca ) from src.ConexionSql.Postgres_conexion import PostgresConexion router = APIRouter() # --------------------------- # MODELOS PARA BIBLIOTECAS # --------------------------- class BibliotecaInput(BaseModel): nombre_biblioteca: str descripcion: str @router.post("/", summary="Crear una nueva biblioteca") def crear_biblioteca_endpoint( data: BibliotecaInput, conexion: PostgresConexion = Depends(get_conexion) ): try: return crear_biblioteca( nombre_biblioteca=data.nombre_biblioteca, descripcion=data.descripcion, conexion=conexion ) except ValueError as e: raise HTTPException(status_code=404, detail=str(e)) except Exception as e: raise HTTPException(status_code=500, detail="Error interno al crear la biblioteca") @router.get("/list", summary="Listar todas las bibliotecas") def listar_todas_bibliotecas( conexion: PostgresConexion = Depends(get_conexion) ): try: return listar_bibliotecas(conexion=conexion) except ValueError as e: raise HTTPException(status_code=404, detail=str(e)) except Exception as e: raise HTTPException(status_code=500, detail="Error interno al listar las bibliotecas") # --------------------------- # MODELOS PARA NOTAS # --------------------------- class NotaInput(BaseModel): titulo: str texto: str = "" tags: Optional[List[str]] = [] conexiones: Optional[List[str]] = [] resumen: Optional[str] = "" @router.post("/nota/{biblioteca_id}", summary="Agregar una nota a una biblioteca") def agregar_nota( biblioteca_id: str = Path(..., description="ID de la biblioteca a la que se agregará la nota"), nota: NotaInput = ..., # viene del body conexion: PostgresConexion = Depends(get_conexion) ): try: return agregar_nota_a_biblioteca( conexion=conexion, biblioteca_id=biblioteca_id, titulo=nota.titulo, texto=nota.texto, tags=nota.tags, conexiones=nota.conexiones, resumen=nota.resumen ) except ValueError as e: raise HTTPException(status_code=404, detail=str(e)) except Exception as e: raise HTTPException(status_code=500, detail="Error interno al agregar la nota") @router.get("/nota/list/{biblioteca_id}", summary="Listar todas las notas de una biblioteca") def listar_notas( biblioteca_id: str, conexion: PostgresConexion = Depends(get_conexion) ): try: return listar_notas_de_biblioteca(conexion, biblioteca_id) except ValueError as e: raise HTTPException(status_code=404, detail=str(e)) except Exception as e: raise HTTPException(status_code=500, detail="Error interno al listar las notas")