famfin-api / app /db /models.py
AhmadYarAI's picture
Chat Messages send and receive and also load the history
16a0a0a
from sqlalchemy import Column, Integer, String, Enum, ForeignKey, DateTime, Text, UniqueConstraint
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from app.db.database import Base
from sqlalchemy import Boolean
import enum
class UserRole(enum.Enum):
head = "head"
member = "member"
class UserDB(Base):
__tablename__ = "user_accounts"
id = Column(Integer, primary_key=True, index=True)
full_name = Column(String(100), nullable=False)
email = Column(String(120), unique=True, index=True, nullable=False)
password = Column(String(255), nullable=False)
role = Column(String(20), nullable=False) # "head" or "member"
family_code = Column(String(10), nullable=True)
otp_code = Column(String(6), nullable=True)
otp_expiry = Column(DateTime, nullable=True)
created_at = Column(
DateTime(timezone=True),
server_default=func.now()
)
family = relationship(
"Family",
back_populates="head",
uselist=False
)
usage = relationship(
"UserUsage",
back_populates="user",
uselist=False
)
chats = relationship(
"ChatMessage",
back_populates="user",
cascade="all, delete-orphan"
)
class UserUsage(Base):
__tablename__ = "user_usage"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("user_accounts.id", ondelete="CASCADE"), unique=True, nullable=False)
request_count = Column(Integer, default=0)
plan_type = Column(String, default="free")
is_paid = Column(Boolean, default=False)
month = Column(Integer)
year = Column(Integer)
# ๐Ÿ”— Relationship back to user
user = relationship("UserDB", back_populates="usage")