✨ Finished user-screen
This commit is contained in:
@@ -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}")
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user