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

View file

@ -1,6 +1,6 @@
use std::ops::DerefMut;
use sqlx::pool::PoolConnection;
use sqlx::Transaction;
use sqlx::Sqlite;
use crate::db::{DbRelay, DbSchedule};
@ -16,7 +16,7 @@ pub struct DbJunctionRelaySchedule {
impl DbJunctionRelaySchedule {
pub async fn get(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
id: i64,
) -> Result<Option<DbJunctionRelaySchedule>, DatabaseError> {
sqlx::query_as!(
@ -24,13 +24,13 @@ impl DbJunctionRelaySchedule {
"SELECT * FROM junction_relay_schedule WHERE id = ?",
id
)
.fetch_optional(conn.deref_mut())
.fetch_optional(tx.deref_mut())
.await
.map_err(DatabaseError::from)
}
pub async fn get_junction_by_relay_and_weekday(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
relay: &DbRelay,
weekday: Weekday,
) -> Result<Option<DbJunctionRelaySchedule>, DatabaseError> {
@ -40,13 +40,13 @@ impl DbJunctionRelaySchedule {
relay.id,
weekday
)
.fetch_optional(conn.deref_mut())
.fetch_optional(tx.deref_mut())
.await
.map_err(DatabaseError::from)
}
pub async fn get_relays(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
schedule: &DbSchedule,
) -> Result<Vec<DbRelay>, DatabaseError> {
sqlx::query_as!(
@ -57,13 +57,13 @@ impl DbJunctionRelaySchedule {
ORDER BY junction_relay_schedule.weekday"#,
schedule.id
)
.fetch_all(conn.deref_mut())
.fetch_all(tx.deref_mut())
.await
.map_err(DatabaseError::from)
}
pub async fn get_schedule(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
relay: &DbRelay,
weekday: Weekday,
) -> Result<Option<DbSchedule>, DatabaseError> {
@ -75,13 +75,13 @@ impl DbJunctionRelaySchedule {
relay.id,
weekday
)
.fetch_optional(conn.deref_mut())
.fetch_optional(tx.deref_mut())
.await
.map_err(DatabaseError::from)
}
pub async fn get_schedules(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
relay: &DbRelay,
) -> Result<Vec<DbSchedule>, DatabaseError> {
sqlx::query_as!(
@ -92,18 +92,18 @@ impl DbJunctionRelaySchedule {
ORDER BY junction_relay_schedule.weekday"#,
relay.id
)
.fetch_all(conn.deref_mut())
.fetch_all(tx.deref_mut())
.await
.map_err(DatabaseError::from)
}
pub async fn set_schedule(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
relay: &DbRelay,
schedule: &DbSchedule,
weekday: Weekday,
) -> Result<DbJunctionRelaySchedule, DatabaseError> {
match Self::get_junction_by_relay_and_weekday(conn, relay, weekday).await? {
match Self::get_junction_by_relay_and_weekday(tx, relay, weekday).await? {
None => sqlx::query_as!(
DbJunctionRelaySchedule,
"INSERT INTO junction_relay_schedule (weekday, relay_id, schedule_id) VALUES (?, ?, ?) RETURNING *",
@ -111,7 +111,7 @@ impl DbJunctionRelaySchedule {
relay.id,
schedule.id
)
.fetch_optional(conn.deref_mut())
.fetch_optional(tx.deref_mut())
.await?
.ok_or(DatabaseError::InsertGetError),
@ -123,10 +123,10 @@ impl DbJunctionRelaySchedule {
schedule.id,
junction.id
)
.execute(conn.deref_mut())
.execute(tx.deref_mut())
.await?;
Self::get(conn, junction.id)
Self::get(tx, junction.id)
.await?
.ok_or(DatabaseError::UpdateGetError)
}
@ -134,12 +134,12 @@ impl DbJunctionRelaySchedule {
}
pub async fn set_schedules(
conn: &mut PoolConnection<Sqlite>,
tx: &mut Transaction<'_, Sqlite>,
relay: &DbRelay,
schedules: Vec<&DbSchedule>,
) -> Result<(), DatabaseError> {
for (weekday, schedule) in schedules.iter().enumerate() {
Self::set_schedule(conn, relay, schedule, weekday as Weekday).await?;
Self::set_schedule(tx, relay, schedule, weekday as Weekday).await?;
}
Ok(())
}