from __future__ import annotations from typing import List, Optional from sqlalchemy import ForeignKey from sqlalchemy import Column, Integer, String, Boolean from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase, relationship class Base(DeclarativeBase): pass class User(Base): __tablename__ = "users" 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 AccessAuthorization(Base): #parent __tablename__ = "access_authorizations" 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")