headless_lms_models/
course_prerequisites.rs1use crate::prelude::*;
2use serde::{Deserialize, Serialize};
3use utoipa::ToSchema;
4
5#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize, ToSchema, Hash)]
6pub struct CoursePrerequisite {
7 pub id: Uuid,
8 pub created_at: DateTime<Utc>,
9 pub updated_at: DateTime<Utc>,
10 pub deleted_at: Option<DateTime<Utc>>,
11 pub course_id: Uuid,
12 pub prerequisite: String,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize, ToSchema, Hash)]
16pub struct NewCoursePrerequisite {
17 pub prerequisite: String,
18}
19
20pub async fn insert_course_prerequisites(
21 conn: &mut PgConnection,
22 course_id: Uuid,
23 new_prerequisites: Vec<String>,
24) -> ModelResult<Vec<CoursePrerequisite>> {
25 let res = sqlx::query_as!(
26 CoursePrerequisite,
27 "
28INSERT INTO course_prerequisites (
29 course_id,
30 prerequisite
31 )
32 SELECT $1,
33 UNNEST ($2::TEXT []) prerequisite
34RETURNING *
35",
36 course_id,
37 &new_prerequisites
38 )
39 .fetch_all(conn)
40 .await?;
41 Ok(res)
42}
43
44pub async fn get_by_course_id(
45 conn: &mut PgConnection,
46 course_id: Uuid,
47) -> ModelResult<Vec<CoursePrerequisite>> {
48 let res = sqlx::query_as!(
49 CoursePrerequisite,
50 "
51SELECT *
52FROM course_prerequisites
53WHERE course_id = $1
54AND deleted_at IS NULL
55",
56 course_id
57 )
58 .fetch_all(conn)
59 .await?;
60 Ok(res)
61}
62
63pub async fn delete_batch(
64 conn: &mut PgConnection,
65 ids_to_delete: Vec<Uuid>,
66) -> ModelResult<Vec<CoursePrerequisite>> {
67 let res = sqlx::query_as!(
68 CoursePrerequisite,
69 "
70UPDATE course_prerequisites
71SET deleted_at = now()
72WHERE id = ANY($1::UUID [])
73AND deleted_at IS NULL
74RETURNING *
75",
76 &ids_to_delete
77 )
78 .fetch_all(conn)
79 .await?;
80 Ok(res)
81}