1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
use crate::{
    exercises::Exercise, prelude::*,
    user_course_instance_exercise_service_variables::UserCourseInstanceExerciseServiceVariable,
};

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
#[cfg_attr(feature = "ts_rs", derive(TS))]
pub struct CustomViewExerciseTaskGrading {
    pub id: Uuid,
    pub created_at: DateTime<Utc>,
    pub exercise_id: Uuid,
    pub exercise_task_id: Uuid,
    pub feedback_json: Option<serde_json::Value>,
    pub feedback_text: Option<String>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
#[cfg_attr(feature = "ts_rs", derive(TS))]
pub struct CustomViewExerciseTaskSpec {
    pub id: Uuid,
    pub public_spec: Option<serde_json::Value>,
    pub order_number: i32,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
#[cfg_attr(feature = "ts_rs", derive(TS))]
pub struct CustomViewExerciseTaskSubmission {
    pub id: Uuid,
    pub created_at: DateTime<Utc>,
    pub exercise_slide_submission_id: Uuid,
    pub exercise_slide_id: Uuid,
    pub exercise_task_id: Uuid,
    pub exercise_task_grading_id: Option<Uuid>,
    pub data_json: Option<serde_json::Value>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
#[cfg_attr(feature = "ts_rs", derive(TS))]
pub struct CustomViewExerciseSubmissions {
    pub exercise_tasks: CustomViewExerciseTasks,
    pub exercises: Vec<Exercise>,
    pub user_variables: Vec<UserCourseInstanceExerciseServiceVariable>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
#[cfg_attr(feature = "ts_rs", derive(TS))]
pub struct CustomViewExerciseTasks {
    pub exercise_tasks: Vec<CustomViewExerciseTaskSpec>,
    pub task_submissions: Vec<CustomViewExerciseTaskSubmission>,
    pub task_gradings: Vec<CustomViewExerciseTaskGrading>,
}