cpt-waffle-lotide
Version:
LoTide in Typescript
143 lines (121 loc) • 4.29 kB
text/typescript
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);