Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
import uuid
|
|
from decimal import Decimal
|
|
|
|
from sqlalchemy import ForeignKey, Numeric, String, Text
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.db.base import Base
|
|
|
|
|
|
class MaterialSet(Base):
|
|
"""ASSET-007: wiederverwendbares Materialbündel (z.B. "Verbandsset"),
|
|
UNABHÄNGIG von einem Objekttyp - Unterschied zur bestehenden
|
|
Beladungsvorlage (Karte 09/10), die fest an einen Objekttyp gebunden ist.
|
|
Ein Set beschreibt nur "was gehört zusammen", keine Zuordnung zu einem
|
|
konkreten Objekt/Rucksack."""
|
|
|
|
__tablename__ = "material_set"
|
|
|
|
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
|
name: Mapped[str] = mapped_column(String, unique=True, nullable=False)
|
|
beschreibung: Mapped[str | None] = mapped_column(Text)
|
|
# IDENT-001 anwendbar: eigener QR-fähiger Code, optional (Set kann rein
|
|
# organisatorisch bleiben, ohne physisch aufgeklebtes Label).
|
|
code: Mapped[str | None] = mapped_column(String, unique=True)
|
|
|
|
|
|
class MaterialSetMitglied(Base):
|
|
__tablename__ = "material_set_mitglied"
|
|
|
|
set_id: Mapped[uuid.UUID] = mapped_column(
|
|
UUID(as_uuid=True), ForeignKey("material_set.id", ondelete="CASCADE"), primary_key=True
|
|
)
|
|
material_id: Mapped[int] = mapped_column(ForeignKey("material.id"), primary_key=True)
|
|
menge: Mapped[Decimal] = mapped_column(Numeric, nullable=False, default=Decimal(1))
|