switch orm to sqlmodel

This commit is contained in:
2026-04-18 23:40:44 +02:00
parent 000922a7a6
commit 287235243a
6 changed files with 129 additions and 113 deletions

View File

@@ -1,35 +1,43 @@
from __future__ import annotations
from typing import List, Optional
from sqlmodel import Field, Relationship, Session, SQLModel
from typing import List
from sqlalchemy import ForeignKey
from sqlalchemy import Column, Integer, String, Boolean
from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase, relationship
class Base(DeclarativeBase):
class Base(SQLModel):
pass
class User(Base):
__tablename__ = "users"
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
id: Mapped[int] = mapped_column(primary_key=True, index=True)
name: Mapped[str]
email: Mapped[Optional[str]]
password: Mapped[str]
is_admin: Mapped[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 AccessAuthorization(Base): #parent
__tablename__ = "access_authorizations"
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)
name: Mapped[str] = mapped_column(primary_key=True, index=True)
is_active: Mapped[bool]
card_id: Mapped[List["Card"]] = relationship(back_populates="user")
class Card(Base): #child
__tablename__ = "cards"
id: Mapped[int] = mapped_column(primary_key=True, index=True)
uuid: Mapped[str] = mapped_column(index=True)
user_id = mapped_column(ForeignKey("access_authorizations.name"))
user: Mapped["AccessAuthorization"] = relationship(back_populates="card_id")
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")