Quiiz system
This commit is contained in:
@@ -99,6 +99,8 @@ from devplacepy.schemas.backups import (
|
||||
BackupStoragePathOut,
|
||||
)
|
||||
from devplacepy.schemas.admin import (
|
||||
AdminDeviiTaskItemOut,
|
||||
AdminDeviiTasksOut,
|
||||
AdminGameOut,
|
||||
AdminMediaItemOut,
|
||||
AdminMediaOut,
|
||||
@@ -143,6 +145,27 @@ from devplacepy.schemas.dbapi import (
|
||||
DbTableOut,
|
||||
NlQueryOut,
|
||||
)
|
||||
from devplacepy.schemas.quiz import (
|
||||
QuizAnswerOut,
|
||||
QuizAnswerResultOut,
|
||||
QuizAttemptOut,
|
||||
QuizAttemptPageOut,
|
||||
QuizBuilderOut,
|
||||
QuizDetailOut,
|
||||
QuizDocumentOut,
|
||||
QuizFormPageOut,
|
||||
QuizLeaderboardEntryOut,
|
||||
QuizLeaderboardOut,
|
||||
QuizListItemOut,
|
||||
QuizOptionOut,
|
||||
QuizOut,
|
||||
QuizProgressOut,
|
||||
QuizQuestionOut,
|
||||
QuizResultOut,
|
||||
QuizScoreboardEntryOut,
|
||||
QuizScoreboardOut,
|
||||
QuizzesOut,
|
||||
)
|
||||
from devplacepy.schemas.game import (
|
||||
GameCropOut,
|
||||
GameFarmOut,
|
||||
|
||||
@@ -74,6 +74,31 @@ class AdminTrashOut(_Out):
|
||||
admin_section: Optional[str] = None
|
||||
|
||||
|
||||
class AdminDeviiTaskItemOut(_Out):
|
||||
uid: str
|
||||
label: Optional[str] = None
|
||||
owner_uid: str = ""
|
||||
owner: str = ""
|
||||
owner_is_admin: bool = False
|
||||
schedule: str = ""
|
||||
status: str = ""
|
||||
enabled: bool = False
|
||||
run_count: int = 0
|
||||
max_runs: Optional[int] = None
|
||||
failure_count: int = 0
|
||||
next_run_at: Optional[str] = None
|
||||
expires_at: Optional[str] = None
|
||||
last_error: Optional[str] = None
|
||||
|
||||
|
||||
class AdminDeviiTasksOut(_Out):
|
||||
items: list[AdminDeviiTaskItemOut] = []
|
||||
state: str = "active"
|
||||
tabs: list[dict] = []
|
||||
limits: dict = {}
|
||||
admin_section: Optional[str] = None
|
||||
|
||||
|
||||
class AdminGameOut(_Out):
|
||||
era_active: bool = False
|
||||
era_name: str = ""
|
||||
|
||||
@@ -37,6 +37,8 @@ class GamePlotOut(_Out):
|
||||
steal_reason: str = ""
|
||||
is_golden: bool = False
|
||||
fertilize_cost: int = 0
|
||||
raided_fraction: float = 0.0
|
||||
raided_pct: int = 0
|
||||
|
||||
|
||||
class GamePerkOut(_Out):
|
||||
@@ -144,6 +146,7 @@ class GameFarmOut(_Out):
|
||||
treasury_balance: int = 0
|
||||
streak: int = 0
|
||||
daily_available: bool = False
|
||||
daily_streak_reset: bool = False
|
||||
daily_reward: int = 0
|
||||
perks: list[GamePerkOut] = []
|
||||
quests: list[GameQuestOut] = []
|
||||
@@ -161,6 +164,12 @@ class GameFarmOut(_Out):
|
||||
cosmetics: list[GameCosmeticOut] = []
|
||||
active_title: str = ""
|
||||
underdog_boost_seconds_remaining: int = 0
|
||||
contract_boost_seconds_remaining: int = 0
|
||||
auto_harvested: int = 0
|
||||
auto_harvest_coins: int = 0
|
||||
auto_harvest_xp: int = 0
|
||||
steal_max_per_victim_per_day: int = 0
|
||||
defense_downgrade_available: bool = False
|
||||
mastery_analytics_unlocked: bool = False
|
||||
lifetime_coins_earned: int = 0
|
||||
lifetime_harvests: int = 0
|
||||
|
||||
@@ -0,0 +1,230 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any, Optional
|
||||
|
||||
from devplacepy.schemas.base import _Out
|
||||
from devplacepy.schemas.content import CommentItemOut, UserOut
|
||||
|
||||
|
||||
class QuizOptionOut(_Out):
|
||||
uid: str = ""
|
||||
position: int = 0
|
||||
label: str = ""
|
||||
is_correct: Optional[bool] = None
|
||||
match_value: Optional[str] = None
|
||||
|
||||
|
||||
class QuizAnswerOut(_Out):
|
||||
uid: str = ""
|
||||
question_uid: str = ""
|
||||
position: int = 0
|
||||
answer_text: str = ""
|
||||
option_uids: list[str] = []
|
||||
answered: bool = False
|
||||
answered_at: str = ""
|
||||
is_correct: bool = False
|
||||
awarded_points: float = 0.0
|
||||
feedback: str = ""
|
||||
graded_by: str = ""
|
||||
confidence: float = 0.0
|
||||
|
||||
|
||||
class QuizQuestionOut(_Out):
|
||||
uid: str = ""
|
||||
quiz_uid: str = ""
|
||||
position: int = 0
|
||||
kind: str = ""
|
||||
kind_label: str = ""
|
||||
prompt: str = ""
|
||||
explanation: str = ""
|
||||
points: int = 1
|
||||
media_attachment_uid: str = ""
|
||||
case_sensitive: bool = False
|
||||
options: list[QuizOptionOut] = []
|
||||
option_count: int = 0
|
||||
match_choices: list[str] = []
|
||||
correct_boolean: Optional[bool] = None
|
||||
expected_answer: Optional[str] = None
|
||||
grading_criteria: Optional[str] = None
|
||||
numeric_value: Optional[float] = None
|
||||
numeric_tolerance: Optional[float] = None
|
||||
answer: Optional[QuizAnswerOut] = None
|
||||
|
||||
|
||||
class QuizOut(_Out):
|
||||
uid: str = ""
|
||||
slug: str = ""
|
||||
url: str = ""
|
||||
title: str = ""
|
||||
description: str = ""
|
||||
status: str = "draft"
|
||||
published_at: str = ""
|
||||
shuffle_questions: bool = False
|
||||
shuffle_options: bool = False
|
||||
reveal_answers: bool = False
|
||||
allow_review: bool = True
|
||||
time_limit_seconds: int = 0
|
||||
pass_percent: int = 0
|
||||
question_count: int = 0
|
||||
total_points: int = 0
|
||||
attempt_count: int = 0
|
||||
stars: int = 0
|
||||
created_at: str = ""
|
||||
author: Optional[UserOut] = None
|
||||
viewer_owns: bool = False
|
||||
viewer_is_admin: bool = False
|
||||
viewer_can_edit: bool = False
|
||||
viewer_can_play: bool = False
|
||||
viewer_state: str = "todo"
|
||||
validation_errors: list[str] = []
|
||||
|
||||
|
||||
class QuizDetailOut(_Out):
|
||||
quiz: QuizOut = QuizOut()
|
||||
questions: list[QuizQuestionOut] = []
|
||||
comments: list[CommentItemOut] = []
|
||||
attachments: list[Any] = []
|
||||
reactions: dict = {}
|
||||
bookmarked: bool = False
|
||||
star_count: int = 0
|
||||
my_vote: int = 0
|
||||
leaderboard: list[Any] = []
|
||||
viewer_state: str = "todo"
|
||||
viewer_attempt_uid: str = ""
|
||||
|
||||
|
||||
class QuizListItemOut(_Out):
|
||||
uid: str = ""
|
||||
slug: str = ""
|
||||
url: str = ""
|
||||
title: str = ""
|
||||
description: str = ""
|
||||
status: str = "published"
|
||||
created_at: str = ""
|
||||
time_ago: str = ""
|
||||
author: Optional[UserOut] = None
|
||||
question_count: int = 0
|
||||
total_points: int = 0
|
||||
attempt_count: int = 0
|
||||
time_limit_seconds: int = 0
|
||||
pass_percent: int = 0
|
||||
stars: int = 0
|
||||
my_vote: int = 0
|
||||
comment_count: int = 0
|
||||
bookmarked: bool = False
|
||||
reactions: dict = {}
|
||||
recent_comments: list[CommentItemOut] = []
|
||||
viewer_state: str = "todo"
|
||||
viewer_best_percent: float = 0.0
|
||||
viewer_best_points: float = 0.0
|
||||
viewer_attempt_uid: str = ""
|
||||
|
||||
|
||||
class QuizScoreboardEntryOut(_Out):
|
||||
rank: int = 0
|
||||
user: Optional[UserOut] = None
|
||||
total_points: float = 0.0
|
||||
quizzes_completed: int = 0
|
||||
avg_percent: float = 0.0
|
||||
perfect_count: int = 0
|
||||
|
||||
|
||||
class QuizProgressOut(_Out):
|
||||
completed: int = 0
|
||||
todo: int = 0
|
||||
avg_percent: float = 0.0
|
||||
total_points: float = 0.0
|
||||
rank: int = 0
|
||||
perfect_count: int = 0
|
||||
|
||||
|
||||
class QuizScoreboardOut(_Out):
|
||||
scoreboard: list[QuizScoreboardEntryOut] = []
|
||||
viewer_standing: Optional[QuizScoreboardEntryOut] = None
|
||||
limit: int = 0
|
||||
|
||||
|
||||
class QuizzesOut(_Out):
|
||||
quizzes: list[QuizListItemOut] = []
|
||||
search: str = ""
|
||||
filter: str = "all"
|
||||
counts: dict = {}
|
||||
pagination: dict = {}
|
||||
scoreboard: list[QuizScoreboardEntryOut] = []
|
||||
viewer_standing: Optional[QuizScoreboardEntryOut] = None
|
||||
viewer_progress: QuizProgressOut = QuizProgressOut()
|
||||
viewer_can_create: bool = False
|
||||
|
||||
|
||||
class QuizAttemptOut(_Out):
|
||||
uid: str = ""
|
||||
quiz_uid: str = ""
|
||||
quiz_slug: str = ""
|
||||
quiz_title: str = ""
|
||||
user_uid: str = ""
|
||||
status: str = ""
|
||||
started_at: str = ""
|
||||
expires_at: str = ""
|
||||
completed_at: str = ""
|
||||
remaining_seconds: int = 0
|
||||
answered_count: int = 0
|
||||
question_count: int = 0
|
||||
score_points: float = 0.0
|
||||
max_points: int = 0
|
||||
score_percent: float = 0.0
|
||||
passed: bool = False
|
||||
pass_percent: int = 0
|
||||
allow_review: bool = True
|
||||
questions: list[QuizQuestionOut] = []
|
||||
|
||||
|
||||
class QuizAttemptPageOut(_Out):
|
||||
quiz: QuizOut = QuizOut()
|
||||
attempt: QuizAttemptOut = QuizAttemptOut()
|
||||
|
||||
|
||||
class QuizResultOut(_Out):
|
||||
quiz: QuizOut = QuizOut()
|
||||
attempt: QuizAttemptOut = QuizAttemptOut()
|
||||
review: list[QuizQuestionOut] = []
|
||||
fallback_count: int = 0
|
||||
|
||||
|
||||
class QuizAnswerResultOut(_Out):
|
||||
ok: bool = True
|
||||
answer: QuizAnswerOut = QuizAnswerOut()
|
||||
attempt: QuizAttemptOut = QuizAttemptOut()
|
||||
|
||||
|
||||
class QuizLeaderboardEntryOut(_Out):
|
||||
rank: int = 0
|
||||
user: Optional[UserOut] = None
|
||||
score_points: float = 0.0
|
||||
score_percent: float = 0.0
|
||||
passed: bool = False
|
||||
completed_at: str = ""
|
||||
|
||||
|
||||
class QuizLeaderboardOut(_Out):
|
||||
quiz_uid: str = ""
|
||||
entries: list[QuizLeaderboardEntryOut] = []
|
||||
|
||||
|
||||
class QuizDocumentOut(_Out):
|
||||
title: str = ""
|
||||
description: str = ""
|
||||
settings: dict = {}
|
||||
questions: list[Any] = []
|
||||
|
||||
|
||||
class QuizBuilderOut(_Out):
|
||||
quiz: QuizOut = QuizOut()
|
||||
questions: list[QuizQuestionOut] = []
|
||||
kinds: list[Any] = []
|
||||
validation_errors: list[str] = []
|
||||
|
||||
|
||||
class QuizFormPageOut(_Out):
|
||||
viewer_can_create: bool = False
|
||||
Reference in New Issue
Block a user