mooc_langs_api/
lib.rs

1mod error;
2pub mod exercise_services;
3
4use chrono::{DateTime, Utc};
5pub use error::ErrorResponse;
6use serde::{Deserialize, Serialize};
7use std::fmt::Debug;
8use uuid::Uuid;
9
10pub type Token =
11    oauth2::StandardTokenResponse<oauth2::EmptyExtraTokenFields, oauth2::basic::BasicTokenType>;
12
13#[derive(Debug, Serialize, Deserialize)]
14pub struct CourseInstance {
15    pub id: Uuid,
16    pub course_id: Uuid,
17    pub course_slug: String,
18    pub course_name: String,
19    pub course_description: Option<String>,
20    pub instance_name: Option<String>,
21    pub instance_description: Option<String>,
22    pub organization_name: String,
23}
24
25#[derive(Debug, Serialize, Deserialize)]
26pub struct ExerciseSlide {
27    pub slide_id: Uuid,
28    pub exercise_id: Uuid,
29    pub exercise_name: String,
30    pub exercise_order_number: i32,
31    pub deadline: Option<DateTime<Utc>>,
32    pub tasks: Vec<ExerciseTask>,
33}
34
35#[derive(Debug, Serialize, Deserialize)]
36pub struct ExerciseTask {
37    pub task_id: Uuid,
38    pub order_number: i32,
39    pub assignment: serde_json::Value,
40    pub public_spec: Option<serde_json::Value>,
41    pub model_solution_spec: Option<serde_json::Value>,
42    pub exercise_service_slug: String,
43}
44
45#[derive(Debug, Serialize, Deserialize)]
46pub struct ExerciseSlideSubmission {
47    pub exercise_slide_id: Uuid,
48    pub exercise_task_id: Uuid,
49    pub data_json: serde_json::Value,
50}
51
52#[derive(Debug, Serialize, Deserialize)]
53pub struct ExerciseTaskSubmissionResult {
54    pub submission_id: Uuid,
55}
56
57#[derive(Debug, Serialize, Deserialize)]
58pub enum ExerciseTaskSubmissionStatus {
59    NoGradingYet,
60    Grading {
61        grading_progress: GradingProgress,
62        score_given: Option<f32>,
63        grading_started_at: Option<DateTime<Utc>>,
64        grading_completed_at: Option<DateTime<Utc>>,
65        feedback_json: Option<serde_json::Value>,
66        feedback_text: Option<String>,
67    },
68}
69
70#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
71pub enum GradingProgress {
72    /// The grading could not complete.
73    Failed,
74    /// There is no grading process occurring; for example, the student has not yet made any submission.
75    NotReady,
76    /// Final Grade is pending, and it does require human intervention; if a Score value is present, it indicates the current value is partial and may be updated during the manual grading.
77    PendingManual,
78    /// Final Grade is pending, but does not require manual intervention; if a Score value is present, it indicates the current value is partial and may be updated.
79    Pending,
80    /// The grading process is completed; the score value, if any, represents the current Final Grade;
81    FullyGraded,
82}
83
84#[derive(Debug, Clone, Serialize)]
85pub struct ExerciseUpdatesRequest<'a> {
86    pub exercises: &'a [ExerciseUpdateData<'a>],
87}
88
89#[derive(Debug, Clone, Serialize)]
90pub struct ExerciseUpdateData<'a> {
91    pub id: Uuid,
92    pub checksum: &'a str,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize)]
96pub struct ExerciseUpdates {
97    pub updated_exercises: Vec<Uuid>,
98    pub deleted_exercises: Vec<Uuid>,
99}