36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
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: int, request: Request) -> Character:
|
|
dao: DAO = request.app.state.dao
|
|
character = await dao.chars.get_character_by_id(character_id)
|
|
return character
|
|
|