cleanup
All checks were successful
tests / build (push) Successful in 1m15s
tests / fmt (push) Successful in 1m44s
tests / clippy (push) Successful in 1m57s
tests / pre-commit (push) Successful in 2m8s
tests / test (push) Successful in 2m19s
deploy / release-image (push) Successful in 5m6s

This commit is contained in:
2024-06-30 11:16:12 +02:00
parent 3242f23f84
commit dfd0f9c8c8
4 changed files with 228 additions and 154 deletions

View File

@@ -36,10 +36,19 @@ pub(crate) async fn insert_track(
pool: &sqlx::SqlitePool,
track: Track,
) -> Result<i64, sqlx::Error> {
let query =
"INSERT OR REPLACE INTO tracks (url, title, channel, duration, thumbnail, updated) VALUES ($1, $2, $3, $4, $5, $6)";
let query = r#"
INSERT INTO tracks (url, title, channel, duration, thumbnail, updated)
VALUES ($1, $2, $3, $4, $5, $6)
ON CONFLICT (url) DO UPDATE SET
title = excluded.title,
channel = excluded.channel,
duration = excluded.duration,
thumbnail = excluded.thumbnail,
updated = excluded.updated
"#;
let res = sqlx::query(query)
.bind(track.url)
.bind(&track.url)
.bind(track.title)
.bind(track.channel)
.bind(track.duration)
@@ -47,7 +56,23 @@ pub(crate) async fn insert_track(
.bind(track.updated)
.execute(pool)
.await?;
Ok(res.last_insert_rowid())
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)
.await?;
return Ok(track.id);
}
Ok(id)
}
#[derive(Debug, FromRow)]
@@ -70,8 +95,14 @@ impl User {
}
pub(crate) async fn insert_user(pool: &sqlx::SqlitePool, user: User) -> Result<(), sqlx::Error> {
let query =
"INSERT OR REPLACE INTO users (id, name, global_name, updated) VALUES ($1, $2, $3, $4)";
let query = r#"
INSERT INTO users (id, name, global_name, updated)
VALUES ($1, $2, $3, $4)
ON CONFLICT (id) DO UPDATE SET
name = excluded.name,
global_name = excluded.global_name,
updated = excluded.updated
"#;
sqlx::query(query)
.bind(user.id)
.bind(user.name)
@@ -105,8 +136,10 @@ impl Query {
}
pub(crate) async fn insert_query(pool: &sqlx::SqlitePool, q: Query) -> Result<i64, sqlx::Error> {
let query =
"INSERT OR REPLACE INTO queries (user_id, guild_id, track_id, updated) VALUES ($1, $2, $3, $4)";
let query = r#"
INSERT INTO queries (user_id, guild_id, track_id, updated)
VALUES ($1, $2, $3, $4)
"#;
let res = sqlx::query(query)
.bind(q.user_id)
.bind(q.guild_id)
@@ -132,15 +165,17 @@ impl Guild {
}
}
pub(crate) async fn insert_guild(
pool: &sqlx::SqlitePool,
guild: Guild,
) -> Result<i64, sqlx::Error> {
let query = "INSERT OR REPLACE INTO guilds (id, updated) VALUES ($1, $2)";
let res = sqlx::query(query)
pub(crate) async fn insert_guild(pool: &sqlx::SqlitePool, guild: Guild) -> Result<(), sqlx::Error> {
let query = r#"
INSERT INTO guilds (id, updated)
VALUES ($1, $2)
ON CONFLICT (id) DO UPDATE SET
updated = excluded.updated
"#;
sqlx::query(query)
.bind(guild.id)
.bind(guild.updated)
.execute(pool)
.await?;
Ok(res.last_insert_rowid())
Ok(())
}