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