playlists

This commit is contained in:
JMARyA 2024-08-11 21:56:55 +02:00
parent 428aa6e066
commit 82c330cc13
Signed by: jmarya
GPG key ID: 901B2ADDF27C2263
4 changed files with 112 additions and 18 deletions

View file

@ -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<_>>()
})
}
}
}