UNPKG

cpt-waffle-lotide

Version:
143 lines (121 loc) 4.29 kB
interface trackInterface {id:string, name: string, artist: string, album: string}; interface playlistInterface {id:string, name:string, tracks: string[]}; interface musicInterface { tracks: Record<string, trackInterface>, playlists: Record<string, playlistInterface>, printPlaylists: undefined | (() => void), printTracks: undefined | (() => void), printPlaylist: undefined | ((playlistId:string) => void), addTrackToPlaylist: undefined | ((trackId:string, playlistId:string) => void), addTrack: undefined | ((name:string, artist:string, album:string) => void), addPlaylist: undefined | ((name:string) => void), } const library: musicInterface = { tracks: { t01: { id: "t01", name: "Code Monkey", artist: "Jonathan Coulton", album: "Thing a Week Three" }, t02: { id: "t02", name: "Model View Controller", artist: "James Dempsey", album: "WWDC 2003" }, t03: { id: "t03", name: "Four Thirty-Three", artist: "John Cage", album: "Woodstock 1952" } }, playlists: { p01: { id: "p01", name: "Coding Music", tracks: ["t01", "t02"] }, p02: { id: "p02", name: "Other Playlist", tracks: ["t03"] } }, printPlaylists: undefined, printTracks: undefined, printPlaylist: undefined, addTrackToPlaylist: undefined, addTrack: undefined, addPlaylist: undefined }; ///////////////////////////// // FUNCTIONS TO IMPLEMENT: ///////////////////////////// // prints a list of all playlists, in the form: // p01: Coding Music - 2 tracks // p02: Other Playlist - 1 tracks const printPlaylists = function(this: musicInterface):void { const { playlists } = this; const playlistsKeys:string[] = Object.keys(library.playlists); playlistsKeys.forEach((id:string) => { console.log(`${id}: ${playlists[id].name} - ${playlists[id].tracks.length} tracks`); }) } library.printPlaylists = printPlaylists; // library.printPlaylists(); // // prints a list of all tracks, using the following format: // // t01: Code Monkey by Jonathan Coulton (Thing a Week Three) // // t02: Model View Controller by James Dempsey (WWDC 2003) // // t03: Four Thirty-Three by John Cage (Woodstock 1952) const printTracks = function(this:musicInterface):void { const { tracks } = this; const tracksKeys:string[] = Object.keys(tracks); tracksKeys.forEach((item:string) => { const { id, name, artist}:trackInterface = library.tracks[item]; console.log(`${id}: ${name} by ${artist}`); }) } // library.printTracks = printTracks; // library.printTracks(); // // prints a list of tracks for a given playlist, using the following format: // // p01: Coding Music - 2 tracks // // t01: Code Monkey by Jonathan Coulton (Thing a Week Three) // // t02: Model View Controller by James Dempsey (WWDC 2003) const printPlaylist = function(this:musicInterface,playlistId:string):void { const { playlists } = this; console.log(`${playlistId}: ${playlists[playlistId].name} ${playlists[playlistId].tracks.length} - tracks`); } library.printPlaylist = printPlaylist // library.printPlaylist('p01'); // // adds an existing track to an existing playlist const addTrackToPlaylist = function(this:musicInterface,trackId:string, playlistId:string):void { library.playlists[playlistId].tracks.push(trackId); } library.addTrackToPlaylist = addTrackToPlaylist; // library.addTrackToPlaylist('t01', 'p02'); // console.log(library.playlists.p02); // // generates a unique id // // (already implemented: use this for addTrack and addPlaylist) const generateUid = function():string { return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); } // // adds a track to the library const addTrack = function(this:musicInterface, name:string, artist:string, album:string):void { const id:string = `t${generateUid()}`; const track: trackInterface = { id, name, artist, album }; library.tracks[id] = track; } library.addTrack = addTrack; // // library.addTrack('Lose Yourself', 'Eminem', '8 Mile'); // // console.log(library); // // adds a playlist to the library const addPlaylist = function(name:string):void { const id:string = `p${generateUid()}`; const playlist:playlistInterface = {id, name, tracks: []}; library.playlists[id] = playlist; } library.addPlaylist = addPlaylist; // // addPlaylist('Lofi'); // // console.log(library);