use common_utils::pii; use diesel::{associations::HasTable, ExpressionMethods}; pub mod sample_data; use crate::{ query::generics, schema::users::dsl as users_dsl, user::*, PgPooledConn, StorageResult, }; impl UserNew { 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: &pii::Email, ) -> StorageResult { generics::generic_find_one::<::Table, _, _>( conn, users_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, users_dsl::user_id.eq(user_id.to_owned()), ) .await } pub async fn update_by_user_id( conn: &PgPooledConn, user_id: &str, user_update: UserUpdate, ) -> StorageResult { generics::generic_update_with_unique_predicate_get_result::< ::Table, _, _, _, >( conn, users_dsl::user_id.eq(user_id.to_owned()), UserUpdateInternal::from(user_update), ) .await } pub async fn update_by_user_email( conn: &PgPooledConn, user_email: &pii::Email, user_update: UserUpdate, ) -> StorageResult { generics::generic_update_with_unique_predicate_get_result::< ::Table, _, _, _, >( conn, users_dsl::email.eq(user_email.to_owned()), UserUpdateInternal::from(user_update), ) .await } pub async fn delete_by_user_id(conn: &PgPooledConn, user_id: &str) -> StorageResult { generics::generic_delete::<::Table, _>( conn, users_dsl::user_id.eq(user_id.to_owned()), ) .await } pub async fn find_users_by_user_ids( conn: &PgPooledConn, user_ids: Vec, ) -> StorageResult> { generics::generic_filter::< ::Table, _, <::Table as diesel::Table>::PrimaryKey, _, >(conn, users_dsl::user_id.eq_any(user_ids), None, None, None) .await } }