64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
from http.client import HTTPException
|
|
|
|
from fastapi import APIRouter
|
|
|
|
from src.errors import Response
|
|
from src.types.achievements import AchievementGroups, Achievement
|
|
from src.utils import parse_query_langs, load_index, load_category, parse_result_lang
|
|
|
|
achievements = APIRouter(prefix='/achievements', tags=['Achievements'])
|
|
|
|
|
|
@achievements.get('/')
|
|
async def get_achievements(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, 'achievements')
|
|
response.append({query_lang: list(chars[query_field].keys())})
|
|
return Response(error=False, response=response)
|
|
|
|
|
|
@achievements.get('/{name}')
|
|
async def get_achievement_group(name: str, query_languages: str = 'eng', result_language: str = 'ru') -> Response[Achievement]:
|
|
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, 'achievements')['names']
|
|
for key, value in index.items():
|
|
if key.lower().startswith(name.lower()):
|
|
filename = value
|
|
break
|
|
else:
|
|
raise HTTPException(404)
|
|
return Response[Achievement](response=load_category(result_lang, 'achievements', filename))
|
|
|
|
|
|
@achievements.get('/groups')
|
|
async def get_achievement_groups(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, 'achievementgroups')
|
|
response.append({query_lang: list(chars[query_field].keys())})
|
|
return Response(error=False, response=response)
|
|
|
|
|
|
@achievements.get('/groups/{name}')
|
|
async def get_achievement_group(name: str, query_languages: str = 'eng', result_language: str = 'ru') -> Response[AchievementGroups]:
|
|
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, 'achievementgroups')['names']
|
|
for key, value in index.items():
|
|
if key.lower().startswith(query.lower()):
|
|
filename = value
|
|
break
|
|
else:
|
|
raise HTTPException(404)
|
|
return Response[AchievementGroups](response=load_category(result_lang, 'achievementgroups', filename))
|