headless_lms_models/library/
custom_view_exercises.rs1use crate::{
2 exercise_task_submissions::{AnswerFile, AnswerKind},
3 exercises::Exercise,
4 prelude::*,
5 user_course_exercise_service_variables::UserCourseExerciseServiceVariable,
6};
7use utoipa::ToSchema;
8
9#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, ToSchema)]
10
11pub struct CustomViewExerciseTaskGrading {
12 pub id: Uuid,
13 pub created_at: DateTime<Utc>,
14 pub exercise_id: Uuid,
15 pub exercise_task_id: Uuid,
16 pub feedback_json: Option<serde_json::Value>,
17 pub feedback_text: Option<String>,
18}
19
20#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, ToSchema)]
21
22pub struct CustomViewExerciseTaskSpec {
23 pub id: Uuid,
24 pub public_spec: Option<serde_json::Value>,
25 pub order_number: i32,
26}
27
28#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, ToSchema)]
29
30pub struct CustomViewExerciseTaskSubmission {
31 pub id: Uuid,
32 pub created_at: DateTime<Utc>,
33 pub exercise_slide_submission_id: Uuid,
34 pub exercise_slide_id: Uuid,
35 pub exercise_task_id: Uuid,
36 pub exercise_task_grading_id: Option<Uuid>,
37 pub answer_kind: AnswerKind,
38 pub data_json: Option<serde_json::Value>,
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub data_files: Option<Vec<AnswerFile>>,
45}
46
47#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, ToSchema)]
48
49pub struct CustomViewExerciseSubmissions {
50 pub exercise_tasks: CustomViewExerciseTasks,
51 pub exercises: Vec<Exercise>,
52 pub user_variables: Vec<UserCourseExerciseServiceVariable>,
53}
54
55#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, ToSchema)]
56
57pub struct CustomViewExerciseTasks {
58 pub exercise_tasks: Vec<CustomViewExerciseTaskSpec>,
59 pub task_submissions: Vec<CustomViewExerciseTaskSubmission>,
60 pub task_gradings: Vec<CustomViewExerciseTaskGrading>,
61}