major-domo-database/app/routers_v3/draftdata.py
2024-07-14 13:23:37 -05:00

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')