-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathmodels.py
More file actions
27 lines (18 loc) · 1002 Bytes
/
models.py
File metadata and controls
27 lines (18 loc) · 1002 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import typing
import sqlalchemy as sa
from advanced_alchemy.base import BigIntAuditBase, orm_registry
from sqlalchemy import orm
METADATA: typing.Final = orm_registry.metadata
orm.DeclarativeBase.metadata = METADATA
class Deck(BigIntAuditBase):
__tablename__ = "decks"
name: orm.Mapped[str] = orm.mapped_column(sa.String, nullable=False)
description: orm.Mapped[str | None] = orm.mapped_column(sa.String, nullable=True)
cards: orm.Mapped[list[Card]] = orm.relationship("Card", lazy="noload", uselist=True)
class Card(BigIntAuditBase):
__tablename__ = "cards"
__table_args__ = (sa.UniqueConstraint("deck_id", "front", name="card_deck_id_front_uc"),)
front: orm.Mapped[str] = orm.mapped_column(sa.String, nullable=False)
back: orm.Mapped[str | None] = orm.mapped_column(sa.String, nullable=True)
hint: orm.Mapped[str | None] = orm.mapped_column(sa.String, nullable=True)
deck_id: orm.Mapped[int] = orm.mapped_column(sa.Integer, sa.ForeignKey("decks.id"))