From 3cdcea8fd491c096331fdb2083f0fb6b4001cf87 Mon Sep 17 00:00:00 2001 From: Mawoka Date: Sun, 6 Mar 2022 11:23:16 +0100 Subject: [PATCH] :sparkles: Added quiz-edit --- classquiz/db/models.py | 2 +- classquiz/routers/quiz.py | 24 +++- frontend/src/lib/editor.svelte | 91 +++++++++++++++ frontend/src/routes/edit.svelte | 165 ++++++++++++++++++++++++++++ frontend/src/routes/overview.svelte | 2 +- 5 files changed, 280 insertions(+), 4 deletions(-) create mode 100644 frontend/src/lib/editor.svelte create mode 100644 frontend/src/routes/edit.svelte diff --git a/classquiz/db/models.py b/classquiz/db/models.py index 7d4787a..f3bd3a4 100644 --- a/classquiz/db/models.py +++ b/classquiz/db/models.py @@ -61,7 +61,7 @@ class QuizInput(BaseModel): class Quiz(ormar.Model): - id: uuid.UUID = ormar.UUID(primary_key=True, default=uuid.uuid4()) + id: uuid.UUID = ormar.UUID(primary_key=True, default=uuid.uuid4(), nullable=False, unique=True) public: bool = ormar.Boolean(default=False) title: str = ormar.String(max_length=100) description: str = ormar.String(max_length=300, nullable=True) diff --git a/classquiz/routers/quiz.py b/classquiz/routers/quiz.py index 54d8169..53bafcd 100644 --- a/classquiz/routers/quiz.py +++ b/classquiz/routers/quiz.py @@ -1,10 +1,10 @@ import json import os +from datetime import datetime from fastapi import APIRouter, Depends, HTTPException from fastapi.responses import JSONResponse from classquiz.config import redis -import pydantic from classquiz.auth import get_current_user, get_current_user_optional from classquiz.db.models import Quiz, QuizInput, User, PlayGame @@ -16,7 +16,7 @@ router = APIRouter() @router.post("/create") async def create_quiz_lol(quiz_input: QuizInput, user: User = Depends(get_current_user)): - quiz = Quiz(**quiz_input.dict(), user_id=user.id) + quiz = Quiz(**quiz_input.dict(), user_id=user.id, id=uuid.uuid4()) return await quiz.save() @@ -65,3 +65,23 @@ async def get_game_id(game_pin: str): @router.get("/list") async def get_quiz_list(user: User = Depends(get_current_user)): return await Quiz.objects.filter(user_id=user.id).all() + + +@router.put("/update/{quiz_id}") +async def update_quiz(quiz_id: str, quiz_input: QuizInput, user: User = Depends(get_current_user)): + 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, user_id=user.id) + if quiz is None: + return JSONResponse(status_code=404, content={"detail": "quiz not found"}) + else: + print(quiz_input) + print(quiz) + quiz.title = quiz_input.title + quiz.public = quiz_input.public + quiz.description = quiz_input.description + quiz.updated_at = datetime.now() + quiz.questions = quiz_input.dict()["questions"] + return await quiz.update() diff --git a/frontend/src/lib/editor.svelte b/frontend/src/lib/editor.svelte new file mode 100644 index 0000000..3ce5b1a --- /dev/null +++ b/frontend/src/lib/editor.svelte @@ -0,0 +1,91 @@ + + + + + + +{#each data.questions as question, index_question} +
+

Question {index_question + 1}

+ + + + {#each question.answers as answer, index_answer} +
+

Answer {index_answer + 1}

+

Answer: {index_answer} Question: {index_question}

+ + + +
+ {/each} + + +
+ +{/each} + diff --git a/frontend/src/routes/edit.svelte b/frontend/src/routes/edit.svelte new file mode 100644 index 0000000..728bfbb --- /dev/null +++ b/frontend/src/routes/edit.svelte @@ -0,0 +1,165 @@ + + + +{#await get_quiz()} + + + + + +{:then lol} + {#if data !== undefined} +
+ + + {/if} + +{:catch err} +
+

{err.message}

+
+{/await} + +