File size: 4,295 Bytes
5dc2d03
 
ce1e080
5a5f1de
 
 
5dc2d03
5a5f1de
87c52f8
119d5fc
5a5f1de
119d5fc
5a5f1de
 
 
 
 
 
 
 
7d3bfe5
f5bcfa6
 
 
 
 
 
 
 
7d3bfe5
 
fa1cbc5
 
 
51f598e
cc20cd4
7d3bfe5
ce1e080
5a5f1de
 
 
 
 
973406c
 
 
5a5f1de
 
 
5e7c541
c0f9c82
5a5f1de
baafdf4
fcdc4de
5a5f1de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87c52f8
5e7c541
 
87c52f8
5e7c541
87c52f8
 
 
5e7c541
 
87c52f8
5e7c541
87c52f8
 
 
5e7c541
 
87c52f8
5e7c541
87c52f8
 
5a5f1de
5e7c541
5a5f1de
 
618461c
 
 
 
87c52f8
5e7c541
 
87c52f8
5e7c541
87c52f8
 
618461c
5a5f1de
 
119d5fc
618461c
5a5f1de
 
 
 
119d5fc
 
5a5f1de
119d5fc
87c52f8
f5bcfa6
 
87c52f8
5e7c541
87c52f8
 
119d5fc
f5bcfa6
7d3bfe5
 
 
 
f5bcfa6
7d3bfe5
 
 
 
119d5fc
5a5f1de
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy import Column, String
import uuid
from datetime import date, datetime
from enum import Enum
from typing import List, Optional


from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy import CheckConstraint, UniqueConstraint, ForeignKey
from sqlmodel import Field, Relationship, SQLModel
from sqlalchemy import Enum as SQLEnum


class AssetStatus(str, Enum):
    ACTIVE = "Active"
    UNAVAILABLE = "Unavailable"
    ON_REQUEST = "On Request"
    IN_SERVICE = "In Service"


class Emotion(str, Enum):
    JOYFUL = "joyful"
    HAPPY = "happy"
    CALM = "calm"
    NEUTRAL = "neutral"
    ANXIOUS = "anxious"
    SAD = "sad"
    FRUSTRATED = "frustrated"


class AppVersion(SQLModel, table=True):
    __tablename__ = "app_version"
    version: str = Field(primary_key=True)
    apk_download_link: str
    ios_download_link: str

class Users(SQLModel, table=True):
    __tablename__ = "users"
    id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
    email_id: str = Field(unique=True, nullable=False)
    password: str = Field(nullable=False)
    user_name: str = Field(nullable=False)
    is_verified: bool = Field(
        default=False, sa_column_kwargs={"server_default": "false"}
    )
    dob: Optional[date] = None
    address: Optional[str] = None
    profile_picture: Optional[str] = None
    join_date: Optional[str] = None
    created_at: datetime = Field(default_factory=datetime.now)
    asset: List["Assets"] = Relationship(back_populates="user")
    water_logs: List["WaterLogs"] = Relationship(back_populates="user")
    journal_entries: List["JournalEntry"] = Relationship(back_populates="user")


class Teams(SQLModel, table=True):
    __tablename__ = "teams"
    id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
    name: str = Field(unique=True, nullable=False)


class Roles(SQLModel, table=True):
    __tablename__ = "roles"
    id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
    name: str = Field(unique=True, nullable=False)


class UserTeamsRole(SQLModel, table=True):
    __tablename__ = "user_teams_role"
    id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
    user_id: uuid.UUID = Field(
        sa_column=Column(
            UUID(as_uuid=True),
            ForeignKey("users.id", ondelete="CASCADE"),
            nullable=False,
        )
    )
    team_id: uuid.UUID = Field(
        sa_column=Column(
            UUID(as_uuid=True),
            ForeignKey("teams.id", ondelete="CASCADE"),
            nullable=False,
        )
    )
    role_id: uuid.UUID = Field(
        sa_column=Column(
            UUID(as_uuid=True),
            ForeignKey("roles.id", ondelete="CASCADE"),
            nullable=False,
        )
    )


class Assets(SQLModel, table=True):
    __tablename__ = "assets"
    id: uuid.UUID = Field(
        default_factory=uuid.uuid4,
        primary_key=True,
    )
    user_id: uuid.UUID = Field(
        sa_column=Column(
            UUID(as_uuid=True),
            ForeignKey("users.id", ondelete="CASCADE"),
            nullable=False,
        )
    )
    asset_id: str = Field(sa_column=Column("asset_id", String, nullable=False))
    type: str = Field(nullable=False)
    status: AssetStatus = Field(default=AssetStatus.UNAVAILABLE)
    user: "Users" = Relationship(back_populates="asset")
    __table_args__ = (UniqueConstraint("asset_id", "type", name="unique_assetid_type"),)


class EmotionLogs(SQLModel, table=True):
    __tablename__ = "emotion_logs"
    __table_args__ = (UniqueConstraint("user_id", "log_date"),)

    id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)

    user_id: uuid.UUID = Field(
        sa_column=Column(
            UUID(as_uuid=True),
            ForeignKey("users.id", ondelete="CASCADE"),
            nullable=False,
        )
    )

    morning_emotion: Optional[Emotion] = Field(
        sa_column=Column(
            SQLEnum(Emotion, name="emotion_enum", native_enum=True), nullable=True
        )
    )
    evening_emotion: Optional[Emotion] = Field(
        sa_column=Column(
            SQLEnum(Emotion, name="emotion_enum", native_enum=True), nullable=True
        )
    )

    log_date: date = Field(default_factory=date.today)