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

@ -3,7 +3,7 @@ use std::time::Instant;
use chrono::NaiveTime;
use futures::executor::block_on;
use serde_derive::{Deserialize, Serialize};
use sqlx::pool::PoolConnection;
use sqlx::Transaction;
use sqlx::Sqlite;
use crate::db::{DbController, DbJunctionRelaySchedule, DbRelay, DbSchedule};
@ -32,23 +32,23 @@ impl FromDbModel for Relay {
type DbModelCache = DbController;
fn from_db_model(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
db_model: Self::DbModel,
) -> Result<Self, DatabaseError> {
let cache = block_on(db_model.get_controller(conn))?;
Self::from_db_model_cache(conn, db_model, cache)
let cache = block_on(db_model.get_controller(tx))?;
Self::from_db_model_cache(tx, db_model, cache)
}
fn from_db_model_cache(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
db_model: Self::DbModel,
cache: Self::DbModelCache,
) -> Result<Self, DatabaseError> {
let tags = block_on(db_model.get_tags(conn))?;
let tags = block_on(db_model.get_tags(tx))?;
let controller_id = cache.uid.clone();
let schedules = block_on(DbJunctionRelaySchedule::get_schedules(conn, &db_model))?;
let active_schedule = block_on(db_model.get_active_schedule(conn))?;
let schedules = block_on(DbJunctionRelaySchedule::get_schedules(tx, &db_model))?;
let active_schedule = block_on(db_model.get_active_schedule(tx))?;
let is_on = None;
@ -66,19 +66,19 @@ impl FromDbModel for Relay {
}
impl Relay {
pub fn reload(&mut self, conn: &mut PoolConnection<Sqlite>) -> Result<(), DatabaseError> {
self.r = block_on(self.r.reload(conn))?;
self.schedules = block_on(DbJunctionRelaySchedule::get_schedules(conn, &self.r))?;
self.reload_active_schedule(conn)?;
pub fn reload(&mut self, tx: &mut Transaction<'_, Sqlite>) -> Result<(), DatabaseError> {
self.r = block_on(self.r.reload(tx))?;
self.schedules = block_on(DbJunctionRelaySchedule::get_schedules(tx, &self.r))?;
self.reload_active_schedule(tx)?;
Ok(())
}
pub fn reload_active_schedule(
&mut self,
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
) -> Result<(), DatabaseError> {
self.active_schedule = block_on(self.r.get_active_schedule(conn))?;
self.active_schedule = block_on(self.r.get_active_schedule(tx))?;
Ok(())
}