CI / backend-tests (push) Failing after 0s
- ORM-Modelle: Bereich, Kategorie, Standort, Objekttyp, Material (Prompt 06/07),
minimales Objekt-Modell (voll ausgebaut erst Sprint 2), Zustaendigkeit/
Kontrollverantwortung
- Admin-API 7a: GET/POST Stammdaten-Endpunkte, PATCH Material, Benutzerverwaltung
(anlegen/Rollen ändern), Zuständigkeits-/Kontrollverantwortungs-CRUD
- Vererbungslogik E2 als eigener Service (app/services/zustaendigkeit.py):
Standort-Zuordnung vererbt sich auf alle Objekte, Objekt-Zeile ist Vereinigung
statt Ersatz - GET /zustaendigkeiten/benutzer/{id}/objekte exponiert das
- Tests: Stammdaten-CRUD + Rollenrechte, Benutzerverwaltung (inkl. 409 bei
Login-Duplikat), E2-Vererbungslogik (Standort-only, Standort+Objekt-Vereinigung,
End-to-End über den Endpunkt)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from sqlalchemy import or_, select
|
||
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
||
from app.models.objekt import Objekt
|
||
from app.models.zustaendigkeit import Zustaendigkeit
|
||
|
||
|
||
async def zustaendige_objekte(db: AsyncSession, benutzer_id: int) -> list[Objekt]:
|
||
"""Karte 04 / Sprintplan E2: ein Benutzer ist für ein Objekt zuständig, wenn
|
||
ENTWEDER eine Standort-Zeile für dessen Standort ODER eine Objekt-Zeile für
|
||
das Objekt selbst existiert (Vereinigung, keine Überschreibung – eine
|
||
objektspezifische Zuordnung ergänzt die Standort-Vererbung, ersetzt sie nicht)."""
|
||
standort_ids_subq = (
|
||
select(Zustaendigkeit.standort_id)
|
||
.where(Zustaendigkeit.benutzer_id == benutzer_id, Zustaendigkeit.standort_id.is_not(None))
|
||
)
|
||
objekt_ids_subq = (
|
||
select(Zustaendigkeit.objekt_id)
|
||
.where(Zustaendigkeit.benutzer_id == benutzer_id, Zustaendigkeit.objekt_id.is_not(None))
|
||
)
|
||
stmt = select(Objekt).where(
|
||
or_(
|
||
Objekt.standort_id.in_(standort_ids_subq),
|
||
Objekt.id.in_(objekt_ids_subq),
|
||
)
|
||
)
|
||
result = await db.execute(stmt)
|
||
return list(result.scalars().all())
|