fix warning while persisting tracks
All checks were successful
tests / fmt (push) Successful in 36s
tests / build (push) Successful in 2m3s
tests / test (push) Successful in 55s
tests / clippy (push) Successful in 41s
tests / pre-commit (push) Successful in 2m40s
deploy / release-image (push) Successful in 7m2s

This commit is contained in:
2024-08-09 11:18:38 +02:00
parent f7dca8ff65
commit 440201e153
2 changed files with 21 additions and 34 deletions

View File

@@ -103,14 +103,14 @@ async fn persistence(
db::track::insert_guild(&state.pool, db::track::Guild::new(guild_id.to_string())) db::track::insert_guild(&state.pool, db::track::Guild::new(guild_id.to_string()))
.await .await
.expect("failed to insert guild: {e}"); .context("failed to insert guild")?;
db::track::insert_user( db::track::insert_user(
&state.pool, &state.pool,
db::track::User::new(user_id.to_string(), author_name, author_global_name), db::track::User::new(user_id.to_string(), author_name, author_global_name),
) )
.await .await
.expect("failed to insert user: {e}"); .context("failed to insert user")?;
let track_id = db::track::insert_track( let track_id = db::track::insert_track(
&state.pool, &state.pool,
@@ -123,13 +123,14 @@ async fn persistence(
), ),
) )
.await .await
.context("failed to insert track: {e}")?; .context("failed to insert track")?;
db::track::insert_query( db::track::insert_query(
&state.pool, &state.pool,
db::track::Query::new(user_id.to_string(), guild_id.to_string(), track_id), db::track::Query::new(user_id.to_string(), guild_id.to_string(), track_id),
) )
.await .await
.context("failed to insert track: {e}")?; .context("failed to insert query")?;
Ok(()) Ok(())
} }

View File

@@ -38,40 +38,26 @@ pub(crate) async fn insert_track(
) -> Result<i64, sqlx::Error> { ) -> Result<i64, sqlx::Error> {
let query = r#" let query = r#"
INSERT INTO tracks (url, title, channel, duration, thumbnail, updated) INSERT INTO tracks (url, title, channel, duration, thumbnail, updated)
VALUES ($1, $2, $3, $4, $5, $6) VALUES (?, ?, ?, ?, ?, ?)
ON CONFLICT (url) DO UPDATE SET ON CONFLICT (url) DO UPDATE SET
title = excluded.title, title = EXCLUDED.title,
channel = excluded.channel, channel = EXCLUDED.channel,
duration = excluded.duration, duration = EXCLUDED.duration,
thumbnail = excluded.thumbnail, thumbnail = EXCLUDED.thumbnail,
updated = excluded.updated updated = EXCLUDED.updated
RETURNING id
"#; "#;
let res = sqlx::query(query) let id = sqlx::query_scalar(query)
.bind(&track.url) .bind(&track.url)
.bind(track.title) .bind(track.title)
.bind(track.channel) .bind(track.channel)
.bind(track.duration) .bind(track.duration)
.bind(track.thumbnail) .bind(track.thumbnail)
.bind(track.updated) .bind(track.updated)
.execute(pool)
.await?;
let id = res.last_insert_rowid();
// the track id is 0 if we only updated a row
if id == 0 {
let track: Track = sqlx::query_as(
r#"
SELECT id FROM tracks
WHERE url = $1
"#,
)
.bind(track.url)
.fetch_one(pool) .fetch_one(pool)
.await?; .await?;
return Ok(track.id);
}
Ok(id) Ok(id)
} }
@@ -97,11 +83,11 @@ impl User {
pub(crate) async fn insert_user(pool: &sqlx::SqlitePool, user: User) -> Result<(), sqlx::Error> { pub(crate) async fn insert_user(pool: &sqlx::SqlitePool, user: User) -> Result<(), sqlx::Error> {
let query = r#" let query = r#"
INSERT INTO users (id, name, global_name, updated) INSERT INTO users (id, name, global_name, updated)
VALUES ($1, $2, $3, $4) VALUES (?, ?, ?, ?)
ON CONFLICT (id) DO UPDATE SET ON CONFLICT (id) DO UPDATE SET
name = excluded.name, name = EXCLUDED.name,
global_name = excluded.global_name, global_name = EXCLUDED.global_name,
updated = excluded.updated updated = EXCLUDED.updated
"#; "#;
sqlx::query(query) sqlx::query(query)
.bind(user.id) .bind(user.id)
@@ -138,7 +124,7 @@ impl Query {
pub(crate) async fn insert_query(pool: &sqlx::SqlitePool, q: Query) -> Result<i64, sqlx::Error> { pub(crate) async fn insert_query(pool: &sqlx::SqlitePool, q: Query) -> Result<i64, sqlx::Error> {
let query = r#" let query = r#"
INSERT INTO queries (user_id, guild_id, track_id, updated) INSERT INTO queries (user_id, guild_id, track_id, updated)
VALUES ($1, $2, $3, $4) VALUES (?, ?, ?, ?)
"#; "#;
let res = sqlx::query(query) let res = sqlx::query(query)
.bind(q.user_id) .bind(q.user_id)
@@ -168,9 +154,9 @@ impl Guild {
pub(crate) async fn insert_guild(pool: &sqlx::SqlitePool, guild: Guild) -> Result<(), sqlx::Error> { pub(crate) async fn insert_guild(pool: &sqlx::SqlitePool, guild: Guild) -> Result<(), sqlx::Error> {
let query = r#" let query = r#"
INSERT INTO guilds (id, updated) INSERT INTO guilds (id, updated)
VALUES ($1, $2) VALUES (?, ?)
ON CONFLICT (id) DO UPDATE SET ON CONFLICT (id) DO UPDATE SET
updated = excluded.updated updated = EXCLUDED.updated
"#; "#;
sqlx::query(query) sqlx::query(query)
.bind(guild.id) .bind(guild.id)