+ api
This commit is contained in:
0
api/endpoints/__init__.py
Normal file
0
api/endpoints/__init__.py
Normal file
29
api/endpoints/assets.py
Normal file
29
api/endpoints/assets.py
Normal file
@@ -0,0 +1,29 @@
|
||||
from fastapi import APIRouter
|
||||
from fastapi.openapi.models import MediaType
|
||||
from starlette.exceptions import HTTPException
|
||||
from starlette.requests import Request
|
||||
from starlette.responses import Response, JSONResponse
|
||||
|
||||
from repos.dao import DAO
|
||||
|
||||
router = APIRouter(prefix="/api/assets", tags=["Assets"])
|
||||
|
||||
@router.get("/{asset_id}")
|
||||
async def get_asset(asset_id: str, request: Request) -> Response:
|
||||
dao = request.app.state.dao
|
||||
asset = await dao.assets.get_asset(asset_id)
|
||||
# 2. Проверка на существование
|
||||
if not asset:
|
||||
raise HTTPException(status_code=404, detail="Asset not found")
|
||||
return Response(content=asset.data, media_type="image/png")
|
||||
|
||||
|
||||
@router.get("")
|
||||
async def get_assets(request: Request) -> JSONResponse:
|
||||
dao: DAO = request.app.state.dao
|
||||
assets = await dao.assets.get_assets()
|
||||
assets_links = []
|
||||
for asset in assets:
|
||||
assets_links.append("/api/assets/{}".format(asset.id))
|
||||
return JSONResponse(content=assets_links)
|
||||
|
||||
35
api/endpoints/character_router.py
Normal file
35
api/endpoints/character_router.py
Normal file
@@ -0,0 +1,35 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user