80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
import datetime
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from typing import Optional
|
|
import logging
|
|
import pydantic
|
|
|
|
from ..db_engine import db, DraftData, model_to_dict
|
|
from ..dependencies import oauth2_scheme, valid_token, LOG_DATA, PRIVATE_IN_SCHEMA
|
|
|
|
logging.basicConfig(
|
|
filename=LOG_DATA['filename'],
|
|
format=LOG_DATA['format'],
|
|
level=LOG_DATA['log_level']
|
|
)
|
|
|
|
router = APIRouter(
|
|
prefix='/api/v3/draftdata',
|
|
tags=['draftdata']
|
|
)
|
|
|
|
|
|
class DraftDataModel(pydantic.BaseModel):
|
|
currentpick: int
|
|
timer: bool
|
|
pick_deadline: datetime.datetime
|
|
result_channel_id = int
|
|
ping_channel_id = int
|
|
pick_minutes = int
|
|
|
|
|
|
@router.get('')
|
|
async def get_draftdata():
|
|
draft_data = DraftData.get_or_none()
|
|
|
|
if draft_data is not None:
|
|
r_data = model_to_dict(draft_data)
|
|
db.close()
|
|
return r_data
|
|
|
|
raise HTTPException(status_code=404, detail=f'No draft data found')
|
|
|
|
|
|
@router.patch('/{data_id}', include_in_schema=PRIVATE_IN_SCHEMA)
|
|
async def patch_draftdata(
|
|
data_id: int, currentpick: Optional[int] = None, timer: Optional[bool] = None,
|
|
pick_deadline: Optional[datetime.datetime] = None, result_channel: Optional[int] = None,
|
|
ping_channel: Optional[int] = None, pick_minutes: Optional[int] = None, token: str = Depends(oauth2_scheme)):
|
|
if not valid_token(token):
|
|
logging.warning(f'patch_draftdata - Bad Token: {token}')
|
|
raise HTTPException(status_code=401, detail='Unauthorized')
|
|
|
|
draft_data = DraftData.get_or_none(DraftData.id == data_id)
|
|
if draft_data is None:
|
|
db.close()
|
|
raise HTTPException(status_code=404, detail=f'No draft data found')
|
|
|
|
if currentpick is not None:
|
|
draft_data.currentpick = currentpick
|
|
if timer is not None:
|
|
draft_data.timer = timer
|
|
if pick_deadline is not None:
|
|
draft_data.pick_deadline = pick_deadline
|
|
if result_channel is not None:
|
|
draft_data.result_channel = result_channel
|
|
if ping_channel is not None:
|
|
draft_data.ping_channel = ping_channel
|
|
if pick_minutes is not None:
|
|
draft_data.pick_minutes = pick_minutes
|
|
|
|
saved = draft_data.save()
|
|
r_data = model_to_dict(draft_data)
|
|
db.close()
|
|
|
|
if saved == 1:
|
|
return r_data
|
|
else:
|
|
raise HTTPException(status_code=500, detail='Updating draft data failed')
|
|
|