headless_lms_models/
exercise_task_regrading_submissions.rs1use crate::prelude::*;
2
3pub struct ExerciseTaskRegradingSubmission {
4 pub id: Uuid,
5 pub exercise_task_submission_id: Uuid,
6 pub grading_before_regrading: Uuid,
7 pub grading_after_regrading: Option<Uuid>,
8 pub regrading_id: Uuid,
9}
10
11pub async fn insert(
12 conn: &mut PgConnection,
13 pkey_policy: PKeyPolicy<Uuid>,
14 regrading_id: Uuid,
15 exercise_task_submission_id: Uuid,
16 grading_before_regrading_id: Uuid,
17) -> ModelResult<Uuid> {
18 let res = sqlx::query!(
19 "
20INSERT INTO exercise_task_regrading_submissions (
21 id,
22 regrading_id,
23 exercise_task_submission_id,
24 grading_before_regrading
25 )
26VALUES ($1, $2, $3, $4)
27RETURNING id
28 ",
29 pkey_policy.into_uuid(),
30 regrading_id,
31 exercise_task_submission_id,
32 grading_before_regrading_id
33 )
34 .fetch_one(conn)
35 .await?;
36 Ok(res.id)
37}
38
39pub async fn get_regrading_submission(
40 conn: &mut PgConnection,
41 exercise_task_regrading_submission_id: Uuid,
42) -> ModelResult<ExerciseTaskRegradingSubmission> {
43 let res = sqlx::query_as!(
44 ExerciseTaskRegradingSubmission,
45 "
46SELECT id,
47 exercise_task_submission_id,
48 grading_before_regrading,
49 grading_after_regrading,
50 regrading_id
51FROM exercise_task_regrading_submissions
52WHERE id = $1
53",
54 exercise_task_regrading_submission_id
55 )
56 .fetch_one(conn)
57 .await?;
58 Ok(res)
59}
60
61pub async fn get_regrading_submissions(
62 conn: &mut PgConnection,
63 regrading_id: Uuid,
64) -> ModelResult<Vec<ExerciseTaskRegradingSubmission>> {
65 let res = sqlx::query_as!(
66 ExerciseTaskRegradingSubmission,
67 "
68SELECT id,
69 exercise_task_submission_id,
70 grading_before_regrading,
71 grading_after_regrading,
72 regrading_id
73FROM exercise_task_regrading_submissions
74WHERE regrading_id = $1
75AND deleted_at IS NULL
76",
77 regrading_id
78 )
79 .fetch_all(conn)
80 .await?;
81 Ok(res)
82}
83
84pub async fn set_grading_after_regrading(
85 conn: &mut PgConnection,
86 exercise_task_regrading_submission_id: Uuid,
87 new_grading_id: Uuid,
88) -> ModelResult<()> {
89 sqlx::query!(
90 "
91UPDATE exercise_task_regrading_submissions
92SET grading_after_regrading = $1
93WHERE id = $2
94",
95 new_grading_id,
96 exercise_task_regrading_submission_id
97 )
98 .execute(conn)
99 .await?;
100 Ok(())
101}