From 94e26f8080bcad00a31b3e6ed7e7a26ac2c3a5fd Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Sat, 10 Feb 2024 12:21:28 -0800 Subject: [PATCH] use a transaction for committing invites to db --- src/bin/mkinvites.rs | 5 ++++- src/signup/mod.rs | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/bin/mkinvites.rs b/src/bin/mkinvites.rs index 64518c3..8fa01ef 100644 --- a/src/bin/mkinvites.rs +++ b/src/bin/mkinvites.rs @@ -3,6 +3,7 @@ use std::time::Duration; use clap::Parser; use julid::Julid; use parse_duration::parse; +use serde::Serialize; use sqlx::SqlitePool; use what2watch::{conf::Config, get_db_pool, Invitation, User}; @@ -50,7 +51,9 @@ fn main() { let invites = rt.block_on(async { ensure_omega(&pool).await; - generate_invites(quest, num, &pool).await + let invites = generate_invites(quest, num, &pool).await; + pool.close().await; + invites }); for invite in invites { println!("{base_url}/signup/{invite}"); diff --git a/src/signup/mod.rs b/src/signup/mod.rs index 255ba74..72d5264 100644 --- a/src/signup/mod.rs +++ b/src/signup/mod.rs @@ -42,13 +42,14 @@ impl Default for Invitation { impl Invitation { pub async fn commit(&self, db: &SqlitePool) -> Result { - sqlx::query_scalar( + let mut tx = db.begin().await.unwrap(); + let id = sqlx::query_scalar( "insert into invites (owner, expires_at, remaining) values (?, ?, ?) returning id", ) .bind(self.owner) .bind(self.expires_at) .bind(self.remaining) - .fetch_optional(db) + .fetch_optional(&mut *tx) .await .map_err(|e| { tracing::debug!("Got error creating invite: {e}"); @@ -64,7 +65,9 @@ impl Invitation { CreateInviteErrorKind::Unknown } })? - .ok_or(CreateInviteErrorKind::Unknown.into()) + .ok_or(CreateInviteErrorKind::Unknown.into()); + tx.commit().await.unwrap(); + id } pub fn new(owner: Julid) -> Self {