Cleanup db/tag namespace

This commit is contained in:
Tobias Reisinger 2023-11-21 16:46:12 +01:00
parent effd3f3b18
commit 80d1fa32a0
4 changed files with 71 additions and 69 deletions
src/db

View file

@ -1,3 +1,4 @@
use serde_derive::Serialize;
use std::ops::DerefMut;
use sqlx::pool::PoolConnection;
@ -7,59 +8,74 @@ use crate::db::errors::DatabaseError;
use crate::db::models::*;
use crate::db::schedules::Schedule;
pub async fn create_tag(
conn: &mut PoolConnection<Sqlite>,
new_tag: &str,
) -> Result<Tag, DatabaseError> {
sqlx::query_as!(
Tag,
"INSERT INTO tags (tag) VALUES (?) RETURNING *",
new_tag
)
.fetch_optional(conn.deref_mut())
.await?
.ok_or(DatabaseError::InsertGetError)
#[derive(Debug, Serialize, Clone)]
pub struct Tag {
pub id: i64,
pub tag: String,
}
pub async fn get_tag(
conn: &mut PoolConnection<Sqlite>,
target_tag: &str,
) -> Result<Tag, DatabaseError> {
sqlx::query_as!(Tag, "SELECT * FROM tags WHERE tag = ?", target_tag)
pub struct JunctionTag {
pub id: i64,
pub tag_id: i64,
pub relay_id: Option<i64>,
pub schedule_id: Option<i64>,
}
impl Tag {
pub async fn create(
conn: &mut PoolConnection<Sqlite>,
new_tag: &str,
) -> Result<Tag, DatabaseError> {
sqlx::query_as!(
Tag,
"INSERT INTO tags (tag) VALUES (?) RETURNING *",
new_tag
)
.fetch_optional(conn.deref_mut())
.await
.map(|t| t.ok_or(DatabaseError::NotFound))?
}
.await?
.ok_or(DatabaseError::InsertGetError)
}
#[allow(dead_code)]
pub async fn create_junction_tag_relay(
conn: &mut PoolConnection<Sqlite>,
target_tag: Tag,
target_relay: &Relay,
) -> Result<JunctionTag, DatabaseError> {
sqlx::query_as!(
JunctionTag,
"INSERT INTO junction_tag (tag_id, relay_id) VALUES (?, ?) RETURNING *",
target_tag.id,
target_relay.id
)
.fetch_optional(conn.deref_mut())
.await?
.ok_or(DatabaseError::InsertGetError)
}
pub async fn get(
conn: &mut PoolConnection<Sqlite>,
target_tag: &str,
) -> Result<Tag, DatabaseError> {
sqlx::query_as!(Tag, "SELECT * FROM tags WHERE tag = ?", target_tag)
.fetch_optional(conn.deref_mut())
.await
.map(|t| t.ok_or(DatabaseError::NotFound))?
}
pub async fn create_junction_tag_schedule(
conn: &mut PoolConnection<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(conn.deref_mut())
.await?
.ok_or(DatabaseError::InsertGetError)
#[allow(dead_code)]
pub async fn link_relay(
&self,
conn: &mut PoolConnection<Sqlite>,
target_relay: &Relay,
) -> Result<JunctionTag, DatabaseError> {
sqlx::query_as!(
JunctionTag,
"INSERT INTO junction_tag (tag_id, relay_id) VALUES (?, ?) RETURNING *",
self.id,
target_relay.id
)
.fetch_optional(conn.deref_mut())
.await?
.ok_or(DatabaseError::InsertGetError)
}
pub async fn link_schedule(
&self,
conn: &mut PoolConnection<Sqlite>,
target_schedule: &Schedule,
) -> Result<JunctionTag, DatabaseError> {
sqlx::query_as!(
JunctionTag,
"INSERT INTO junction_tag (tag_id, schedule_id) VALUES (?, ?) RETURNING *",
self.id,
target_schedule.id
)
.fetch_optional(conn.deref_mut())
.await?
.ok_or(DatabaseError::InsertGetError)
}
}