headless_lms_models/
course_exams.rs1use 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
19pub 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}