75 lines
2.0 KiB
Python
75 lines
2.0 KiB
Python
from typing import Optional, Literal
|
|
from ninja import Schema
|
|
from uuid import UUID
|
|
|
|
|
|
class SubmissionIn(Schema):
|
|
task_id: int
|
|
html: Optional[str] = None
|
|
css: Optional[str] = None
|
|
js: Optional[str] = None
|
|
|
|
|
|
class SubmissionOut(Schema):
|
|
id: UUID
|
|
userid: int
|
|
username: str
|
|
task_id: int
|
|
task_title: str
|
|
task_type: Literal["tutorial", "challenge"]
|
|
score: float
|
|
my_score: int
|
|
html: Optional[str] = None
|
|
css: Optional[str] = None
|
|
js: Optional[str] = None
|
|
created: str
|
|
modified: str
|
|
|
|
@staticmethod
|
|
def list(submission, rating_dict):
|
|
return {
|
|
"id": submission.id,
|
|
"userid": submission.user.id,
|
|
"username": submission.user.username,
|
|
"task_id": submission.task.id,
|
|
"task_title": submission.task.title,
|
|
"task_type": submission.task.task_type,
|
|
"score": submission.score,
|
|
"my_score": rating_dict.get(submission.id, 0),
|
|
"created": submission.created.isoformat(),
|
|
"modified": submission.modified.isoformat(),
|
|
}
|
|
|
|
@staticmethod
|
|
def get(submission, rating):
|
|
return {
|
|
"id": submission.id,
|
|
"userid": submission.user.id,
|
|
"username": submission.user.username,
|
|
"task_id": submission.task.id,
|
|
"task_title": submission.task.title,
|
|
"task_type": submission.task.task_type,
|
|
"score": submission.score,
|
|
"my_score": rating.score if rating else 0,
|
|
"html": submission.html,
|
|
"css": submission.css,
|
|
"js": submission.js,
|
|
"created": submission.created.isoformat(),
|
|
"modified": submission.modified.isoformat(),
|
|
}
|
|
|
|
|
|
class RatingScoreIn(Schema):
|
|
score: int
|
|
|
|
|
|
class SubmissionScoreOut(Schema):
|
|
id: UUID
|
|
score: float
|
|
|
|
|
|
class SubmissionFilter(Schema):
|
|
task_id: Optional[int] = None
|
|
task_type: Optional[Literal["tutorial", "challenge"]] = None
|
|
username: Optional[str] = None
|