Trait SaveRepositoryTransaction

Source
pub trait SaveRepositoryTransaction<M>: SaveRepository<M> + TransactionRepository<M>
where M: Model + Send + Sync,
{ // Provided method fn save_in_transaction<'a>( &'a self, model: M, ) -> impl Future<Output = Result<M, Error>> + Send + 'a where M: 'a { ... } }
Expand description

Extension trait for Save operations with transactions.

This trait provides convenience methods for using transactions with repositories that implement SaveRepository. It’s automatically implemented for any type that implements both SaveRepository<M> and TransactionRepository<M>.

Provided Methods§

Source

fn save_in_transaction<'a>( &'a self, model: M, ) -> impl Future<Output = Result<M, Error>> + Send + 'a
where M: 'a,

Saves a model in a transactions, ensuring atomicity.

This method:

  1. Creates a transactions using with_transaction
  2. Calls save_with_executor with the transactions
  3. Returns the model on successful save
§Parameters
  • model: The model to save
§Returns

A future that resolves to:

  • Ok(M): The saved model on success
  • Err(crate::Error): The error if saving failed
§Example
let saved_model = repo.save_in_transaction(model).await?;
Examples found in repository?
examples/basic_repo.rs (line 200)
178async fn main() {
179    install_default_drivers();
180
181    initialize_db_pool(
182        PoolOptions::new()
183            .max_connections(21)
184            .min_connections(5)
185            .idle_timeout(Duration::from_secs(60 * 10))
186            .max_lifetime(Duration::from_secs(60 * 60 * 24))
187            .acquire_timeout(Duration::from_secs(20))
188            .connect(&DATABASE_URL)
189            .await
190            .expect("Failed to connect to database"),
191    );
192
193    let user = User {
194        id: 1,
195        name: String::new(),
196    };
197
198    USER_REPO.save_ref(&user).await.unwrap();
199
200    USER_REPO.save_in_transaction(user.clone()).await.unwrap();
201
202    USER_REPO
203        .save_with_context(user.clone(), UserContext::System)
204        .await
205        .unwrap();
206
207    USER_REPO.with_transaction(action).await.unwrap();
208
209    USER_REPO
210        .delete_by_values_in_transaction("id", [1, 2, 3, 11, 22])
211        .await
212        .unwrap();
213
214    USER_REPO
215        .get_one_by_filter(UserFilter::new("name").id(1))
216        .await
217        .unwrap();
218}

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§