Skip to main content

headless_lms_models/
partner_block.rs

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