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")