backend/model/entity/
base_layer_images_impl.rs

1//! Contains the implementation of [`BaseLayerImages`].
2
3use diesel::pg::Pg;
4use diesel::{debug_query, ExpressionMethods, QueryDsl, QueryResult};
5use diesel_async::{AsyncPgConnection, RunQueryDsl};
6use log::debug;
7use uuid::Uuid;
8
9use crate::{
10    model::{
11        dto::base_layer_images::{BaseLayerImageDto, UpdateBaseLayerImageDto},
12        entity::base_layer_images::BaseLayerImages,
13    },
14    schema::base_layer_images::{self, all_columns},
15};
16
17impl BaseLayerImages {
18    /// Get all `BaseLayerImages` for the layer.
19    ///
20    /// # Errors
21    /// * Unknown, diesel doesn't say why it might error.
22    pub async fn find(
23        conn: &mut AsyncPgConnection,
24        layer_id: Uuid,
25    ) -> QueryResult<Vec<BaseLayerImageDto>> {
26        let query = base_layer_images::table
27            .select(all_columns)
28            .filter(base_layer_images::layer_id.eq(layer_id));
29
30        debug!("{}", debug_query::<Pg, _>(&query));
31        Ok(query
32            .load::<Self>(conn)
33            .await?
34            .into_iter()
35            .map(Into::into)
36            .collect())
37    }
38
39    /// Create a new `BaseLayerImages` in the database.
40    ///
41    /// # Errors
42    /// * If the `layer_id` references a layer that is not of type `base`.
43    /// * Unknown, diesel doesn't say why it might error.
44    pub async fn create(
45        dto: BaseLayerImageDto,
46        conn: &mut AsyncPgConnection,
47    ) -> QueryResult<BaseLayerImageDto> {
48        let insert = Self::from(dto);
49        let query = diesel::insert_into(base_layer_images::table).values(&insert);
50        debug!("{}", debug_query::<Pg, _>(&query));
51        query.get_result::<Self>(conn).await.map(Into::into)
52    }
53
54    /// Update a `BaseLayerImages` in the database.
55    ///
56    /// # Errors
57    /// * Unknown, diesel doesn't say why it might error.
58    pub async fn update(
59        id: Uuid,
60        dto: UpdateBaseLayerImageDto,
61        conn: &mut AsyncPgConnection,
62    ) -> QueryResult<BaseLayerImageDto> {
63        let update = Self::from((id, dto));
64        let query = diesel::update(base_layer_images::table.find(id)).set(&update);
65        debug!("{}", debug_query::<Pg, _>(&query));
66        query.get_result::<Self>(conn).await.map(Into::into)
67    }
68
69    /// Delete the `BaseLayerImages` from the database.
70    ///
71    /// # Errors
72    /// * Unknown, diesel doesn't say why it might error.
73    pub async fn delete_by_id(id: Uuid, conn: &mut AsyncPgConnection) -> QueryResult<usize> {
74        let query = diesel::delete(base_layer_images::table.find(id));
75        debug!("{}", debug_query::<Pg, _>(&query));
76        query.execute(conn).await
77    }
78}