headless_lms_models/
url_redirections.rs

1use crate::prelude::*;
2
3pub async fn upsert(
4    conn: &mut PgConnection,
5    pkey_policy: PKeyPolicy<Uuid>,
6    destination_page_id: Uuid,
7    old_url_path: &str,
8    course_id: Uuid,
9) -> ModelResult<Uuid> {
10    let res = sqlx::query!(
11        "
12INSERT INTO url_redirections (id, destination_page_id, old_url_path, course_id)
13VALUES ($1, $2, $3, $4)
14ON CONFLICT (old_url_path, course_id, deleted_at) DO UPDATE SET
15    destination_page_id = $2
16RETURNING id
17        ",
18        pkey_policy.into_uuid(),
19        destination_page_id,
20        old_url_path,
21        course_id,
22    )
23    .fetch_one(conn)
24    .await?;
25    Ok(res.id)
26}