from fastapi import APIRouter, Depends, HTTPException from fastapi import Path from backend.schemas.text_manager_schema import BibliotecaInput, NotaInput from fastapi.concurrency import run_in_threadpool from backend.db.conexion import get_conexion from backend.services.text_manager_srvc import * from src.ConexionSql.Postgres_conexion import PostgresConexion router = APIRouter() @router.post("/biblioteca", summary="Crear una nueva biblioteca") async def crear_biblioteca_endpoint( data: BibliotecaInput, conexion: PostgresConexion = Depends(get_conexion) ): try: return await run_in_threadpool( crear_biblioteca, data.nombre_biblioteca, conexion, data.descripcion, ) except ValueError as e: raise HTTPException(status_code=404, detail=str(e)) except Exception as e: raise HTTPException(status_code=500, detail=f"Error interno al crear la biblioteca: {str(e)}") @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") @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") @router.delete("/nota/{biblioteca_id}/{nota_id}", summary="Eliminar una nota por ID") def eliminar_nota_endpoint( biblioteca_id: str = Path(..., description="ID de la biblioteca"), nota_id: str = Path(..., description="ID de la nota a eliminar"), conexion: PostgresConexion = Depends(get_conexion) ): try: return eliminar_nota(conexion=conexion, biblioteca_id=biblioteca_id, nota_id=nota_id) except ValueError as e: raise HTTPException(status_code=404, detail=str(e)) except Exception: raise HTTPException(status_code=500, detail="Error interno al eliminar la nota") @router.put("/nota/{biblioteca_id}/{nota_id}", summary="Actualizar una nota por ID") def actualizar_nota_endpoint( biblioteca_id: str = Path(..., description="ID de la biblioteca"), nota_id: str = Path(..., description="ID de la nota a actualizar"), nota: NotaInput = ..., # body conexion: PostgresConexion = Depends(get_conexion) ): try: return actualizar_nota(conexion=conexion, biblioteca_id=biblioteca_id, nota_id=nota_id, nota_input=nota) except ValueError as e: raise HTTPException(status_code=404, detail=str(e)) except Exception: raise HTTPException(status_code=500, detail="Error interno al actualizar la nota")