headless_lms_models/
open_university_registration_links.rs

1use crate::prelude::*;
2
3#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
4pub struct OpenUniversityRegistrationLink {
5    pub uh_course_code: String,
6    pub created_at: DateTime<Utc>,
7    pub updated_at: DateTime<Utc>,
8    pub deleted_at: Option<DateTime<Utc>>,
9    pub registration_link: String,
10}
11
12pub async fn upsert(
13    conn: &mut PgConnection,
14    uh_course_code: &str,
15    registration_link: &str,
16) -> ModelResult<OpenUniversityRegistrationLink> {
17    let res = sqlx::query_as!(
18        OpenUniversityRegistrationLink,
19        "
20INSERT INTO open_university_registration_links (uh_course_code, registration_link)
21VALUES ($1, $2) ON CONFLICT (uh_course_code) DO
22UPDATE
23SET registration_link = $2,
24  deleted_at = NULL
25RETURNING *
26        ",
27        uh_course_code,
28        registration_link,
29    )
30    .fetch_one(conn)
31    .await?;
32    Ok(res)
33}
34
35pub async fn get_link_by_course_code(
36    conn: &mut PgConnection,
37    uh_course_code: &str,
38) -> ModelResult<String> {
39    let res = sqlx::query!(
40        "
41SELECT registration_link
42FROM open_university_registration_links
43WHERE uh_course_code = $1
44  AND deleted_at IS NULL
45        ",
46        uh_course_code
47    )
48    .map(|record| record.registration_link)
49    .fetch_one(conn)
50    .await?;
51    Ok(res)
52}