File size: 5,853 Bytes
8ed8485 13bcdb0 8ed8485 a0ee4b9 8ed8485 4c0f818 8ed8485 a79c78b 28d41f9 a79c78b |
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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
from datetime import datetime, date, time
from sqlmodel import SQLModel, Field, Relationship
# --------------------
# --- Token Model ----
# --------------------
class Token(SQLModel):
access_token: str
token_type: str
class TokenData(SQLModel):
username: str | None = None
# --------------------
# --- Many-to-Many ---
# --------------------
class UserSiteLink(SQLModel, table=True):
user_id: int | None = Field(default=None, foreign_key="user.id", primary_key=True)
site_id: int | None = Field(default=None, foreign_key="site.id", primary_key=True)
# --------------------
# --- User Model -----
# --------------------
class UserBase(SQLModel):
username: str = Field(unique=True)
email: str | None = None
full_name: str | None = None
class User(UserBase, table=True):
id: int | None = Field(default=None, primary_key=True)
password: str
disabled: bool | None = True
is_su: bool | None = False
created_at: datetime | None = datetime.now()
updated_at: datetime | None = datetime.now()
sites: list["Site"] = Relationship(back_populates="users", link_model=UserSiteLink)
class UserCreate(SQLModel):
email: str
full_name: str
password: str
class UserPublic(UserBase):
id: int
disabled: bool
is_su: bool
created_at: datetime
updated_at: datetime
class UserUpdate(SQLModel):
username: str | None = None
email: str | None = None
full_name: str | None = None
password: str | None = None
disabled: bool | None = False
is_su: bool | None = False
class UserPublicMe(UserBase):
id: int
class UserUpdateMe(SQLModel):
username: str | None = None
email: str | None = None
full_name: str | None = None
password: str | None = None
# --------------------
# --- Site Model ----
# --------------------
class SiteBase(SQLModel):
name: str = Field(unique=True)
location: str | None = None
contact: str | None = None
in_camera: str | None = Field(default=None, unique=True)
out_camera: str | None = Field(default=None, unique=True)
in_url: str | None
out_url: str | None
class Site(SiteBase, table=True):
id: int | None = Field(default=None, primary_key=True)
created_at: datetime | None = datetime.now()
updated_at: datetime | None = datetime.now()
visits: list["Visit"] = Relationship(back_populates="site")
hosts: list["Guest"] = Relationship(back_populates="site")
users: list[User] = Relationship(back_populates="sites", link_model=UserSiteLink)
class SiteCreate(SiteBase):
pass
class SitePublic(SiteBase):
id: int
created_at: datetime | None = None
updated_at: datetime | None = None
class SiteUpdate(SQLModel):
name: str | None = None
location: str | None = None
contact: str | None = None
in_camera: str | None = Field(default=None, unique=True)
out_camera: str | None = Field(default=None, unique=True)
class SitePublicMe(SiteBase):
id: int
# --------------------
# --- Guest Model ----
# --------------------
class GuestBase(SQLModel):
name: str | None = None
vector: str = Field(unique=True)
is_female: bool | None = None
class Guest(GuestBase, table=True):
id: int | None = Field(default=None, primary_key=True)
site_id: int | None = Field(default=None, foreign_key="site.id")
created_at: datetime | None = datetime.now()
updated_at: datetime | None = datetime.now()
visits: list["Visit"] = Relationship(back_populates="guest")
site: Site | None = Relationship(back_populates="hosts")
class GuestCreateMe(GuestBase):
pass
class GuestCreate(GuestCreateMe):
site_id: int | None = None
class GuestPublicMe(GuestBase):
id: int
site_id: int | None = None
class GuestPublic(GuestPublicMe):
created_at: datetime | None = None
updated_at: datetime | None = None
class GuestUpdateMe(SQLModel):
name: str | None = None
vector: str | None = None
is_female: bool | None = None
class GuestUpdate(GuestUpdateMe):
site_id: bool | None = None
# --------------------
# --- Visit Model ----
# --------------------
class VisitBase(SQLModel):
date_in: date | None = datetime.now().date()
time_in: time | None = datetime.now().time()
time_out: time | None = None
is_group: bool | None = False
is_female: bool | None = None
is_new: bool | None = False
site_id: int | None = Field(default=None, foreign_key="site.id")
guest_id: int | None = Field(default=None, foreign_key="guest.id")
class Visit(VisitBase, table=True):
id: int | None = Field(default=None, primary_key=True)
site: Site | None = Relationship(back_populates="visits")
guest: Guest | None = Relationship(back_populates="visits")
class VisitCreate(VisitBase):
pass
class VisitPublic(VisitBase):
id: int
class VisitUpdate(SQLModel):
time_out: time | None = None
is_group: bool | None = None
is_female: bool | None = None
is_new: bool | None = None
# --------------------
# --- Relational -----
# --------------------
class UserPublicWith(UserPublic):
sites: list[SitePublic] = []
class VisitPublicWith(VisitPublic):
site: SitePublic | None = None
guest: GuestPublic | None = None
class SitePublicWith(SitePublic):
visits: list[VisitPublic] = []
hosts: list[GuestPublic] = []
users: list[UserPublic] = []
class GuestPublicWith(GuestPublic):
# site: SitePublic | None = None
visits: list[VisitPublic] = []
class VisitPublicWithGuest(VisitPublic):
guest: GuestPublicMe | None = None
class UserPublicMeWith(UserPublicMe):
sites: list[SitePublicMe] = []
class SitePublicMeWith(SitePublicMe):
visits: list[VisitPublicWithGuest] = []
hosts: list[GuestPublicMe] = []
class SitePublicMeWithHosts(SitePublicMe):
hosts: list[GuestPublicWith] = []
|