Notas en frontend funcionando y pudiendo subir mas por sus endpoints
This commit is contained in:
@@ -1,21 +1,99 @@
|
||||
# backend/api/v1/biblioteca.py
|
||||
from fastapi import APIRouter, Depends
|
||||
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
|
||||
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("/")
|
||||
@router.post("/", summary="Crear una nueva biblioteca")
|
||||
def crear_biblioteca_endpoint(
|
||||
data: BibliotecaInput,
|
||||
conexion: PostgresConexion = Depends(get_conexion)
|
||||
):
|
||||
return crear_biblioteca(nombre_biblioteca=data.nombre_biblioteca,
|
||||
descripcion=data.descripcion,
|
||||
conexion=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")
|
||||
|
||||
@@ -3,8 +3,9 @@ from src.TextManager.biblioteca_mmr import BibliotecaRepo
|
||||
from src.Llms.Embedders.Openai_embedder import OpenAIEmbedder
|
||||
from src.ApiKeys.openai_apikey_mmr import OpenAICredencialRepo
|
||||
from src.ConexionSql.Postgres_conexion import PostgresConexion
|
||||
from backend.db.conexion import get_conexion
|
||||
|
||||
from src.TextManager.nota import Nota
|
||||
from src.TextManager.notas_biblioteca_mmr import generar_tabla_nota_para_biblioteca, NotaRepo
|
||||
from sqlalchemy import MetaData
|
||||
|
||||
def crear_biblioteca(nombre_biblioteca: str, conexion: PostgresConexion, descripcion: str):
|
||||
cred_repo = OpenAICredencialRepo(conexion)
|
||||
@@ -26,5 +27,106 @@ def crear_biblioteca(nombre_biblioteca: str, conexion: PostgresConexion, descrip
|
||||
}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
crear_biblioteca("hola_intento5")
|
||||
def listar_bibliotecas(conexion: PostgresConexion) -> list[dict]:
|
||||
repo = BibliotecaRepo(conexion)
|
||||
bibliotecas: list[Biblioteca] = repo.get_all()
|
||||
return [
|
||||
{
|
||||
"id": b.id,
|
||||
"nombre": b.nombre,
|
||||
"descripcion": b.descripcion,
|
||||
"vector_dim": b.vector_dim
|
||||
}
|
||||
for b in bibliotecas
|
||||
]
|
||||
|
||||
def agregar_nota_a_biblioteca(
|
||||
conexion: PostgresConexion,
|
||||
biblioteca_id: str,
|
||||
titulo: str,
|
||||
texto: str = "",
|
||||
tags: list[str] = None,
|
||||
conexiones: list[str] = None,
|
||||
resumen: str = ""
|
||||
):
|
||||
print("[INFO] Iniciando el proceso de agregar nota a la biblioteca...")
|
||||
|
||||
# Obtener la biblioteca
|
||||
print(f"[INFO] Buscando biblioteca con ID: {biblioteca_id}")
|
||||
repo_biblioteca = BibliotecaRepo(conexion)
|
||||
biblioteca = repo_biblioteca.get_by_id(biblioteca_id)
|
||||
if biblioteca is None:
|
||||
print(f"[ERROR] No se encontró la biblioteca con ID {biblioteca_id}")
|
||||
raise ValueError(f"No se encontró la biblioteca con ID {biblioteca_id}")
|
||||
print(f"[INFO] Biblioteca encontrada: {biblioteca.nombre} (vector_dim={biblioteca.vector_dim})")
|
||||
|
||||
# Crear objeto Nota
|
||||
print(f"[INFO] Creando objeto Nota con título: {titulo}")
|
||||
nota = Nota(
|
||||
titulo=titulo,
|
||||
texto=texto,
|
||||
tags=tags or [],
|
||||
conexiones=conexiones or [],
|
||||
resumen=resumen or "",
|
||||
# vector=biblioteca.embedder.embed_text(texto),
|
||||
# vector_resumen=biblioteca.embedder.embed_text(resumen) if resumen else None
|
||||
)
|
||||
# Mostrar atributos seguros
|
||||
print(
|
||||
f"[DEBUG] Nota creada: titulo='{nota.titulo}', "
|
||||
f"texto_len={len(nota.texto)}, "
|
||||
f"tags={len(nota.tags)}, "
|
||||
f"conexiones={len(nota.conexiones)}, "
|
||||
f"resumen_len={len(nota.resumen)}"
|
||||
)
|
||||
|
||||
# Preparar tabla y modelo de nota
|
||||
print(f"[INFO] Generando tabla y modelo de Nota para la biblioteca: {biblioteca.nombre}")
|
||||
metadata = MetaData()
|
||||
tabla, ModeloNota = generar_tabla_nota_para_biblioteca(
|
||||
biblioteca.nombre,
|
||||
biblioteca.vector_dim,
|
||||
metadata
|
||||
)
|
||||
print(f"[INFO] Creando tabla en la base de datos si no existe...")
|
||||
metadata.create_all(conexion.get_engine())
|
||||
print(f"[INFO] Tabla '{tabla.name}' verificada/creada.")
|
||||
|
||||
# Guardar la nota
|
||||
print(f"[INFO] Guardando nota en la base de datos...")
|
||||
repo_nota = NotaRepo(conexion.get_session(), ModeloNota)
|
||||
nota_id = repo_nota.add(nota)
|
||||
print(f"[INFO] Nota guardada con ID: {nota_id}")
|
||||
|
||||
resultado = {
|
||||
"mensaje": f"Nota '{titulo}' agregada con éxito a la biblioteca '{biblioteca.nombre}'.",
|
||||
"nota_id": nota_id
|
||||
}
|
||||
|
||||
print(f"[SUCCESS] {resultado['mensaje']}")
|
||||
return resultado
|
||||
|
||||
|
||||
def listar_notas_de_biblioteca(conexion: PostgresConexion, biblioteca_id: str) -> list[dict]:
|
||||
repo_biblioteca = BibliotecaRepo(conexion)
|
||||
biblioteca = repo_biblioteca.get_by_id(biblioteca_id)
|
||||
if not biblioteca:
|
||||
raise ValueError(f"No se encontró la biblioteca con ID: {biblioteca_id}")
|
||||
|
||||
metadata = MetaData()
|
||||
tabla, ModeloNota = generar_tabla_nota_para_biblioteca(biblioteca.nombre, biblioteca.vector_dim, metadata)
|
||||
metadata.create_all(conexion.get_engine())
|
||||
|
||||
repo_nota = NotaRepo(conexion.get_session(), ModeloNota)
|
||||
notas = repo_nota.get_all()
|
||||
return [
|
||||
{
|
||||
"id": n.id,
|
||||
"titulo": n.titulo,
|
||||
"tags": n.tags,
|
||||
"texto": n.texto,
|
||||
"resumen": n.resumen,
|
||||
"conexiones": n.conexiones
|
||||
}
|
||||
for n in notas
|
||||
]
|
||||
Reference in New Issue
Block a user