Add authenticated finance REST API

This commit is contained in:
kai
2026-09-09 09:47:56 +02:00
parent afc6f74f36
commit ad452045be
13 changed files with 760 additions and 44 deletions
+4 -9
View File
@@ -3,9 +3,9 @@ from decimal import Decimal
from typing import Annotated
from fastapi import APIRouter, Form, HTTPException, Query, Request
from fastapi.responses import RedirectResponse
from database import connect, ensure_asset
from services.asset_service import create_asset as create_asset_record
from models import CATEGORIES
from services.income_service import assets, available_years, get_entry, list_entries, save_entry
from services.income_service import assets, available_years, get_entry, list_entries, save_entry, delete_entry
from views import render
router = APIRouter()
@@ -68,11 +68,7 @@ def save(request: Request, date: Annotated[str, Form()] = '', asset_id: Annotate
@router.post('/income/{entry_id}/delete')
def delete(entry_id: int):
if not 1 <= entry_id <= 9223372036854775807:
raise HTTPException(404, 'Zahlung nicht gefunden.')
with connect() as db:
if db.execute('DELETE FROM income_entries WHERE id = ?', (entry_id,)).rowcount == 0:
raise HTTPException(404, 'Zahlung nicht gefunden.')
delete_entry(entry_id)
return RedirectResponse('/?message=deleted', status_code=303)
@@ -84,8 +80,7 @@ def new_asset(request: Request):
@router.post('/assets/new')
def create_asset(request: Request, name: Annotated[str, Form()], asset_type: Annotated[str, Form()], ticker: Annotated[str, Form()] = ''):
try:
with connect() as db:
asset_id = ensure_asset(db, name, asset_type, ticker)
asset_id = create_asset_record(name, asset_type, ticker, reuse=True)['id']
except ValueError as error:
return render(request, 'asset_form.html', {'data': dict(name=name, asset_type=asset_type, ticker=ticker), 'error': str(error)}, 422)
return RedirectResponse(f'/income/new?asset_id={asset_id}', status_code=303)