Added the playlist editor

This commit is contained in:
Connor Johnstone
2026-03-20 18:36:59 -04:00
parent f03f8f0362
commit 4fda9071c7

View File

@@ -103,3 +103,76 @@ pub async fn delete(db: &DatabaseConnection, id: i32) -> DbResult<()> {
Playlists::delete_by_id(id).exec(db).await?; Playlists::delete_by_id(id).exec(db).await?;
Ok(()) Ok(())
} }
pub async fn add_track(db: &DatabaseConnection, playlist_id: i32, track_id: i32) -> DbResult<()> {
// Get max position for this playlist
let max_pos = PlaylistTracks::find()
.filter(playlist_track::Column::PlaylistId.eq(playlist_id))
.order_by_desc(playlist_track::Column::Position)
.one(db)
.await?
.map(|pt| pt.position)
.unwrap_or(-1);
let pt = TrackActiveModel {
playlist_id: Set(playlist_id),
track_id: Set(track_id),
position: Set(max_pos + 1),
..Default::default()
};
pt.insert(db).await?;
Ok(())
}
pub async fn remove_track(
db: &DatabaseConnection,
playlist_id: i32,
track_id: i32,
) -> DbResult<()> {
// Delete the playlist_track row
PlaylistTracks::delete_many()
.filter(playlist_track::Column::PlaylistId.eq(playlist_id))
.filter(playlist_track::Column::TrackId.eq(track_id))
.exec(db)
.await?;
// Renumber remaining positions
let remaining = PlaylistTracks::find()
.filter(playlist_track::Column::PlaylistId.eq(playlist_id))
.order_by_asc(playlist_track::Column::Position)
.all(db)
.await?;
for (i, pt) in remaining.into_iter().enumerate() {
let mut active: TrackActiveModel = pt.into();
active.position = Set(i as i32);
active.update(db).await?;
}
Ok(())
}
pub async fn reorder_tracks(
db: &DatabaseConnection,
playlist_id: i32,
track_ids: Vec<i32>,
) -> DbResult<()> {
// Delete all playlist_tracks for this playlist
PlaylistTracks::delete_many()
.filter(playlist_track::Column::PlaylistId.eq(playlist_id))
.exec(db)
.await?;
// Re-insert with positions matching the vec order
for (pos, track_id) in track_ids.iter().enumerate() {
let pt = TrackActiveModel {
playlist_id: Set(playlist_id),
track_id: Set(*track_id),
position: Set(pos as i32),
..Default::default()
};
pt.insert(db).await?;
}
Ok(())
}