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}
23
24#[derive(Debug, Serialize, Deserialize)]
25pub struct ExerciseSlide {
26    pub slide_id: Uuid,
27    pub exercise_id: Uuid,
28    pub exercise_name: String,
29    pub exercise_order_number: i32,
30    pub deadline: Option<DateTime<Utc>>,
31    pub tasks: Vec<ExerciseTask>,
32}
33
34#[derive(Debug, Serialize, Deserialize)]
35pub struct ExerciseTask {
36    pub task_id: Uuid,
37    pub order_number: i32,
38    pub assignment: serde_json::Value,
39    pub public_spec: Option<serde_json::Value>,
40    pub model_solution_spec: Option<serde_json::Value>,
41    pub exercise_service_slug: String,
42}
43
44#[derive(Debug, Serialize, Deserialize)]
45pub struct ExerciseSlideSubmission {
46    pub exercise_slide_id: Uuid,
47    pub exercise_task_id: Uuid,
48    pub data_json: serde_json::Value,
49}
50
51#[derive(Debug, Serialize, Deserialize)]
52pub struct ExerciseTaskSubmissionResult {
53    pub submission_id: Uuid,
54}
55
56#[derive(Debug, Serialize, Deserialize)]
57pub enum ExerciseTaskSubmissionStatus {
58    NoGradingYet,
59    Grading {
60        grading_progress: GradingProgress,
61        score_given: Option<f32>,
62        grading_started_at: Option<DateTime<Utc>>,
63        grading_completed_at: Option<DateTime<Utc>>,
64        feedback_json: Option<serde_json::Value>,
65        feedback_text: Option<String>,
66    },
67}
68
69#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
70pub enum GradingProgress {
71    /// The grading could not complete.
72    Failed,
73    /// There is no grading process occurring; for example, the student has not yet made any submission.
74    NotReady,
75    /// 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.
76    PendingManual,
77    /// 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.
78    Pending,
79    /// The grading process is completed; the score value, if any, represents the current Final Grade;
80    FullyGraded,
81}
82
83#[derive(Debug, Clone, Serialize)]
84pub struct ExerciseUpdatesRequest<'a> {
85    pub exercises: &'a [ExerciseUpdateData<'a>],
86}
87
88#[derive(Debug, Clone, Serialize)]
89pub struct ExerciseUpdateData<'a> {
90    pub id: Uuid,
91    pub checksum: &'a str,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct ExerciseUpdates {
96    pub updated_exercises: Vec<Uuid>,
97    pub deleted_exercises: Vec<Uuid>,
98}