gidb-server/src/routes/tcg.py

203 lines
9.5 KiB
Python

from fastapi import APIRouter
from src.errors import Response
from src.types.tcg import ActionCard, CardBack, CardBox, CharacterCard, DetailedRule, EnemyCard, Keyword, LevelReward, \
StatusEffect, Summon
from src.utils import get_file_name, parse_result_lang, parse_query_langs, load_category, load_index
tcg = APIRouter(prefix='/tcg', tags=['TCG'])
@tcg.get('/action_cards')
async def get_action_cards(query_field: str = 'names', result_language: str = 'eng') -> Response:
query_langs = parse_query_langs(result_language)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'tcgactioncards')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@tcg.get('/action_cards/{query}', response_model_exclude_none=True)
async def get_action_card(query: str, query_languages: str = 'eng', result_language: str = 'ru') -> Response[ActionCard]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(query, 'tcgactioncards', query_langs)
return Response[ActionCard](response=load_category(result_lang, 'tcgactioncards', filename))
@tcg.get('/card_backs')
async def get_card_backs(query_field: str = 'names', result_language: str = 'eng') -> Response:
query_langs = parse_query_langs(result_language)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'tcgcardbacks')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@tcg.get('/card_back/{query}', response_model_exclude_none=True)
async def get_card_back(query: str, query_languages: str = 'eng', result_language: str = 'ru') -> Response[CardBack]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(query, 'tcgcardbacks', query_langs)
return Response[CardBack](response=load_category(result_lang, 'tcgcardbacks', filename))
@tcg.get('/card_boxes')
async def get_card_boxes(query_field: str = 'names', result_language: str = 'eng') -> Response:
query_langs = parse_query_langs(result_language)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'tcgcardboxes')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@tcg.get('/card_boxes/{query}', response_model_exclude_none=True)
async def get_card_box(query: str, query_languages: str = 'eng', result_language: str = 'ru') -> Response[CardBox]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(query, 'tcgcardboxes', query_langs)
return Response[CardBox](response=load_category(result_lang, 'tcgcardboxes', filename))
@tcg.get('/character_cards')
async def get_character_cards(query_field: str = 'names', result_language: str = 'eng') -> Response:
query_langs = parse_query_langs(result_language)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'tcgcharactercards')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@tcg.get('/character_cards/{query}', response_model_exclude_none=True)
async def get_character_card(
query: str, query_languages: str = 'eng', result_language: str = 'ru'
) -> Response[CharacterCard]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(query, 'tcgcharactercards', query_langs)
return Response[CharacterCard](response=load_category(result_lang, 'tcgcharactercards', filename))
@tcg.get('/enemy_cards')
async def get_enemy_cards(query_field: str = 'names', result_language: str = 'eng') -> Response:
query_langs = parse_query_langs(result_language)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'tcgenemycards')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@tcg.get('/enemy_cards/{query}', response_model_exclude_none=True)
async def get_enemy_card(
query: str, query_languages: str = 'eng', result_language: str = 'ru'
) -> Response[EnemyCard]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(query, 'tcgenemycards', query_langs)
return Response[EnemyCard](response=load_category(result_lang, 'tcgenemycards', filename))
@tcg.get('/detailed_rules')
async def get_detailed_rules(query_field: str = 'names', result_language: str = 'eng') -> Response:
query_langs = parse_query_langs(result_language)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'tcgdetailedrules')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@tcg.get('/detailed_rules/{query}', response_model_exclude_none=True)
async def get_detailed_rule(
query: str, query_languages: str = 'eng', result_language: str = 'ru'
) -> Response[DetailedRule]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(query, 'tcgdetailedrules', query_langs)
return Response[DetailedRule](response=load_category(result_lang, 'tcgdetailedrules', filename))
@tcg.get('/keywords')
async def get_keywords(query_field: str = 'names', result_language: str = 'eng') -> Response:
query_langs = parse_query_langs(result_language)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'tcgkeywords')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@tcg.get('/keywords/{query}', response_model_exclude_none=True)
async def get_keyword(
query: str, query_languages: str = 'eng', result_language: str = 'ru'
) -> Response[Keyword]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(query, 'tcgkeywords', query_langs)
return Response[Keyword](response=load_category(result_lang, 'tcgkeywords', filename))
@tcg.get('/level_rewards')
async def get_level_rewards(query_field: str = 'names', result_language: str = 'eng') -> Response:
query_langs = parse_query_langs(result_language)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'tcglevelrewards')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@tcg.get('/level_rewards/{query}', response_model_exclude_none=True)
async def get_level_reward(
query: str, query_languages: str = 'eng', result_language: str = 'ru'
) -> Response[LevelReward]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(query, 'tcglevelrewards', query_langs)
return Response[LevelReward](response=load_category(result_lang, 'tcglevelrewards', filename))
@tcg.get('/status_effects')
async def get_status_effects(query_field: str = 'names', result_language: str = 'eng') -> Response:
query_langs = parse_query_langs(result_language)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'tcgstatuseffects')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@tcg.get('/status_effects/{query}', response_model_exclude_none=True)
async def get_status_effect(
query: str, query_languages: str = 'eng', result_language: str = 'ru'
) -> Response[StatusEffect]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(query, 'tcgstatuseffects', query_langs)
return Response[StatusEffect](response=load_category(result_lang, 'tcgstatuseffects', filename))
@tcg.get('/summons')
async def get_summons(query_field: str = 'names', result_language: str = 'eng') -> Response:
query_langs = parse_query_langs(result_language)
response: list[dict[str, list[str]]] = []
for query_lang in query_langs:
chars = load_index(query_lang, 'tcgsummons')
response.append({query_lang: list(chars[query_field].keys())})
return Response[list[dict[str, list[str]]]](error=False, response=response)
@tcg.get('/summons/{query}', response_model_exclude_none=True)
async def get_summon(
query: str, query_languages: str = 'eng', result_language: str = 'ru'
) -> Response[Summon]:
query_langs = parse_query_langs(query_languages)
result_lang = parse_result_lang(result_language)
filename = get_file_name(query, 'tcgsummons', query_langs)
return Response[Summon](response=load_category(result_lang, 'tcgsummons', filename))