use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
use std::sync::mpsc::Sender;
use crate::app::settings::get_db_connection;
use crate::entity::album::Model as AlbumModel;
use crate::entity::album_group::Model as AlbumGroupModel;
use crate::entity::track::{self, Entity as TrackEntity, Model as TrackModel};
use crate::error::CustomError;
pub struct MusicLibrary {
pub sender: Option<Sender<String>>,
}
impl MusicLibrary {
pub fn new(tx: Option<Sender<String>>) -> Self {
Self { sender: tx }
}
fn send(&self, message: String) {
if self.sender.is_some() {
let _ = self.sender.as_ref().unwrap().send(message);
}
}
pub async fn get_albums_groups_by_mb_id(
mb_id: String,
) -> Result<Vec<AlbumGroupModel>, CustomError> {
todo!()
}
pub async fn get_album_groups() -> Result<Vec<AlbumGroupModel>, CustomError> {
todo!()
}
pub async fn get_albums_by_group_mb_id(mb_id: String) -> Result<Vec<AlbumModel>, CustomError> {
todo!()
}
pub async fn get_albums_by_mb_id(mb_id: String) -> Result<Vec<AlbumModel>, CustomError> {
todo!()
}
pub async fn get_albums() -> Result<Vec<AlbumModel>, CustomError> {
todo!()
}
pub async fn get_tracks_by_album_group_mb_id(
mb_id: String,
) -> Result<Vec<TrackModel>, CustomError> {
let db = get_db_connection().await?;
let tracks = TrackEntity::find()
.filter(track::Column::MbReleaseGroupId.eq(mb_id))
.to_owned()
.all(&db)
.await?;
Ok(tracks)
}
pub async fn get_tracks_by_album_mb_id(mb_id: String) -> Result<Vec<TrackModel>, CustomError> {
let db = get_db_connection().await?;
let tracks = TrackEntity::find()
.filter(track::Column::MbReleaseId.eq(mb_id))
.to_owned()
.all(&db)
.await?;
Ok(tracks)
}
pub async fn get_tracks_by_mb_id(mb_id: String) -> Result<Vec<TrackModel>, CustomError> {
let db = get_db_connection().await?;
let tracks = TrackEntity::find()
.filter(track::Column::MbTrackId.eq(mb_id))
.to_owned()
.all(&db)
.await?;
Ok(tracks)
}
pub async fn get_tracks() -> Result<Vec<TrackModel>, CustomError> {
let db = get_db_connection().await?;
let tracks = TrackEntity::find().all(&db).await?;
Ok(tracks)
}
}