headless_lms_models/
course_exams.rs

1use crate::prelude::*;
2
3pub async fn upsert(conn: &mut PgConnection, exam_id: Uuid, course_id: Uuid) -> ModelResult<()> {
4    sqlx::query!(
5        "
6INSERT INTO course_exams (course_id, exam_id)
7VALUES ($1, $2) ON CONFLICT (course_id, exam_id) DO
8UPDATE
9SET deleted_at = NULL;
10",
11        course_id,
12        exam_id,
13    )
14    .execute(conn)
15    .await?;
16    Ok(())
17}
18
19/// Gets all course ids associated with the given exam id.
20pub async fn get_course_ids_by_exam_id(
21    conn: &mut PgConnection,
22    exam_id: Uuid,
23) -> ModelResult<Vec<Uuid>> {
24    let res = sqlx::query!(
25        "
26SELECT course_id
27FROM course_exams
28WHERE exam_id = $1
29  AND deleted_at IS NULL
30        ",
31        exam_id,
32    )
33    .map(|x| x.course_id)
34    .fetch_all(conn)
35    .await?;
36    Ok(res)
37}
38
39pub async fn get_exam_ids_by_course_id(
40    conn: &mut PgConnection,
41    course_id: Uuid,
42) -> ModelResult<Vec<Uuid>> {
43    let res = sqlx::query!(
44        "
45SELECT exam_id
46FROM course_exams
47WHERE course_id = $1
48  AND deleted_at IS NULL
49        ",
50        course_id,
51    )
52    .map(|x| x.exam_id)
53    .fetch_all(conn)
54    .await?;
55    Ok(res)
56}
57
58pub async fn delete(conn: &mut PgConnection, exam_id: Uuid, course_id: Uuid) -> ModelResult<()> {
59    sqlx::query!(
60        "
61UPDATE course_exams
62SET deleted_at = now()
63WHERE course_id = $1
64  AND exam_id = $2
65        ",
66        course_id,
67        exam_id,
68    )
69    .execute(conn)
70    .await?;
71    Ok(())
72}