Added /explore and /view

This commit is contained in:
Mawoka
2022-04-14 14:20:48 +02:00
parent d43795b35f
commit 5d4ace77a9
17 changed files with 3161 additions and 3854 deletions
+3 -2
View File
@@ -1,5 +1,6 @@
import uuid
from datetime import datetime
from typing import Optional
import ormar
from pydantic import BaseModel, Json
@@ -32,7 +33,7 @@ class UserSession(ormar.Model):
"""
id: uuid.UUID = ormar.UUID(primary_key=True, default=uuid.uuid4())
user: uuid.UUID = ormar.ForeignKey(User)
user: Optional[User] = ormar.ForeignKey(User)
session_key: str = ormar.String(unique=True, max_length=64)
created_at: datetime = ormar.DateTime(default=datetime.now())
ip_address: str = ormar.String(max_length=100, nullable=True)
@@ -71,7 +72,7 @@ class Quiz(ormar.Model):
description: str = ormar.String(max_length=300, nullable=True)
created_at: datetime = ormar.DateTime(default=datetime.now())
updated_at: datetime = ormar.DateTime(default=datetime.now())
user_id: uuid.UUID = ormar.UUID(foreign_key=User.id)
user_id: uuid.UUID = ormar.ForeignKey(User)
questions: Json[list[QuizQuestion]] = ormar.JSON(nullable=False)
class Meta:
+8 -2
View File
@@ -5,7 +5,7 @@ from datetime import datetime
from aiohttp import ClientSession
from classquiz.config import settings, storage
from classquiz.config import settings, storage, meilisearch
from classquiz.db.models import Quiz, QuizAnswer, QuizQuestion, User
from classquiz.kahoot_importer.get import get as get_quiz
@@ -88,7 +88,7 @@ async def import_quiz(quiz_id: str, user: User) -> Quiz | str:
)
quiz_data = Quiz(
id=quiz_id,
public=False,
public=True,
title=quiz.kahoot.title,
description=quiz.kahoot.description,
created_at=datetime.now(),
@@ -96,4 +96,10 @@ async def import_quiz(quiz_id: str, user: User) -> Quiz | str:
user_id=user.id,
questions=json.dumps(quiz_questions),
)
meilisearch.index(settings.meilisearch_index).add_documents([{
"id": str(quiz_data.id),
"title": quiz_data.title,
"description": quiz_data.description,
"user": (await User.objects.filter(id=quiz_data.user_id).first()).username,
}])
return await quiz_data.save()
+17 -2
View File
@@ -40,7 +40,7 @@ async def create_quiz_lol(quiz_input: QuizInput, user: User = Depends(get_curren
@router.get("/get/{quiz_id}")
async def get_quiz_from_id(quiz_id: str, user: User | None = Depends(get_current_user_optional)):
async def get_quiz_from_id(quiz_id: str, user: User | None = Depends(get_current_user)):
try:
quiz_id = uuid.UUID(quiz_id)
except ValueError:
@@ -59,6 +59,19 @@ async def get_quiz_from_id(quiz_id: str, user: User | None = Depends(get_current
return quiz
@router.get("/get/public/{quiz_id}", response_model=Quiz)
async def get_public_quiz(quiz_id: str):
try:
quiz_id = uuid.UUID(quiz_id)
except ValueError:
raise HTTPException(status_code=400, detail="badly formed quiz id")
quiz = await Quiz.objects.get_or_none(id=quiz_id, public=True)
if quiz is None:
return JSONResponse(status_code=404, content={"detail": "quiz not found"})
else:
return quiz
@router.post("/start/{quiz_id}")
async def start_quiz(quiz_id: str, user: User = Depends(get_current_user)):
try:
@@ -67,7 +80,9 @@ async def start_quiz(quiz_id: str, user: User = Depends(get_current_user)):
raise HTTPException(status_code=400, detail="badly formed quiz id")
quiz = await Quiz.objects.get_or_none(id=quiz_id, user_id=user.id)
if quiz is None:
return JSONResponse(status_code=404, content={"detail": "quiz not found"})
quiz = await Quiz.objects.get_or_none(id=quiz_id, public=True)
if quiz is None:
return JSONResponse(status_code=404, content={"detail": "quiz not found"})
else:
game_pin = randint(10000000, 99999999)
game = PlayGame(