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 Failed,
74 NotReady,
76 PendingManual,
78 Pending,
80 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}