Files
MABEA/backend/app/models/materialset.py
T
patrickandClaude Sonnet 5 52bf7d9ec9
CI / backend-tests (push) Successful in 2m55s
CI / frontend-build (push) Successful in 19s
feat(assets): ASSET-007 Material-Sets (Kits), ASSET-008 Consumable-Doku korrigiert
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 15:22:02 +02:00

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))