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 {