headless_lms_models/
exercise_task_regrading_submissions.rs

1use 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}