Improved ClassQuizController

This commit is contained in:
Mawoka
2023-06-30 01:05:13 +02:00
parent 9d685e25df
commit 4a3339b9b8
12 changed files with 316 additions and 37 deletions
+20 -6
View File
@@ -8,7 +8,7 @@ from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from classquiz.auth import get_current_user
from classquiz.db.models import User, Controllers
from classquiz.db.models import User, Controller
from classquiz.config import redis
from classquiz.helpers.box_controller import generate_code
@@ -32,7 +32,7 @@ async def set_controller_up(
code = generate_code(10)
if input_data.player_name is None:
input_data.player_name = user.username
data = Controllers(
data = Controller(
id=uuid.uuid4(),
user=user,
secret_key=os.urandom(12).hex(),
@@ -47,12 +47,12 @@ async def set_controller_up(
return SetControllerUpResponse(code=code, id=data.id)
GetControllerResponse = Controllers.get_pydantic(exclude={"secret_key", "user"})
GetControllerResponse = Controller.get_pydantic(exclude={"secret_key", "user"})
@router.get("/controller")
async def get_controller(id: uuid.UUID, user: User = Depends(get_current_user)) -> GetControllerResponse:
controller = await Controllers.objects.get_or_none(id=id, user=user.id)
controller = await Controller.objects.get_or_none(id=id, user=user.id)
if controller is None:
raise HTTPException(status_code=404, detail="Controller not found")
return GetControllerResponse(**controller.dict())
@@ -68,7 +68,7 @@ class ModifyControllerInput(BaseModel):
async def modify_controller(
data: ModifyControllerInput, user: User = Depends(get_current_user)
) -> GetControllerResponse:
controller = await Controllers.objects.get_or_none(id=data.id, user=user.id)
controller = await Controller.objects.get_or_none(id=data.id, user=user.id)
if controller is None:
raise HTTPException(status_code=404, detail="Controller not found")
controller.player_name = data.player_name
@@ -79,10 +79,24 @@ async def modify_controller(
@router.get("/list")
async def get_all_controllers(user: User = Depends(get_current_user)) -> list[GetControllerResponse]:
controllers = await Controllers.objects.all(user=user.id)
controllers = await Controller.objects.all(user=user.id)
if len(controllers) == 0:
return []
return_list = []
for controller in controllers:
return_list.append(GetControllerResponse(**controller.dict()))
return return_list
class SetVersionToBeFlashedInput(BaseModel):
id: uuid.UUID
version: str
@router.post("/set_update")
async def set_version_to_be_flashed(data: SetVersionToBeFlashedInput, user: User = Depends(get_current_user)):
controller = await Controller.objects.get_or_none(id=data.id, user=user.id)
if controller is None:
raise HTTPException(status_code=404, detail="Controller not found")
controller.wanted_os_version = data.version
await controller.update()