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