diff --git a/src/allmende_payment_system/api/admin.py b/src/allmende_payment_system/api/admin.py index b26d081..10b812f 100644 --- a/src/allmende_payment_system/api/admin.py +++ b/src/allmende_payment_system/api/admin.py @@ -1,4 +1,3 @@ -from decimal import Decimal from typing import Annotated from fastapi import APIRouter, File, Form, HTTPException, Request @@ -8,7 +7,14 @@ from starlette.responses import RedirectResponse from allmende_payment_system import types from allmende_payment_system.api.dependencies import SessionDep, UserDep -from allmende_payment_system.models import Area, Permission, Product, User, UserGroup +from allmende_payment_system.models import ( + Account, + Area, + Permission, + Product, + User, + UserGroup, +) from allmende_payment_system.tools import get_jinja_renderer admin_router = APIRouter(prefix="/admin") @@ -276,3 +282,22 @@ async def new_product_post( return RedirectResponse( url="/admin/products", status_code=status.HTTP_303_SEE_OTHER ) + + +@admin_router.get("/accounts") +async def get_accounts( + request: Request, + session: SessionDep, + user: UserDep, +): + if not user.has_permission("account", "edit"): + raise HTTPException(status_code=403, detail="Insufficient permissions") + + templates = get_jinja_renderer() + + accounts = session.scalars(select(Account)).all() + + return templates.TemplateResponse( + "accounts.html.jinja", + context={"request": request, "accounts": accounts}, + ) diff --git a/src/allmende_payment_system/api/dependencies.py b/src/allmende_payment_system/api/dependencies.py index a2de773..6dac5ee 100644 --- a/src/allmende_payment_system/api/dependencies.py +++ b/src/allmende_payment_system/api/dependencies.py @@ -30,7 +30,10 @@ async def get_user(request: Request) -> dict: if "ynh_user" not in request.headers: raise HTTPException(status_code=401, detail="Missing ynh_user header") - return {"username": request.headers["ynh_user"], "display_name": request.headers["ynh_user_fullname"]} + return { + "username": request.headers["ynh_user"], + "display_name": request.headers["ynh_user_fullname"], + } async def get_user_object(request: Request, session: SessionDep) -> User: diff --git a/src/allmende_payment_system/templates/accounts.html.jinja b/src/allmende_payment_system/templates/accounts.html.jinja new file mode 100644 index 0000000..e5977b7 --- /dev/null +++ b/src/allmende_payment_system/templates/accounts.html.jinja @@ -0,0 +1,35 @@ +{% extends "base.html.jinja" %} +{% block content %} +
| Name | +Nutzer | +Kontostand | ++ |
|---|---|---|---|
| {{ account.name }} | +{{ account.users | map(attribute='display_name') | join(", ") }} | +{{ account.balance | format_number }} € | +actions | +