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