Skip to main content

headless_lms_models/
privacy_link.rs

1use crate::prelude::*;
2use utoipa::ToSchema;
3
4#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, ToSchema)]
5
6pub struct PrivacyLink {
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 title: String,
12    pub url: String,
13    pub course_id: Uuid,
14}
15
16#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
17
18pub struct PrivacyLinkNew {
19    pub course_id: Uuid,
20    pub title: String,
21    pub url: String,
22}
23
24pub async fn insert(
25    conn: &mut PgConnection,
26    course_id: Uuid,
27    title: String,
28    url: String,
29) -> ModelResult<PrivacyLink> {
30    let res = sqlx::query_as!(
31        PrivacyLink,
32        r#"
33INSERT INTO privacy_links (course_id, title, url)
34VALUES ($1, $2, $3)
35RETURNING *
36"#,
37        course_id,
38        title,
39        url,
40    )
41    .fetch_one(conn)
42    .await?;
43    Ok(res)
44}
45
46pub async fn get_privacy_link(
47    conn: &mut PgConnection,
48    course_id: Uuid,
49) -> ModelResult<Vec<PrivacyLink>> {
50    let res = sqlx::query_as!(
51        PrivacyLink,
52        "SELECT *
53FROM privacy_links
54WHERE course_id = $1
55  AND deleted_at IS NULL",
56        course_id
57    )
58    .fetch_all(conn)
59    .await?;
60    Ok(res)
61}
62
63pub async fn delete_privacy_link(
64    conn: &mut PgConnection,
65    course_id: Uuid,
66) -> ModelResult<PrivacyLink> {
67    let deleted = sqlx::query_as!(
68        PrivacyLink,
69        r#"
70UPDATE privacy_links
71SET deleted_at = now()
72WHERE course_id = $1
73AND deleted_at IS NULL
74RETURNING *
75  "#,
76        course_id
77    )
78    .fetch_one(conn)
79    .await?;
80    Ok(deleted)
81}