Finished user-screen

This commit is contained in:
Mawoka
2023-01-26 19:18:56 +01:00
parent 8d544d7c88
commit 028ab567de
3 changed files with 21 additions and 7 deletions
+15 -4
View File
@@ -18,7 +18,7 @@ import bleach
from classquiz.auth import get_current_user from classquiz.auth import get_current_user
from classquiz.config import redis, settings, storage, meilisearch from classquiz.config import redis, settings, storage, meilisearch
from classquiz.db.models import Quiz, QuizInput, User, PlayGame, GameInLobby from classquiz.db.models import Quiz, QuizInput, User, PlayGame, GameInLobby, QuizQuestion
from classquiz.kahoot_importer.import_quiz import import_quiz from classquiz.kahoot_importer.import_quiz import import_quiz
import html import html
import urllib.parse import urllib.parse
@@ -75,17 +75,28 @@ async def get_quiz_from_id(quiz_id: str, user: User | None = Depends(get_current
return quiz return quiz
@router.get("/get/public/{quiz_id}", response_model=Quiz) class PublicQuizResponseUser(BaseModel):
username: str
id: uuid.UUID
class PublicQuizResponse(Quiz.get_pydantic()):
user_id: PublicQuizResponseUser
questions: list[QuizQuestion]
@router.get("/get/public/{quiz_id}")
async def get_public_quiz(quiz_id: str): async def get_public_quiz(quiz_id: str):
try: try:
quiz_id = uuid.UUID(quiz_id) quiz_id = uuid.UUID(quiz_id)
except ValueError: except ValueError:
raise HTTPException(status_code=400, detail="badly formed quiz id") raise HTTPException(status_code=400, detail="badly formed quiz id")
quiz = await Quiz.objects.get_or_none(id=quiz_id) quiz = await Quiz.objects.select_related("user_id").get_or_none(id=quiz_id)
print(quiz.dict(exclude={"user_id": {"avatar"}}))
if quiz is None: if quiz is None:
return JSONResponse(status_code=404, content={"detail": "quiz not found"}) return JSONResponse(status_code=404, content={"detail": "quiz not found"})
else: else:
return quiz return PublicQuizResponse(**quiz.dict())
@router.post("/start/{quiz_id}") @router.post("/start/{quiz_id}")
+3 -3
View File
@@ -4,9 +4,9 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/ */
import type { PageLoad } from './$types'; // import type { PageLoad } from './$types';
export const load = (async ({ params, fetch }) => { export const load = async ({ params, fetch }) => {
const user_req = await fetch(`/api/v1/community/user/${params.user_id}`); const user_req = await fetch(`/api/v1/community/user/${params.user_id}`);
const user = await user_req.json(); const user = await user_req.json();
if (!user) { if (!user) {
@@ -21,4 +21,4 @@ export const load = (async ({ params, fetch }) => {
user, user,
quizzes quizzes
}; };
}) satisfies PageLoad; }; // satisfies PageLoad;
@@ -68,6 +68,9 @@
<div class="text-center"> <div class="text-center">
<p>{@html quiz.description}</p> <p>{@html quiz.description}</p>
</div> </div>
<p class="text-center">
Made by <a href="/user/{quiz.user_id.id}" class="underline">@{quiz.user_id.username}</a>
</p>
{#if quiz.cover_image} {#if quiz.cover_image}
<div class="flex justify-center align-middle items-center"> <div class="flex justify-center align-middle items-center">
<div class="h-[15vh] m-auto w-auto my-3"> <div class="h-[15vh] m-auto w-auto my-3">