from typing import List from fastapi import APIRouter from starlette.exceptions import HTTPException from starlette.requests import Request from models.Asset import Asset from models.Character import Character from repos.dao import DAO router = APIRouter(prefix="/api/characters", tags=["Characters"]) @router.get("/", response_model=List[Character]) async def get_characters(request: Request) -> List[Character]: dao: DAO = request.app.state.dao characters = await dao.chars.get_all_characters() return characters @router.get("/{character_id}/assets", response_model=List[Asset]) async def get_character_assets(character_id: str, request: Request) -> List[Asset]: dao: DAO = request.app.state.dao character = await dao.chars.get_character(character_id) if character is None: raise HTTPException(status_code=404, detail="Character not found") return await dao.assets.get_assets_by_char_id(character_id) @router.get("/{character_id}", response_model=Character) async def get_character_by_id(character_id: str, request: Request) -> Character: dao: DAO = request.app.state.dao character = await dao.chars.get_character(character_id) return character