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 Failed,
73 NotReady,
75 PendingManual,
77 Pending,
79 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}