use futures_util::stream::BoxStream;
use sqlx::{FromRow, SqliteExecutor};
use crate::TrackId;
crate::db_id!(PreparelistEntityId);
#[derive(Debug, Clone, FromRow)]
#[sqlx(rename_all = "camelCase")]
pub struct PreparelistEntity {
pub id: PreparelistEntityId,
pub track_id: TrackId,
pub track_number: i64,
}
impl PreparelistEntity {
pub async fn is_available<'a>(executor: impl SqliteExecutor<'a> + 'a) -> sqlx::Result<bool> {
let (exists,) = sqlx::query_as(
r"SELECT EXISTS(SELECT 1 FROM sqlite_master WHERE type='table' AND name='PreparelistEntity')",
)
.fetch_one(executor)
.await?;
Ok(exists)
}
#[must_use]
pub fn fetch_all<'a>(
executor: impl SqliteExecutor<'a> + 'a,
) -> BoxStream<'a, sqlx::Result<Self>> {
sqlx::query_as(r"SELECT * FROM PreparelistEntity").fetch(executor)
}
pub async fn try_load(
executor: impl SqliteExecutor<'_>,
id: PreparelistEntityId,
) -> sqlx::Result<Option<Self>> {
sqlx::query_as(r"SELECT * FROM PreparelistEntity WHERE id=?1")
.bind(id)
.fetch_optional(executor)
.await
}
}