from sqlmodel import Field, Relationship, Session, SQLModel from typing import List class Base(SQLModel): pass class User(Base, table=True): id: int | None = Field(default=None, primary_key=True) name: str = Field(index=True) email: str | None = None password: str is_admin: bool class AaGroupLink(Base, table=True): group_id: int | None = Field(default=None, foreign_key="group.id", primary_key=True) accessauth_id: int | None = Field(default=None, foreign_key="accessauthorization.id", primary_key=True) class Group(Base, table=True): id: int | None = Field(default=None, primary_key=True) name: str = Field(primary_key=True) cards: List["Card"] = Relationship(back_populates="group") accessauths: List["AccessAuthorization"] = Relationship(back_populates="groups", link_model=AaGroupLink) class AccessAuthorization(Base, table=True): id: int | None = Field(default=None, primary_key=True) name: str = Field(index=True) is_active: bool groups: list["Group"] = Relationship(back_populates="accessauths", link_model=AaGroupLink) timetables: list["Timetable"] = Relationship(back_populates="accessauth") 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="group.id") group: Group | None = Relationship(back_populates="cards") class Timetable(Base, table=True): id: int | None = Field(default=None, primary_key=True) weekday: int starttime: str duration: int accessauth_id: int | None = Field(default=None, foreign_key="accessauthorization.id") accessauth: AccessAuthorization | None = Relationship(back_populates="timetables")