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
@@ -10,9 +10,10 @@ import uuid
from datetime import datetime
from fastapi import APIRouter, HTTPException
from fastapi.responses import PlainTextResponse
from pydantic import BaseModel
from classquiz.config import redis
from classquiz.db.models import PlayGame, Controllers
from classquiz.db.models import PlayGame, Controller
from classquiz.routers.box_controller.embedded.socket import router as socket_router
router = APIRouter()
@@ -31,7 +32,7 @@ class JoinGameResponse(BaseModel):
@router.post("/join")
async def join_game(data: JoinGameInput) -> JoinGameResponse:
controller = await Controllers.objects.get_or_none(id=data.id, secret_key=data.secret_key)
controller = await Controller.objects.get_or_none(id=data.id, secret_key=data.secret_key)
game_pin = await redis.get(f"game:cqc:code:{data.code}")
if game_pin is None:
raise HTTPException(status_code=404, detail="Game not found")
@@ -65,7 +66,7 @@ async def register_with_code(data: RegisterWithCodeInput) -> RegisterWithCodeRes
raise HTTPException(status_code=404, detail="Code not found")
await redis.delete(f"controller_setup:{data.code}")
c_id = uuid.UUID(c_id)
controller = await Controllers.objects.get(id=c_id)
controller = await Controller.objects.get(id=c_id)
controller.first_seen = datetime.now()
controller.last_seen = datetime.now()
await controller.update()
@@ -74,9 +75,19 @@ async def register_with_code(data: RegisterWithCodeInput) -> RegisterWithCodeRes
@router.get("/ping")
async def ping_server(id: uuid.UUID, secret_key: str, version: str):
controller = await Controllers.objects.get_or_none(id=id, secret_key=secret_key)
controller = await Controller.objects.get_or_none(id=id, secret_key=secret_key)
if controller is None:
raise HTTPException(status_code=404, detail="Key and/or id invalid")
controller.last_seen = datetime.now()
controller.os_version = version
await controller.update()
@router.get("/update")
async def get_firmware_version(id: uuid.UUID, secret_key: str) -> PlainTextResponse:
controller = await Controller.objects.get_or_none(id=id, secret_key=secret_key)
if controller is None:
return PlainTextResponse(status_code=404, content="Key and/or id invalid")
if controller.wanted_os_version is None:
return PlainTextResponse(status_code=400, content="No update needed")
return PlainTextResponse(status_code=200, content=controller.wanted_os_version)