✨ Added Moderation ratings
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# SPDX-FileCopyrightText: 2023 Marlon W (Mawoka)
|
||||
#
|
||||
# SPDX-License-Identifier: MPL-2.0
|
||||
import uuid
|
||||
|
||||
from fastapi import APIRouter, Depends, Response, HTTPException
|
||||
from pydantic import BaseModel
|
||||
|
||||
from classquiz.auth import get_current_moderator
|
||||
from classquiz.db.models import User, Quiz
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/status")
|
||||
async def get_mod_status(resp: Response, user: User = Depends(get_current_moderator)):
|
||||
resp.status_code = 200
|
||||
resp.set_cookie("moderator", "yes", path="/")
|
||||
resp.headers.update({"Content-Type": "application/json"})
|
||||
resp.body = '{"status": "ok"}'
|
||||
return resp
|
||||
|
||||
|
||||
@router.get("/quizzes")
|
||||
async def get_newest_quizzes(
|
||||
page: int = 1, all: bool = False, user: User = Depends(get_current_moderator)
|
||||
) -> list[Quiz]:
|
||||
if page < 1:
|
||||
raise HTTPException(status_code=400, detail="page 1 is the first")
|
||||
if all:
|
||||
quizzes = (
|
||||
await Quiz.objects.paginate(page=page)
|
||||
.order_by(Quiz.updated_at.desc())
|
||||
.filter(Quiz.public == True) # noqa: E712
|
||||
.all()
|
||||
)
|
||||
else:
|
||||
# noinspection PyComparisonWithNone
|
||||
quizzes = (
|
||||
await Quiz.objects.paginate(page=page)
|
||||
.order_by(Quiz.updated_at.desc())
|
||||
.filter(Quiz.public == True) # noqa: E712
|
||||
.filter(Quiz.mod_rating == None) # noqa: E711
|
||||
.all()
|
||||
)
|
||||
return quizzes
|
||||
|
||||
|
||||
class SetModRatingForQuizInput(BaseModel):
|
||||
rating: int | None
|
||||
|
||||
|
||||
@router.post("/rating/set/{quiz_id}")
|
||||
async def set_mod_rating_for_quiz(
|
||||
data: SetModRatingForQuizInput, quiz_id: uuid.UUID, user: User = Depends(get_current_moderator)
|
||||
) -> Quiz:
|
||||
quiz = await Quiz.objects.get_or_none(public=True, id=quiz_id)
|
||||
if quiz is None:
|
||||
raise HTTPException(status_code=404, detail="Quiz not found")
|
||||
quiz.mod_rating = data.rating
|
||||
return await quiz.update()
|
||||
Reference in New Issue
Block a user