Skip to main content

UserRepository

Trait UserRepository 

Source
pub trait UserRepository: Send + Sync {
Show 13 methods // Required methods fn create<'life0, 'life1, 'async_trait>( &'life0 self, user: &'life1 User, ) -> Pin<Box<dyn Future<Output = Result<User, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn find_by_id<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<User>, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn find_by_email<'life0, 'life1, 'async_trait>( &'life0 self, email: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<User>, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn find_all<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Vec<User>, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn find_page<'life0, 'async_trait>( &'life0 self, recherche: Option<String>, role: Option<String>, limit: i64, offset: i64, ) -> Pin<Box<dyn Future<Output = Result<Vec<User>, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn count_matching<'life0, 'async_trait>( &'life0 self, recherche: Option<String>, role: Option<String>, ) -> Pin<Box<dyn Future<Output = Result<i64, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn find_by_organization<'life0, 'async_trait>( &'life0 self, org_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Vec<User>, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn update<'life0, 'life1, 'async_trait>( &'life0 self, user: &'life1 User, ) -> Pin<Box<dyn Future<Output = Result<User, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn update_password<'life0, 'life1, 'async_trait>( &'life0 self, id: Uuid, password_hash: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<bool, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn activate<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<User>, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn deactivate<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<User>, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn delete<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<bool, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn count_by_organization<'life0, 'async_trait>( &'life0 self, org_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<i64, String>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait;
}

Required Methods§

Source

fn create<'life0, 'life1, 'async_trait>( &'life0 self, user: &'life1 User, ) -> Pin<Box<dyn Future<Output = Result<User, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn find_by_id<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<User>, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn find_by_email<'life0, 'life1, 'async_trait>( &'life0 self, email: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<User>, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn find_all<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Vec<User>, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn find_page<'life0, 'async_trait>( &'life0 self, recherche: Option<String>, role: Option<String>, limit: i64, offset: i64, ) -> Pin<Box<dyn Future<Output = Result<Vec<User>, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Une page d’utilisateurs, filtrée par recherche si elle est fournie.

find_all existe toujours, mais GET /users ne l’appelle plus : elle rendait la table entière — 2 399 187 octets en 667 ms pour 4 120 lignes, mesuré le 2026-09-18 sur la recette (#953). Le même écran après pagination de /organizations la veille rendait 6 190 octets en 18,8 ms.

Option<String> et non Option<&str> : mockall ne sait pas exprimer la durée de vie ici, et un port n’a pas à se tordre pour un détail de doublure. Le coût est une allocation par appel.

Source

fn count_matching<'life0, 'async_trait>( &'life0 self, recherche: Option<String>, role: Option<String>, ) -> Pin<Box<dyn Future<Output = Result<i64, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Le total correspondant au même filtre, pour que la pagination sache combien de pages annoncer.

Source

fn find_by_organization<'life0, 'async_trait>( &'life0 self, org_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Vec<User>, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn update<'life0, 'life1, 'async_trait>( &'life0 self, user: &'life1 User, ) -> Pin<Box<dyn Future<Output = Result<User, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn update_password<'life0, 'life1, 'async_trait>( &'life0 self, id: Uuid, password_hash: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<bool, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn activate<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<User>, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn deactivate<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<User>, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn delete<'life0, 'async_trait>( &'life0 self, id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<bool, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn count_by_organization<'life0, 'async_trait>( &'life0 self, org_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<i64, String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§