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