feat: PATCH-Endpunkte fuer Szenario-Modifikatoren und -Einmalzahlungen

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-20 12:43:01 +02:00
parent 1708abeb91
commit 4843f2e130
2 changed files with 78 additions and 0 deletions

View File

@@ -181,6 +181,21 @@ def delete_modifier(scenario_id: int, mod_id: int,
session.commit()
@router.patch("/{scenario_id}/modifiers/{mod_id}", response_model=ModifierOut)
def patch_modifier(scenario_id: int, mod_id: int, data: ModifierIn,
session: Session = Depends(get_session)):
# Full-Body-Update: das Edit-Formular sendet immer alle Felder des Typs.
_get_scenario(session, scenario_id)
modifier = session.get(ScenarioModifier, mod_id)
if modifier is None or modifier.scenario_id != scenario_id:
raise HTTPException(404, "Modifikator nicht gefunden")
for key, value in data.model_dump().items():
setattr(modifier, key, value)
session.commit()
session.refresh(modifier)
return ModifierOut.model_validate(modifier)
class ScenarioPlannedIn(BaseModel):
name: str
amount: Decimal
@@ -225,6 +240,21 @@ def delete_scenario_planned(scenario_id: int, item_id: int,
session.commit()
@router.patch("/{scenario_id}/planned/{item_id}", response_model=ScenarioPlannedOut)
def patch_scenario_planned(scenario_id: int, item_id: int, data: ScenarioPlannedIn,
session: Session = Depends(get_session)):
# Full-Body-Update, Muster patch_modifier.
_get_scenario(session, scenario_id)
item = session.get(ScenarioPlannedItem, item_id)
if item is None or item.scenario_id != scenario_id:
raise HTTPException(404, "Einmalzahlung nicht gefunden")
for key, value in data.model_dump().items():
setattr(item, key, value)
session.commit()
session.refresh(item)
return ScenarioPlannedOut.model_validate(item)
@router.post("/{scenario_id}/project", response_model=ProjectionOut)
def project_scenario(scenario_id: int, horizon_days: int | None = None,
start_date: date | None = None,