fix(objekt): Fahrzeug-Zuordnung als 1:n statt n:m (fachliche Korrektur)
CI / backend-tests (push) Failing after 1m23s
CI / frontend-build (push) Successful in 29s

Nutzer-Korrektur: "Ein Objekt gehört immer nur zu genau einem Fahrzeug"
- Spalte gezogen_von_objekt_id -> fahrzeug_id (Rename-Migration 0010)
- Zuvor begonnener n:m-Ansatz (objekt_kopplung Tabelle/Endpoints/Panel)
  wieder entfernt, da fachlich falsch
- PATCH /objekte/{id} prüft Existenz + direkten Zyklus (A<->B)
- Frontend: einfache Single-Select "Fahrzeug zuordnen" statt Kopplungs-Panel

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-05 01:11:25 +02:00
co-authored by Claude Sonnet 5
parent ebd6a9589e
commit 38b8ce1795
8 changed files with 144 additions and 109 deletions
@@ -0,0 +1,36 @@
"""objekt.gezogen_von_objekt_id -> fahrzeug_id (Umbenennung, gleiche Semantik)
Revision ID: 0010_objekt_kopplung
Revises: 0009_gezogen_von
Create Date: 2026-09-05
Nutzer-Klarstellung zu Migration 0009: es geht nicht spezifisch um Anhänger-
Zugfahrzeug-Kopplung, sondern allgemein um die Zuordnung eines Objekts
(Rucksack, Gerät, Anhänger, ...) zu genau einem Fahrzeug (1:n, ein Objekt
gehört jederzeit höchstens einem Fahrzeug). Strukturell identisch mit 0009,
nur die Spalte/Constraint/Index sauberer benannt statt "gezogen_von".
"""
from typing import Sequence, Union
from alembic import op
revision: str = "0010_objekt_kopplung"
down_revision: Union[str, None] = "0009_gezogen_von"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.execute("ALTER TABLE objekt RENAME COLUMN gezogen_von_objekt_id TO fahrzeug_id")
op.execute("ALTER INDEX idx_objekt_gezogen_von RENAME TO idx_objekt_fahrzeug")
op.execute(
"ALTER TABLE objekt RENAME CONSTRAINT objekt_kein_selbstbezug TO objekt_fahrzeug_kein_selbstbezug"
)
def downgrade() -> None:
op.execute(
"ALTER TABLE objekt RENAME CONSTRAINT objekt_fahrzeug_kein_selbstbezug TO objekt_kein_selbstbezug"
)
op.execute("ALTER INDEX idx_objekt_fahrzeug RENAME TO idx_objekt_gezogen_von")
op.execute("ALTER TABLE objekt RENAME COLUMN fahrzeug_id TO gezogen_von_objekt_id")