headless_lms_models/
partner_block.rs

1use crate::prelude::*;
2
3#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
4#[cfg_attr(feature = "ts_rs", derive(TS))]
5pub struct PartnersBlock {
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 content: serde_json::Value,
11    pub course_id: Uuid,
12}
13
14#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
15#[cfg_attr(feature = "ts_rs", derive(TS))]
16pub struct PartnerBlockNew {
17    pub course_id: Uuid,
18    pub content: Option<serde_json::Value>,
19}
20
21pub async fn upsert_partner_block(
22    conn: &mut PgConnection,
23    course_id: Uuid,
24    content: Option<serde_json::Value>,
25) -> ModelResult<PartnersBlock> {
26    let res = sqlx::query_as!(
27        PartnersBlock,
28        r#"
29INSERT INTO partners_blocks (course_id, content)
30VALUES ($1, $2)
31ON CONFLICT (course_id)
32DO UPDATE
33SET content = EXCLUDED.content
34RETURNING *
35"#,
36        course_id,
37        content,
38    )
39    .fetch_one(conn)
40    .await?;
41    Ok(res)
42}
43
44pub async fn get_partner_block(
45    conn: &mut PgConnection,
46    course_id: Uuid,
47) -> ModelResult<PartnersBlock> {
48    let res = sqlx::query_as!(
49        PartnersBlock,
50        "SELECT *
51FROM partners_blocks
52WHERE course_id = $1
53  AND deleted_at IS NULL",
54        course_id
55    )
56    .fetch_one(conn)
57    .await?;
58    Ok(res)
59}
60
61pub async fn delete_partner_block(
62    conn: &mut PgConnection,
63    course_id: Uuid,
64) -> ModelResult<PartnersBlock> {
65    let deleted = sqlx::query_as!(
66        PartnersBlock,
67        r#"
68UPDATE partners_blocks
69SET deleted_at = now()
70WHERE course_id = $1
71RETURNING *
72  "#,
73        course_id
74    )
75    .fetch_one(conn)
76    .await?;
77    Ok(deleted)
78}
79
80pub async fn check_if_course_exists(
81    conn: &mut PgConnection,
82    course_id: Uuid,
83) -> Result<bool, sqlx::Error> {
84    let exists = sqlx::query!(
85        r#"
86        SELECT 1 AS exists
87        FROM partners_blocks
88        WHERE course_id = $1
89        LIMIT 1
90        "#,
91        course_id
92    )
93    .fetch_optional(conn)
94    .await?;
95    Ok(exists.is_some())
96}