✨ Added /explore and /view
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user