I basically copied this article https://fastapi.tiangolo.com/tutorial/security/oauth2-jwt
102 lines
3.0 KiB
Python
102 lines
3.0 KiB
Python
from sqlmodel import Field, Relationship, Session, SQLModel
|
|
from typing import List
|
|
|
|
class Base(SQLModel):
|
|
pass
|
|
|
|
#### User
|
|
class UserBase(Base):
|
|
name: str = Field(index=True)
|
|
email: str | None = None
|
|
is_admin: bool = False
|
|
|
|
class UserResponse(UserBase):
|
|
id: int
|
|
|
|
class UserCreate(UserBase):
|
|
password: str
|
|
|
|
class UserDB(UserBase, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
passwordhash: str
|
|
|
|
class UserUpdate(Base):
|
|
name: str | None = None
|
|
email: str | None = None
|
|
is_admin: bool | None = None
|
|
password: str | None = None
|
|
|
|
#### Special
|
|
class AaGroupLink(Base, table=True):
|
|
group_id: int | None = Field(default=None, foreign_key="groupdb.id", primary_key=True)
|
|
accessauth_id: int | None = Field(default=None, foreign_key="accessauthorizationdb.id", primary_key=True)
|
|
|
|
#### Token
|
|
class Token(Base):
|
|
access_token: str
|
|
token_type: str
|
|
|
|
class TokenData(Base):
|
|
username: str | None = None
|
|
|
|
#### Group
|
|
class GroupBase(Base):
|
|
name: str = Field(index=True, unique=True)
|
|
|
|
class GroupCreate(GroupBase):
|
|
pass
|
|
|
|
class GroupDB(GroupBase, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
cards: List["Card"] = Relationship(back_populates="group")
|
|
accessauths: List["AccessAuthorizationDB"] = Relationship(back_populates="groups", link_model=AaGroupLink)
|
|
|
|
class GroupResponse(GroupBase):
|
|
id: int
|
|
cards: List["Card"] | None
|
|
accessauths: List["AccessAuthorizationDB"] | None
|
|
|
|
#### AccessAuthorization
|
|
class AccessAuthorizationBase(Base):
|
|
name: str = Field(index=True)
|
|
is_active: bool
|
|
|
|
class AccessAuthorizationDB(AccessAuthorizationBase, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
groups: List["GroupDB"] = Relationship(back_populates="accessauths", link_model=AaGroupLink)
|
|
timetables: List["Timetable"] = Relationship(back_populates="accessauth", cascade_delete=True)
|
|
|
|
class AccessAuthorizationCreate(AccessAuthorizationBase):
|
|
timetables: List["TimetableCreate"]
|
|
|
|
class AccessAuthorizationResponse(AccessAuthorizationBase):
|
|
id: int
|
|
timetables: List["Timetable"]
|
|
groups: List["GroupDB"]
|
|
|
|
class AccessAuthorizationUpdate(Base):
|
|
name: str | None = None
|
|
is_active: bool | None = None
|
|
timetables: List["TimetableCreate"] | None = None
|
|
|
|
|
|
#### Card
|
|
class Card(Base, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
uuid: str
|
|
group_id: int | None = Field(default=None, foreign_key="groupdb.id")
|
|
group: GroupDB | None = Relationship(back_populates="cards")
|
|
|
|
class TimetableBase(Base):
|
|
weekday: int = Field(le=7, ge=1)
|
|
starttime: str
|
|
duration: int = Field(gt=0, lt=1440)
|
|
|
|
class Timetable(TimetableBase, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
accessauth_id: int = Field(default=None, foreign_key="accessauthorizationdb.id")
|
|
accessauth: AccessAuthorizationDB = Relationship(back_populates="timetables")
|
|
|
|
class TimetableCreate(TimetableBase):
|
|
pass
|