193 lines
6.3 KiB
Python
193 lines
6.3 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, Response
|
|
from typing import Optional
|
|
import logging
|
|
import pydantic
|
|
from pandas import DataFrame
|
|
|
|
from ..db_engine import db, GameRewards, model_to_dict
|
|
from ..dependencies import oauth2_scheme, valid_token, LOG_DATA
|
|
|
|
logging.basicConfig(
|
|
filename=LOG_DATA['filename'],
|
|
format=LOG_DATA['format'],
|
|
level=LOG_DATA['log_level']
|
|
)
|
|
|
|
router = APIRouter(
|
|
prefix='/api/v2/gamerewards',
|
|
tags=['gamerewards']
|
|
)
|
|
|
|
|
|
class GameRewardModel(pydantic.BaseModel):
|
|
name: str
|
|
pack_type_id: Optional[int] = None
|
|
player_id: Optional[int] = None
|
|
money: Optional[int] = None
|
|
|
|
|
|
@router.get('')
|
|
async def v1_gamerewards_get(
|
|
name: Optional[str] = None, pack_type_id: Optional[int] = None, player_id: Optional[int] = None,
|
|
money: Optional[int] = None, csv: Optional[bool] = None):
|
|
all_rewards = GameRewards.select()
|
|
|
|
# if all_rewards.count() == 0:
|
|
# db.close()
|
|
# raise HTTPException(status_code=404, detail=f'There are no awards to filter')
|
|
|
|
if name is not None:
|
|
all_rewards = all_rewards.where(GameRewards.name == name)
|
|
if pack_type_id is not None:
|
|
all_rewards = all_rewards.where(GameRewards.pack_type_id == pack_type_id)
|
|
if player_id is not None:
|
|
all_rewards = all_rewards.where(GameRewards.player_id == player_id)
|
|
if money is not None:
|
|
all_rewards = all_rewards.where(GameRewards.money == money)
|
|
|
|
if csv:
|
|
data_list = [['id', 'pack_type_id', 'player_id', 'money']]
|
|
for line in all_rewards:
|
|
data_list.append([
|
|
line.id, line.pack_type_id if line.pack_type else None, line.player_id if line.player else None,
|
|
line.money
|
|
])
|
|
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
|
|
|
db.close()
|
|
return Response(content=return_val, media_type='text/csv')
|
|
|
|
else:
|
|
return_val = {'count': all_rewards.count(), 'gamerewards': []}
|
|
for x in all_rewards:
|
|
return_val['gamerewards'].append(model_to_dict(x))
|
|
|
|
db.close()
|
|
return return_val
|
|
|
|
|
|
@router.get('/{gameaward_id}')
|
|
async def v1_gamerewards_get_one(gamereward_id, csv: Optional[bool] = None):
|
|
try:
|
|
this_game_reward = GameRewards.get_by_id(gamereward_id)
|
|
except Exception:
|
|
db.close()
|
|
raise HTTPException(status_code=404, detail=f'No game reward found with id {gamereward_id}')
|
|
|
|
if csv:
|
|
data_list = [
|
|
['id', 'pack_type_id', 'player_id', 'money'],
|
|
[this_game_reward.id, this_game_reward.pack_type_id if this_game_reward.pack_type else None,
|
|
this_game_reward.player_id if this_game_reward.player else None, this_game_reward.money]
|
|
]
|
|
return_val = DataFrame(data_list).to_csv(header=False, index=False)
|
|
|
|
db.close()
|
|
return Response(content=return_val, media_type='text/csv')
|
|
|
|
else:
|
|
return_val = model_to_dict(this_game_reward)
|
|
db.close()
|
|
return return_val
|
|
|
|
|
|
@router.post('')
|
|
async def v1_gamerewards_post(game_reward: GameRewardModel, token: str = Depends(oauth2_scheme)):
|
|
if not valid_token(token):
|
|
logging.warning(f'Bad Token: {token}')
|
|
db.close()
|
|
raise HTTPException(
|
|
status_code=401,
|
|
detail='You are not authorized to post game rewards. This event has been logged.'
|
|
)
|
|
|
|
this_award = GameRewards(
|
|
name=game_reward.name,
|
|
pack_type_id=game_reward.pack_type_id,
|
|
player_id=game_reward.player_id,
|
|
money=game_reward.money
|
|
)
|
|
|
|
saved = this_award.save()
|
|
if saved == 1:
|
|
return_val = model_to_dict(this_award)
|
|
db.close()
|
|
return return_val
|
|
else:
|
|
db.close()
|
|
raise HTTPException(
|
|
status_code=418,
|
|
detail='Well slap my ass and call me a teapot; I could not save that roster'
|
|
)
|
|
|
|
|
|
@router.patch('/{game_reward_id}')
|
|
async def v1_gamerewards_patch(
|
|
game_reward_id: int, name: Optional[str] = None, pack_type_id: Optional[int] = None,
|
|
player_id: Optional[int] = None, money: Optional[int] = None, token: str = Depends(oauth2_scheme)):
|
|
if not valid_token(token):
|
|
logging.warning(f'Bad Token: {token}')
|
|
db.close()
|
|
raise HTTPException(
|
|
status_code=401,
|
|
detail='You are not authorized to patch gamerewards. This event has been logged.'
|
|
)
|
|
try:
|
|
this_game_reward = GameRewards.get_by_id(game_reward_id)
|
|
except Exception:
|
|
db.close()
|
|
raise HTTPException(status_code=404, detail=f'No game reward found with id {game_reward_id}')
|
|
|
|
if name is not None:
|
|
this_game_reward.name = name
|
|
if pack_type_id is not None:
|
|
if not pack_type_id:
|
|
this_game_reward.pack_type_id = None
|
|
else:
|
|
this_game_reward.pack_type_id = pack_type_id
|
|
if player_id is not None:
|
|
if not player_id:
|
|
this_game_reward.player_id = None
|
|
else:
|
|
this_game_reward.player_id = player_id
|
|
if money is not None:
|
|
if not money:
|
|
this_game_reward.money = None
|
|
else:
|
|
this_game_reward.money = money
|
|
|
|
if this_game_reward.save() == 1:
|
|
return_val = model_to_dict(this_game_reward)
|
|
db.close()
|
|
return return_val
|
|
else:
|
|
raise HTTPException(
|
|
status_code=418,
|
|
detail='Well slap my ass and call me a teapot; I could not save that rarity'
|
|
)
|
|
|
|
|
|
@router.delete('/{gamereward_id}')
|
|
async def v1_gamerewards_delete(gamereward_id, token: str = Depends(oauth2_scheme)):
|
|
if not valid_token(token):
|
|
logging.warning(f'Bad Token: {token}')
|
|
db.close()
|
|
raise HTTPException(
|
|
status_code=401,
|
|
detail='You are not authorized to delete awards. This event has been logged.'
|
|
)
|
|
try:
|
|
this_award = GameRewards.get_by_id(gamereward_id)
|
|
except Exception:
|
|
db.close()
|
|
raise HTTPException(status_code=404, detail=f'No award found with id {gamereward_id}')
|
|
|
|
count = this_award.delete_instance()
|
|
db.close()
|
|
|
|
if count == 1:
|
|
raise HTTPException(status_code=200, detail=f'Game Reward {gamereward_id} has been deleted')
|
|
else:
|
|
raise HTTPException(status_code=500, detail=f'Game Reward {gamereward_id} was not deleted')
|
|
|