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