use diesel::{associations::HasTable, ExpressionMethods}; use error_stack::report; use router_env::tracing::{self, instrument}; pub mod sample_data; use crate::{ errors::{self}, query::generics, schema::users::dsl, user::*, PgPooledConn, StorageResult, }; impl UserNew { #[instrument(skip(conn))] pub async fn insert(self, conn: &PgPooledConn) -> StorageResult { generics::generic_insert(conn, self).await } } impl User { pub async fn find_by_user_email(conn: &PgPooledConn, user_email: &str) -> StorageResult { generics::generic_find_one::<::Table, _, _>( conn, dsl::email.eq(user_email.to_owned()), ) .await } pub async fn find_by_user_id(conn: &PgPooledConn, user_id: &str) -> StorageResult { generics::generic_find_one::<::Table, _, _>( conn, dsl::user_id.eq(user_id.to_owned()), ) .await } pub async fn update_by_user_id( conn: &PgPooledConn, user_id: &str, user: UserUpdate, ) -> StorageResult { generics::generic_update_with_results::<::Table, _, _, _>( conn, dsl::user_id.eq(user_id.to_owned()), UserUpdateInternal::from(user), ) .await? .first() .cloned() .ok_or_else(|| { report!(errors::DatabaseError::NotFound).attach_printable("Error while updating user") }) } pub async fn delete_by_user_id(conn: &PgPooledConn, user_id: &str) -> StorageResult { generics::generic_delete::<::Table, _>( conn, dsl::user_id.eq(user_id.to_owned()), ) .await } }