headless_lms_models/
student_countries.rs

1use crate::prelude::*;
2
3#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
4#[cfg_attr(feature = "ts_rs", derive(TS))]
5pub struct StudentCountry {
6    pub id: Uuid,
7    pub user_id: Uuid,
8    pub course_id: Uuid,
9    pub course_instance_id: Uuid,
10    pub country_code: String,
11    pub created_at: DateTime<Utc>,
12    pub deleted_at: Option<DateTime<Utc>>,
13}
14
15pub async fn insert(
16    conn: &mut PgConnection,
17    user_id: Uuid,
18    course_id: Uuid,
19    course_instance_id: Uuid,
20    country_code: &str,
21) -> ModelResult<()> {
22    sqlx::query!(
23        "
24INSERT INTO student_countries (
25  user_id,
26  course_id,
27  course_instance_id,
28  country_code
29)
30VALUES($1, $2, $3, $4)
31      ",
32        user_id,
33        course_id,
34        course_instance_id,
35        country_code,
36    )
37    .execute(conn)
38    .await?;
39    Ok(())
40}
41
42pub async fn delete_student_country(conn: &mut PgConnection, id: Uuid) -> ModelResult<()> {
43    sqlx::query!(
44        r#"
45UPDATE student_countries
46SET deleted_at = now()
47WHERE id = $1
48AND deleted_at IS NULL
49      "#,
50        id
51    )
52    .execute(conn)
53    .await?;
54    Ok(())
55}
56
57pub async fn get_countries(
58    conn: &mut PgConnection,
59    course_id: Uuid,
60    course_instance_id: Uuid,
61) -> ModelResult<Vec<StudentCountry>> {
62    let student_countries = sqlx::query_as!(
63        StudentCountry,
64        "
65SELECT *
66FROM student_countries
67WHERE course_id = $1
68AND course_instance_id = $2
69AND deleted_at IS NULL;
70",
71        course_id,
72        course_instance_id,
73    )
74    .fetch_all(conn)
75    .await?;
76    Ok(student_countries)
77}
78
79pub async fn get_selected_country_by_user_id(
80    conn: &mut PgConnection,
81    user_id: Uuid,
82    course_instance_id: Uuid,
83) -> ModelResult<StudentCountry> {
84    let country = sqlx::query_as!(
85        StudentCountry,
86        "
87SELECT *
88FROM student_countries
89WHERE user_id = $1
90AND course_instance_id = $2
91AND deleted_at IS NULL;
92",
93        user_id,
94        course_instance_id,
95    )
96    .fetch_one(conn)
97    .await?;
98    Ok(country)
99}