61 lines
1.8 KiB
Python
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)}
|