first ruggedy draft

This commit is contained in:
2026-06-28 13:48:15 +02:00
parent c916f64fcb
commit 1053f6a2a3
78 changed files with 20905 additions and 2 deletions

View File

@@ -0,0 +1,84 @@
from __future__ import annotations
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from ..db import get_session
from ..schemas import (
ReconciliationAcceptResponse,
ReconciliationDecisionRead,
ReconciliationIgnoreRequest,
ReconciliationIgnoreResponse,
ReconciliationSuggestionRead,
)
from ..services.reconciliation import (
accept_reconciliation_suggestion,
ignore_reconciliation_suggestion,
list_reconciliation_decisions,
list_reconciliation_suggestions,
)
router = APIRouter(tags=["reconciliation"])
@router.get("/reconciliation/suggestions", response_model=list[ReconciliationSuggestionRead])
def get_reconciliation_suggestions(
household_id: str,
limit: int = 50,
session: Session = Depends(get_session),
) -> list[object]:
return list_reconciliation_suggestions(session, household_id=household_id, limit=limit)
@router.post(
"/reconciliation/suggestions/{suggestion_id}/accept",
response_model=ReconciliationAcceptResponse,
)
def accept_suggestion(
suggestion_id: str,
household_id: str,
session: Session = Depends(get_session),
) -> ReconciliationAcceptResponse:
try:
suggestion = accept_reconciliation_suggestion(
session,
household_id=household_id,
suggestion_id=suggestion_id,
)
except LookupError as exc:
raise HTTPException(status_code=404, detail=str(exc)) from exc
session.commit()
return ReconciliationAcceptResponse(accepted=suggestion)
@router.post(
"/reconciliation/suggestions/{suggestion_id}/ignore",
response_model=ReconciliationIgnoreResponse,
)
def ignore_suggestion(
suggestion_id: str,
household_id: str,
payload: ReconciliationIgnoreRequest | None = None,
session: Session = Depends(get_session),
) -> ReconciliationIgnoreResponse:
try:
suggestion, decision = ignore_reconciliation_suggestion(
session,
household_id=household_id,
suggestion_id=suggestion_id,
actor_user_id=payload.actor_user_id if payload else None,
reason=payload.reason if payload else None,
)
except LookupError as exc:
raise HTTPException(status_code=404, detail=str(exc)) from exc
session.commit()
session.refresh(decision)
return ReconciliationIgnoreResponse(ignored=suggestion, decision=decision)
@router.get("/reconciliation/decisions", response_model=list[ReconciliationDecisionRead])
def get_reconciliation_decisions(
household_id: str,
session: Session = Depends(get_session),
) -> list[object]:
return list_reconciliation_decisions(session, household_id=household_id)