Spaces:
Running
Running
File size: 1,774 Bytes
67cbfcd 19ad8c9 5384a65 9e3d157 9a450c0 5384a65 19ad8c9 5384a65 67cbfcd 16a0a0a 50b9503 dd37f2c 16a0a0a 9a450c0 dd37f2c 9a450c0 dd37f2c 9a450c0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 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")
|