backend/model/entity/
guided_tours_impl.rs

1//! Contains the implementation of [`GuidedTours`].
2
3use diesel::{debug_query, pg::Pg, QueryDsl, QueryResult};
4use diesel_async::{AsyncPgConnection, RunQueryDsl};
5use log::debug;
6use uuid::Uuid;
7
8use crate::{
9    model::{
10        dto::{GuidedToursDto, UpdateGuidedToursDto},
11        entity::UpdateGuidedTours,
12    },
13    schema::guided_tours,
14};
15
16use super::GuidedTours;
17
18impl GuidedTours {
19    /// Setup Guided Tours status object for a new user.
20    ///
21    /// # Errors
22    /// * Unknown, diesel doesn't say why it might error.
23    pub async fn setup(user_id: Uuid, conn: &mut AsyncPgConnection) -> QueryResult<GuidedToursDto> {
24        let new_guided_tours = Self::from(user_id);
25        let query = diesel::insert_into(guided_tours::table).values(new_guided_tours);
26        debug!("{}", debug_query::<Pg, _>(&query));
27        query.get_result::<Self>(conn).await.map(Into::into)
28    }
29
30    /// Get Guided Tours status object for a user.
31    ///
32    /// # Errors
33    /// * Unknown, diesel doesn't say why it might error.
34    pub async fn find_by_user(
35        user_id: Uuid,
36        conn: &mut AsyncPgConnection,
37    ) -> QueryResult<GuidedToursDto> {
38        let query = guided_tours::table.find(user_id);
39        debug!("{}", debug_query::<Pg, _>(&query));
40        query.first::<Self>(conn).await.map(Into::into)
41    }
42
43    /// Update Guided Tours status object for a user.
44    ///
45    /// # Errors
46    /// * Unknown, diesel doesn't say why it might error.
47    pub async fn update(
48        status_update: UpdateGuidedToursDto,
49        user_id: Uuid,
50        conn: &mut AsyncPgConnection,
51    ) -> QueryResult<GuidedToursDto> {
52        let status_update = UpdateGuidedTours::from(status_update);
53        let query = diesel::update(guided_tours::table.find(user_id)).set(&status_update);
54        debug!("{}", debug_query::<Pg, _>(&query));
55        query.get_result::<Self>(conn).await.map(Into::into)
56    }
57}