diff --git a/app/routers/ballot.py b/app/routers/ballot.py index e69de29..c2cfff3 100644 --- a/app/routers/ballot.py +++ b/app/routers/ballot.py @@ -0,0 +1,38 @@ +from fastapi_paseto_auth import AuthPASETO +from fastapi import APIRouter, Request, Response, Depends, status, HTTPException +from app.dependencies import load_config +from app.models.BallotModel import BallotModel +import app.models.GeneralErrors as GeneralErrors +import app.models.ResponseModels as ResponseModels +import app.controllers.Ballot as Ballot + +router = APIRouter() + +ballot_controller = Ballot.Ballot() + +config: dict = load_config() + +@router.post('/ballot', response_model=ResponseModels.BallotCastedResponse, + tags=['Ballot'], status_code=status.HTTP_201_CREATED) +async def cast_ballot(request: Request, response: Response, + ballot: BallotModel, + Authorize: AuthPASETO = Depends()) -> dict: + """Casts a ballot. + + Returns: + json: ballot casted + """ + Authorize.paseto_required() + + discord_hashed_id: str = Authorize.get_paseto_claims()['discord_hashed_id'] + + stored: bool = await ballot_controller.store(discord_hashed_id, ballot.vote) + + if stored: + return {"created": stored} + else: + raise HTTPException(status_code=500, detail={ + "error": GeneralErrors.InternalServerError().error, + "message": GeneralErrors.InternalServerError().message + } + )