gidb-server/src/routes/adventureranks.py

35 lines
1.4 KiB
Python

from fastapi import APIRouter, HTTPException
from src.errors import Response
from src.types.adventureranks import AdventureRank
from src.utils import parse_query_langs, load_index, parse_result_lang, load_category
adventure_ranks = APIRouter(prefix='/adventure_ranks', tags=['Adventure Ranks'])
@adventure_ranks.get('/')
async def query_characters(query_field: str = 'names', query_languages: str = 'eng') -> Response:
query_langs = parse_query_langs(query_languages)
response = []
for query_lang in query_langs:
chars = load_index(query_lang, 'adventureranks')
response.append({query_lang: list(chars[query_field].keys())})
return Response(error=False, response=response)
@adventure_ranks.get('/{query}')
async def query_character(query: str, query_languages: str = 'eng', result_language: str = 'ru') -> Response[AdventureRank]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = ''
for lang in query_langs:
index: dict[str, str] = load_index(lang, 'adventureranks')['names']
for key, value in index.items():
if key.lower().startswith(query):
filename = value
break
else:
raise HTTPException(404)
return Response[AdventureRank](response=load_category(result_lang, 'adventureranks', filename))