Migrate to sqlx

This commit is contained in:
Tobias Reisinger 2023-11-21 00:44:45 +01:00
parent bd44dc3183
commit f3d08aab80
19 changed files with 1488 additions and 588 deletions
src/db

View file

@ -1,63 +1,41 @@
use diesel::dsl::sql;
use diesel::prelude::*;
use sqlx::{Pool, Sqlite};
use crate::db::errors::DatabaseError;
use crate::db::models::*;
use crate::db::schema::junction_tag::dsl::junction_tag;
use crate::db::schema::tags::dsl::tags;
use crate::db::{get_connection, schema};
pub fn create_tag(new_tag: &str) -> Result<Tag, DatabaseError> {
let mut connection = get_connection();
let new_tag = NewTag { tag: new_tag };
diesel::insert_into(tags)
.values(&new_tag)
.execute(&mut connection)
.map_err(DatabaseError::InsertError)?;
let result = tags
.find(sql("last_insert_rowid()"))
.get_result::<Tag>(&mut connection)
.or(Err(DatabaseError::InsertGetError))?;
Ok(result)
pub async fn create_tag(pool: &Pool<Sqlite>, new_tag: &str) -> Result<Tag, DatabaseError> {
sqlx::query_as!(Tag, "INSERT INTO tags (tag) VALUES (?) RETURNING *", new_tag)
.fetch_optional(pool)
.await?
.ok_or(DatabaseError::InsertGetError)
}
pub fn get_tag(target_tag: &str) -> Result<Tag, DatabaseError> {
let mut connection = get_connection();
let result = tags
.filter(schema::tags::tag.eq(target_tag))
.first::<Tag>(&mut connection)
.or(Err(DatabaseError::NotFound))?;
Ok(result)
pub async fn get_tag(pool: &Pool<Sqlite>, target_tag: &str) -> Result<Tag, DatabaseError> {
sqlx::query_as!(Tag, "SELECT * FROM tags WHERE tag = ?", target_tag)
.fetch_optional(pool)
.await
.map(|t| t.ok_or(DatabaseError::NotFound))?
}
pub fn create_junction_tag(
#[allow(dead_code)]
pub async fn create_junction_tag_relay(
pool: &Pool<Sqlite>,
target_tag: Tag,
target_relay: Option<&Relay>,
target_schedule: Option<&Schedule>,
target_relay: &Relay,
) -> Result<JunctionTag, DatabaseError> {
let mut connection = get_connection();
let new_junction_tag = NewJunctionTag {
relay_id: target_relay.map(|r| r.id),
schedule_id: target_schedule.map(|s| s.id),
tag_id: target_tag.id,
};
diesel::insert_into(junction_tag)
.values(&new_junction_tag)
.execute(&mut connection)
.map_err(DatabaseError::InsertError)?;
let result = junction_tag
.find(sql("last_insert_rowid()"))
.get_result::<JunctionTag>(&mut connection)
.or(Err(DatabaseError::InsertGetError))?;
Ok(result)
sqlx::query_as!(JunctionTag, "INSERT INTO junction_tag (tag_id, relay_id) VALUES (?, ?) RETURNING *", target_tag.id, target_relay.id)
.fetch_optional(pool)
.await?
.ok_or(DatabaseError::InsertGetError)
}
pub async fn create_junction_tag_schedule(
pool: &Pool<Sqlite>,
target_tag: Tag,
target_schedule: &Schedule,
) -> Result<JunctionTag, DatabaseError> {
sqlx::query_as!(JunctionTag, "INSERT INTO junction_tag (tag_id, schedule_id) VALUES (?, ?) RETURNING *", target_tag.id, target_schedule.id)
.fetch_optional(pool)
.await?
.ok_or(DatabaseError::InsertGetError)
}