headless_lms_models/
privacy_link.rs1use 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}