playlists
This commit is contained in:
parent
428aa6e066
commit
82c330cc13
4 changed files with 112 additions and 18 deletions
|
@ -1,11 +1,14 @@
|
|||
use mongod::{
|
||||
assert_reference_of,
|
||||
derive::{Model, Referencable},
|
||||
Referencable, Reference, Validate,
|
||||
reference_of, Model, Referencable, Reference, Validate,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{library::{track::Track, user::User}, route::ToAPI};
|
||||
use crate::{
|
||||
library::{track::Track, user::User},
|
||||
route::ToAPI,
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Model, Referencable)]
|
||||
pub struct Playlist {
|
||||
|
@ -16,6 +19,29 @@ pub struct Playlist {
|
|||
pub tracks: Vec<Reference>,
|
||||
}
|
||||
|
||||
impl Playlist {
|
||||
pub async fn create(
|
||||
owner: User,
|
||||
title: &str,
|
||||
visibility: Visibility,
|
||||
tracks: &[String],
|
||||
) -> Option<Self> {
|
||||
let mut tracks_ref = vec![];
|
||||
|
||||
for track in tracks {
|
||||
tracks_ref.push(reference_of!(Track, track)?);
|
||||
}
|
||||
|
||||
Some(Self {
|
||||
_id: uuid::Uuid::new_v4().to_string(),
|
||||
owner: owner.reference(),
|
||||
title: title.to_string(),
|
||||
visibility,
|
||||
tracks: tracks_ref,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
|
||||
pub enum Visibility {
|
||||
Private,
|
||||
|
@ -43,4 +69,4 @@ impl ToAPI for Playlist {
|
|||
"tracks": self.tracks.iter().map(|x| x.id()).collect::<Vec<_>>()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue