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)}