using Harmonia.Core.Models; namespace Harmonia.Core.Playlists; internal sealed record PlaylistDto { public string UID { get; init; } = Guid.NewGuid().ToString(); public string? Name { get; init; } public List Songs { get; init; } = []; public List GroupOptions { get; init; } = []; public List SortOptions { get; init; } = []; public bool IsLocked { get; init; } public static PlaylistDto FromPlaylist(Playlist playlist) { return new PlaylistDto { UID = playlist.UID, Name = playlist.Name, Songs = [.. playlist.Songs.Select(PlaylistSongDto.FromPlaylistSong)], GroupOptions = [.. playlist.GroupOptions], SortOptions = [.. playlist.SortOptions], IsLocked = playlist.IsLocked }; } public Playlist ToPlaylist() { return Playlist.Restore( UID, Name, Songs.Select(song => song.ToPlaylistSong()), GroupOptions, SortOptions, IsLocked); } } internal sealed record PlaylistSongDto { public string UID { get; init; } = Guid.NewGuid().ToString(); public required Song Song { get; init; } public static PlaylistSongDto FromPlaylistSong(PlaylistSong playlistSong) { return new PlaylistSongDto { UID = playlistSong.UID, Song = playlistSong.Song }; } public PlaylistSong ToPlaylistSong() { return new PlaylistSong(Song) { UID = UID }; } }