FluxIP/app/accounts/router.py

61 lines
1.8 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Depends, Query, Response, status
from app.accounts.repository import AccountProvider
from app.accounts.schemas import AccountCreate, AccountUpdate
from app.accounts.service import AccountService
from app.auth.repository import SessionRecord
from app.dependencies import get_account_service, require_session
router = APIRouter(prefix="/api/v1/accounts", tags=["accounts"])
@router.get("")
def list_accounts(
provider: AccountProvider | None = Query(default=None),
_: SessionRecord = Depends(require_session),
service: AccountService = Depends(get_account_service),
) -> dict:
return {"data": service.list_accounts(provider)}
@router.post("", status_code=status.HTTP_201_CREATED)
def create_account(
payload: AccountCreate,
response: Response,
_: SessionRecord = Depends(require_session),
service: AccountService = Depends(get_account_service),
) -> dict:
account = service.create_account(payload)
response.headers["Location"] = f"/api/v1/accounts/{account['id']}"
return {"data": account}
@router.get("/{account_id}")
def get_account(
account_id: str,
_: SessionRecord = Depends(require_session),
service: AccountService = Depends(get_account_service),
) -> dict:
return {"data": service.get_account(account_id)}
@router.put("/{account_id}")
def update_account(
account_id: str,
payload: AccountUpdate,
_: SessionRecord = Depends(require_session),
service: AccountService = Depends(get_account_service),
) -> dict:
return {"data": service.update_account(account_id, payload)}
@router.delete("/{account_id}")
def archive_account(
account_id: str,
_: SessionRecord = Depends(require_session),
service: AccountService = Depends(get_account_service),
) -> dict:
return {"data": service.archive_account(account_id)}