use crate::app::settings::get_db_connection;
use crate::entity::track::{Entity as TrackEntity, Model as TrackModel};
use crate::entity::{media, music, track};
use crate::error::CustomError;
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
pub async fn get_tracks() -> Result<Vec<TrackModel>, CustomError> {
let db = get_db_connection().await?;
let tracks = TrackEntity::find()
.all(&db)
.await
.expect("Failed to find all");
Ok(tracks)
}
pub async fn get_track_path_from_id(id: i32) -> Result<String, CustomError> {
let db = get_db_connection().await?;
let track = track::Entity::find_by_id(id)
.one(&db)
.await
.expect("Failed to find track record")
.unwrap();
Ok(get_path_from_track(track).await.unwrap())
}
pub async fn get_path_from_track(t: TrackModel) -> Result<String, CustomError> {
let db = get_db_connection().await?;
let music = music::Entity::find()
.filter(music::Column::Id.eq(t.music_id))
.to_owned()
.one(&db)
.await
.expect("Failed to find all");
let media = media::Entity::find()
.filter(media::Column::Id.eq(music.unwrap().media_id))
.to_owned()
.one(&db)
.await
.expect("Failed to find all");
Ok(media.unwrap().path)
}
pub async fn get_tracks_by_release_id(release_id: String) -> Result<Vec<TrackModel>, CustomError> {
let db = get_db_connection().await?;
let tracks = TrackEntity::find()
.filter(track::Column::MbReleaseId.eq(release_id))
.to_owned()
.all(&db)
.await
.expect("Failed to find all");
Ok(tracks)
}