feat: Implement main application shell with navigation and color scheme toggle
- Added Appshell component with responsive navbar and main content area - Integrated ColorSchemeToggle for light/dark mode switching - Created Welcome component with styled title and introductory text - Developed ChatPage for LLM interaction with WebSocket support - Implemented Biblioteca for managing notes with rich text editor - Added LoginPage for user authentication with error handling - Introduced MessageList and MessageBubble components for chat messages - Styled components with CSS modules for consistent design
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
from loguru import logger
|
||||
from sqlalchemy import Column, Integer, String, Text, TIMESTAMP
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
from domains.ArquitectureLayer.Model import Model_base
|
||||
from domains.ConexionSql.Postgres_conexion import PostgresConexion
|
||||
from domains.Credenciales.postgres_credencial import PostgresCredencial
|
||||
|
||||
class LoggerDB:
|
||||
_sink_removido = False # ← evita múltiples remove() si se crean varias instancias
|
||||
|
||||
def __init__(self, credencial: PostgresCredencial, nombre_tabla: str, created_by: str = None):
|
||||
|
||||
# 🔥 Elimina todos los sinks activos, incluso los automáticos
|
||||
logger.remove()
|
||||
|
||||
self.conexion = PostgresConexion(credencial)
|
||||
self.engine = self.conexion.get_engine()
|
||||
self.Session = sessionmaker(bind=self.engine)
|
||||
self.nombre_tabla = nombre_tabla
|
||||
self.created_by = created_by
|
||||
|
||||
self.modelo_logger = self._generar_modelo_logger()
|
||||
self._crear_tabla_si_no_existe()
|
||||
logger.add(self._sink, level="DEBUG")
|
||||
|
||||
def _generar_modelo_logger(self):
|
||||
class LoggerTable(Model_base):
|
||||
__tablename__ = self.nombre_tabla
|
||||
__table_args__ = {'extend_existing': True} # 👈 Esta línea evita el error
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
nivel = Column(String, nullable=False)
|
||||
mensaje = Column(Text, nullable=False)
|
||||
fecha = Column(TIMESTAMP(timezone=True), nullable=False)
|
||||
modulo = Column(String, nullable=True)
|
||||
funcion = Column(String, nullable=True)
|
||||
linea = Column(Integer, nullable=True)
|
||||
return LoggerTable
|
||||
|
||||
def _crear_tabla_si_no_existe(self):
|
||||
self.modelo_logger.__table__.create(self.engine, checkfirst=True)
|
||||
|
||||
def _sink(self, message):
|
||||
record = message.record
|
||||
try:
|
||||
session = self.Session()
|
||||
log_entry = self.modelo_logger(
|
||||
nivel=record["level"].name,
|
||||
mensaje=record["message"],
|
||||
fecha=record["time"],
|
||||
modulo=record["module"],
|
||||
funcion=record["function"],
|
||||
linea=record["line"],
|
||||
sys_created_by=self.created_by
|
||||
)
|
||||
session.add(log_entry)
|
||||
session.commit()
|
||||
session.close()
|
||||
except SQLAlchemyError as e:
|
||||
print(f"[LoggerDB] Error guardando log en BD: {e}")
|
||||
Reference in New Issue
Block a user