File size: 2,793 Bytes
325b400
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
65
66
67
68
69
70
71
72
73
74
from sqlalchemy import Column, String, Text, DateTime, Integer, ForeignKey, Boolean, Enum
from sqlalchemy.orm import relationship, DeclarativeBase
from sqlalchemy.sql import func
import enum


class UserRole(enum.Enum):
    ADMIN = "ADMIN"
    CUSTOMER = "CUSTOMER"
    SHIPPER = "SHIPPER"


class SexType(enum.Enum):
    OTHER = "OTHER"
    MALE = "MALE"
    FEMALE = "FEMALE"


class UserType(enum.Enum):
    BASIC = "BASIC"
    BOTH = "BOTH"
    EMAIL = "EMAIL"


class Base(DeclarativeBase):
    pass


class User(Base):
    __tablename__ = 'user'
    user_id = Column(Integer, primary_key=True, autoincrement=True)
    avatar = Column(Text, nullable=True)
    birth_date = Column(DateTime, nullable=True)
    city = Column(String(255), nullable=True)
    district = Column(String(255), nullable=True)
    email = Column(String(255), unique=True, nullable=False)
    full_name = Column(String(255), nullable=False)
    is_deleted = Column(Boolean, default=False)
    password = Column(Text, nullable=False)
    phone_number = Column(String(20), nullable=True)
    role = Column(Enum(UserRole), nullable=False)  # 🎯 Enum Role
    sex = Column(Enum(SexType), nullable=True)  # 🎯 Enum Sex
    street = Column(String(255), nullable=True)
    type = Column(Enum(UserType), nullable=True)  # 🎯 Enum Type
    username = Column(String(255), unique=True, nullable=False)
    date_created = Column(DateTime, default=func.now())
    date_updated = Column(DateTime, default=func.now(), onupdate=func.now())
    date_deleted = Column(DateTime, nullable=True)
    ward = Column(String(255), nullable=True)
    tokens = relationship("Token", back_populates="user")
    user_chats = relationship("UserChat", back_populates="user")


class Token(Base):
    __tablename__ = 'token'
    token_id = Column(Integer, primary_key=True, autoincrement=True)
    access_token = Column(Text, nullable=False)
    expire = Column(DateTime, nullable=False)
    refresh_token = Column(Text, nullable=False)
    user_id = Column(Integer, ForeignKey('user.user_id'), nullable=False)
    user = relationship("User", back_populates="tokens")


class UserChat(Base):
    __tablename__ = 'user_chat'
    user_chat_id = Column(Integer, primary_key=True, autoincrement=True)
    chat_name = Column(String(255), nullable=False)
    id_mongo_db = Column(String(255), nullable=True)
    user_id = Column(Integer, ForeignKey('user.user_id'), nullable=False)
    date_created = Column(DateTime, default=func.now())
    date_updated = Column(DateTime, default=func.now(), onupdate=func.now())
    date_deleted = Column(DateTime, nullable=True)
    is_deleted = Column(Boolean, default=False)
    user = relationship("User", back_populates="user_chats")