Add sql transactions

This commit is contained in:
Tobias Reisinger 2024-05-02 13:30:47 +02:00
parent f539c47e3b
commit 19e2ea003b
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
17 changed files with 242 additions and 240 deletions
src/models

View file

@ -10,7 +10,7 @@ pub use macro_action::MacroAction;
pub use r#macro::Macro;
pub use relay::Relay;
pub use schedule::Schedule;
use sqlx::pool::PoolConnection;
use sqlx::Transaction;
use sqlx::Sqlite;
pub use tag::Tag;
@ -21,14 +21,14 @@ pub trait FromDbModel {
type DbModelCache: Clone;
fn from_db_model(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
db_model: Self::DbModel,
) -> Result<Self, DatabaseError>
where
Self: Sized;
fn from_db_model_cache(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
db_model: Self::DbModel,
cache: Self::DbModelCache,
) -> Result<Self, DatabaseError>
@ -37,15 +37,15 @@ pub trait FromDbModel {
}
fn convert_db_list_generic<T: FromDbModel>(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
db_models: Vec<T::DbModel>,
cache: Option<T::DbModelCache>,
) -> Result<Vec<T>, DatabaseError> {
let mut result: Vec<T> = Vec::new();
for db_model in db_models {
let new = match &cache {
Some(c) => T::from_db_model_cache(conn, db_model, c.clone()),
None => T::from_db_model(conn, db_model),
Some(c) => T::from_db_model_cache(tx, db_model, c.clone()),
None => T::from_db_model(tx, db_model),
}?;
result.push(new);
}
@ -53,16 +53,16 @@ fn convert_db_list_generic<T: FromDbModel>(
}
pub fn convert_db_list<T: FromDbModel>(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
db_models: Vec<T::DbModel>,
) -> Result<Vec<T>, DatabaseError> {
convert_db_list_generic(conn, db_models, None)
convert_db_list_generic(tx, db_models, None)
}
pub fn convert_db_list_cache<T: FromDbModel>(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
db_models: Vec<T::DbModel>,
cache: T::DbModelCache,
) -> Result<Vec<T>, DatabaseError> {
convert_db_list_generic(conn, db_models, Some(cache))
convert_db_list_generic(tx, db_models, Some(cache))
}