feat: Kontenreihenfolge selbst bestimmen
Die Liste stand in der Anlegereihenfolge, die selten die gewuenschte ist.
Neuer Endpunkt PUT /accounts/order nimmt die IDs in der gewuenschten Folge
und schreibt die Position; er muss vor /{account_id} stehen, sonst faengt
die ID-Route den Pfad ab. Fremde IDs werden abgewiesen.
In der Kontenliste zwei Pfeile je Zeile, optimistisch sortiert, damit die
Liste beim Klicken nicht springt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,13 +2,13 @@
|
||||
|
||||
from datetime import date
|
||||
|
||||
from fastapi import APIRouter, Depends, status
|
||||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from ..database import get_db
|
||||
from ..deps import get_current_user, get_owned
|
||||
from ..models import Account, AccountIdentifier, IdentifierKind, Transaction, TxnType, User
|
||||
from ..schemas import AccountCreate, AccountIdentifierOut, AccountOut, AccountUpdate
|
||||
from ..schemas import AccountCreate, AccountIdentifierOut, AccountOrder, AccountOut, AccountUpdate
|
||||
from ..services import balances, currency
|
||||
from ..services.csv_import import normalize_text
|
||||
from .settings import BASE_CURRENCY_KEY, get_user_setting
|
||||
@@ -146,6 +146,23 @@ def update_account(
|
||||
return to_out(db, acc, base_currency(db, user), date.today())
|
||||
|
||||
|
||||
@router.put("/order", status_code=status.HTTP_204_NO_CONTENT)
|
||||
def set_account_order(
|
||||
payload: AccountOrder, db: Session = Depends(get_db), user: User = Depends(get_current_user)
|
||||
):
|
||||
"""Reihenfolge der Konten setzen (Liste der IDs in der gewünschten Folge).
|
||||
|
||||
Muss vor ``/{account_id}`` stehen, sonst fängt die ID-Route den Pfad ab.
|
||||
"""
|
||||
konten = {a.id: a for a in db.query(Account).filter(Account.owner_id == user.id)}
|
||||
fremd = [i for i in payload.ids if i not in konten]
|
||||
if fremd:
|
||||
raise HTTPException(status_code=404, detail=f"Unbekanntes Konto: {fremd[0]}")
|
||||
for platz, konto_id in enumerate(payload.ids):
|
||||
konten[konto_id].position = platz
|
||||
db.commit()
|
||||
|
||||
|
||||
def _entkoppele_uebertraege(db: Session, acc: Account) -> None:
|
||||
"""Überträge lösen, bevor das Konto verschwindet.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user