bot_fam / python_backend /app /models.py
JairoDanielMT's picture
Add memory, pending actions, sync queue, and Lima reminders
2552437
from __future__ import annotations
from sqlalchemy import Float, Integer, String, Text
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Product(Base):
__tablename__ = "products"
id: Mapped[str] = mapped_column(String, primary_key=True)
producto: Mapped[str] = mapped_column(String, index=True)
precio: Mapped[float] = mapped_column(Float)
cantidad: Mapped[float] = mapped_column(Float)
unidad: Mapped[str] = mapped_column(String)
fecha_caducidad: Mapped[str] = mapped_column(String, index=True)
fecha_ingreso: Mapped[str] = mapped_column(String)
fecha_produccion: Mapped[str] = mapped_column(String)
categoria: Mapped[str] = mapped_column(String, default="")
caducidad_estimada: Mapped[int] = mapped_column(Integer, default=0)
notas: Mapped[str] = mapped_column(Text, default="")
fuente: Mapped[str] = mapped_column(String, default="web")
stock_actual: Mapped[float] = mapped_column(Float)
consumido_total: Mapped[float] = mapped_column(Float, default=0)
created_at: Mapped[str] = mapped_column(String)
updated_at: Mapped[str] = mapped_column(String)
class Movement(Base):
__tablename__ = "movements"
id: Mapped[str] = mapped_column(String, primary_key=True)
product_id: Mapped[str] = mapped_column(String, index=True)
producto: Mapped[str] = mapped_column(String, index=True)
tipo: Mapped[str] = mapped_column(String)
cantidad: Mapped[float] = mapped_column(Float)
unidad: Mapped[str] = mapped_column(String)
notas: Mapped[str] = mapped_column(Text, default="")
fuente: Mapped[str] = mapped_column(String, default="")
created_at: Mapped[str] = mapped_column(String)
class TelegramUser(Base):
__tablename__ = "telegram_users"
chat_id: Mapped[str] = mapped_column(String, primary_key=True)
username: Mapped[str] = mapped_column(String, default="")
first_name: Mapped[str] = mapped_column(String, default="")
last_name: Mapped[str] = mapped_column(String, default="")
is_active: Mapped[int] = mapped_column(Integer, default=1)
updated_at: Mapped[str] = mapped_column(String)
class SyncQueue(Base):
__tablename__ = "sync_queue"
queue_key: Mapped[str] = mapped_column(String, primary_key=True)
status: Mapped[str] = mapped_column(String, default="idle")
attempts: Mapped[int] = mapped_column(Integer, default=0)
last_error: Mapped[str] = mapped_column(Text, default="")
created_at: Mapped[str] = mapped_column(String)
updated_at: Mapped[str] = mapped_column(String)
class ChatMemory(Base):
__tablename__ = "chat_memory"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
chat_id: Mapped[str] = mapped_column(String, index=True)
kind: Mapped[str] = mapped_column(String, index=True)
role: Mapped[str] = mapped_column(String, default="system")
content: Mapped[str] = mapped_column(Text)
created_at: Mapped[str] = mapped_column(String, index=True)
class PendingAction(Base):
__tablename__ = "pending_actions"
chat_id: Mapped[str] = mapped_column(String, primary_key=True)
action_type: Mapped[str] = mapped_column(String)
raw_text: Mapped[str] = mapped_column(Text, default="")
question: Mapped[str] = mapped_column(Text, default="")
created_at: Mapped[str] = mapped_column(String)
updated_at: Mapped[str] = mapped_column(String)
class ReminderDelivery(Base):
__tablename__ = "reminder_deliveries"
delivery_id: Mapped[str] = mapped_column(String, primary_key=True)
chat_id: Mapped[str] = mapped_column(String, index=True)
reminder_date: Mapped[str] = mapped_column(String, index=True)
created_at: Mapped[str] = mapped_column(String)