headless_lms_models/library/
custom_view_exercises.rs

1use crate::{
2    exercises::Exercise, prelude::*,
3    user_course_instance_exercise_service_variables::UserCourseInstanceExerciseServiceVariable,
4};
5
6#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
7#[cfg_attr(feature = "ts_rs", derive(TS))]
8pub struct CustomViewExerciseTaskGrading {
9    pub id: Uuid,
10    pub created_at: DateTime<Utc>,
11    pub exercise_id: Uuid,
12    pub exercise_task_id: Uuid,
13    pub feedback_json: Option<serde_json::Value>,
14    pub feedback_text: Option<String>,
15}
16
17#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
18#[cfg_attr(feature = "ts_rs", derive(TS))]
19pub struct CustomViewExerciseTaskSpec {
20    pub id: Uuid,
21    pub public_spec: Option<serde_json::Value>,
22    pub order_number: i32,
23}
24
25#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
26#[cfg_attr(feature = "ts_rs", derive(TS))]
27pub struct CustomViewExerciseTaskSubmission {
28    pub id: Uuid,
29    pub created_at: DateTime<Utc>,
30    pub exercise_slide_submission_id: Uuid,
31    pub exercise_slide_id: Uuid,
32    pub exercise_task_id: Uuid,
33    pub exercise_task_grading_id: Option<Uuid>,
34    pub data_json: Option<serde_json::Value>,
35}
36
37#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
38#[cfg_attr(feature = "ts_rs", derive(TS))]
39pub struct CustomViewExerciseSubmissions {
40    pub exercise_tasks: CustomViewExerciseTasks,
41    pub exercises: Vec<Exercise>,
42    pub user_variables: Vec<UserCourseInstanceExerciseServiceVariable>,
43}
44
45#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
46#[cfg_attr(feature = "ts_rs", derive(TS))]
47pub struct CustomViewExerciseTasks {
48    pub exercise_tasks: Vec<CustomViewExerciseTaskSpec>,
49    pub task_submissions: Vec<CustomViewExerciseTaskSubmission>,
50    pub task_gradings: Vec<CustomViewExerciseTaskGrading>,
51}