From bb88646e55dcf22f11c4d489a0ca6805165a7fc5 Mon Sep 17 00:00:00 2001 From: Emmanuel Luis Date: Tue, 6 May 2025 11:32:20 -0500 Subject: [PATCH 1/7] Implemented Media Class --- classes/Media.js | 14 ++++++++++++++ main.js | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/classes/Media.js b/classes/Media.js index d4d718b..a8d5c76 100644 --- a/classes/Media.js +++ b/classes/Media.js @@ -1,4 +1,18 @@ // create your Media class: +class Media { + static totalMediaCount = 0; + constructor(title, year, genre) { + this.title = title; + this.year = year; + this.genre = genre; + ++Media.totalMediaCount; + } + + summary() { + return `Title: ${this.title}, Year: ${this.year}, Genre: ${this.genre}`; + } +} + // uncomment below to export it: module.exports = Media; diff --git a/main.js b/main.js index 102baa9..55e6911 100644 --- a/main.js +++ b/main.js @@ -1 +1 @@ -// Import classes here to console.log and debug +const Media = require("./classes/Media"); From efb474d20ebab939f701394ee9e1f4e00d18829e Mon Sep 17 00:00:00 2001 From: LaneLR Date: Tue, 6 May 2025 11:46:02 -0500 Subject: [PATCH 2/7] added Book.js class --- classes/Book.js | 18 +++++++++++++++++- main.js | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/classes/Book.js b/classes/Book.js index ee69d54..47b92d5 100644 --- a/classes/Book.js +++ b/classes/Book.js @@ -1,6 +1,22 @@ // import the Media class: +const Media = require("./Media") -// create your Book class: +class Book extends Media { + constructor(title, year, genre, author, numPages, rating) { + super(title, year, genre); + this.author = author; + this.numPages = numPages; + this.rating = rating; + } + + summary() { + return `Title: ${this.title}, Author: ${this.author}, Year: ${this.year}, Page Count: ${this.numPages}, Genre: ${this.genre}, Rating: ${this.rating}` + } + + static highestRating(arr) { + return arr.sort((a , b) => b.rating - a.rating)[0] + } +} // don't change below module.exports = Book; diff --git a/main.js b/main.js index 55e6911..db6a659 100644 --- a/main.js +++ b/main.js @@ -1 +1,2 @@ const Media = require("./classes/Media"); +const Book = require("./classes/Book"); \ No newline at end of file From 45236b8fe42dc34aa1d4b36e1c11ce9145e367fe Mon Sep 17 00:00:00 2001 From: Joshua Benavides Date: Tue, 6 May 2025 12:14:31 -0500 Subject: [PATCH 3/7] Movie section of the test --- classes/Movie.js | 16 +++++++++++++++- main.js | 3 ++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/classes/Movie.js b/classes/Movie.js index 484e7a3..015bd1b 100644 --- a/classes/Movie.js +++ b/classes/Movie.js @@ -1,6 +1,20 @@ // import the Media class: - +const Media = require("./Media") // create your Movie class: +class Movie extends Media{ + constructor(title, year, genre, director, duration, rating){ + super(title, year, genre) + this.director = director; + this.rating = rating; + this.duration = duration + } + summary(){ + return `Title: ${this.title}, Director: ${this.director}, Year: ${this.year}, Genre: ${this.genre}, Rating: ${this.rating}` + } + static longestMovie(arr){ + return arr.reduce((max,current)=> (current.duration > max.duration ? current:max)) + } +} // don't change below module.exports = Movie; \ No newline at end of file diff --git a/main.js b/main.js index db6a659..6e66ce9 100644 --- a/main.js +++ b/main.js @@ -1,2 +1,3 @@ const Media = require("./classes/Media"); -const Book = require("./classes/Book"); \ No newline at end of file +const Book = require("./classes/Book"); +const Movie = require("./classes/Movie"); \ No newline at end of file From fff7022f637300ed8a1784b544b8cde8d6b31735 Mon Sep 17 00:00:00 2001 From: Emmanuel Luis Date: Tue, 6 May 2025 12:27:18 -0500 Subject: [PATCH 4/7] Added Music Class --- classes/Music.js | 24 +++++++++++++++++++++++- main.js | 3 ++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/classes/Music.js b/classes/Music.js index b97fe18..6664aad 100644 --- a/classes/Music.js +++ b/classes/Music.js @@ -1,6 +1,28 @@ -// import the Media class: +const Media = require("./Media"); // create your Music class: +class Music extends Media { + constructor(title, year, genre, artist, length) { + super(title, year, genre); + this.artist = artist; + this.length = length; + } + + summary() { + return `Title: ${this.title}, Artist: ${this.artist}, Year: ${this.year}, Genre: ${this.genre}, Length: ${this.length} seconds`; + } + + static shortestAlbum(arr) { + let shortestAlbum = new Music(); + shortestAlbum.length = 10000000; + for (let i = 0; i < arr.length; ++i) { + if (arr[i].length < shortestAlbum.length) shortestAlbum = arr[i]; + } + + return shortestAlbum; + } +} + // don't change below module.exports = Music; diff --git a/main.js b/main.js index 6e66ce9..ebedbf1 100644 --- a/main.js +++ b/main.js @@ -1,3 +1,4 @@ const Media = require("./classes/Media"); const Book = require("./classes/Book"); -const Movie = require("./classes/Movie"); \ No newline at end of file +const Movie = require("./classes/Movie"); +const Music = require("./classes/Music"); \ No newline at end of file From 2a1bc885252c12bd2c06af156e5329342093f1c1 Mon Sep 17 00:00:00 2001 From: Joshua Benavides Date: Tue, 6 May 2025 13:43:39 -0500 Subject: [PATCH 5/7] did first step of stretch --- classes/Music.js | 1 + classes/Podcast.js | 16 ++++++++++++++++ main.js | 4 +++- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 classes/Podcast.js diff --git a/classes/Music.js b/classes/Music.js index 6664aad..2f5dc4a 100644 --- a/classes/Music.js +++ b/classes/Music.js @@ -24,5 +24,6 @@ class Music extends Media { } } + // don't change below module.exports = Music; diff --git a/classes/Podcast.js b/classes/Podcast.js new file mode 100644 index 0000000..f3af6fb --- /dev/null +++ b/classes/Podcast.js @@ -0,0 +1,16 @@ +const Music = require("./Music"); + +class Podcast extends Music{ + constructor(title, year, genre, artist, length, host,epsiodeName, episodeNumber, guests) { + super(title, year, genre, artist, length); + this.host = host; + this.epsiodeName = epsiodeName; + this.episodeNumber = episodeNumber; + this.guests = guests + } + listen(){ + return `${this.title} - Episode: ${this.epsiodeName}. Hosted by ${this.host} and featuring guests ${this.guests}. Length: ${this.length} seconds.` + } +} + +module.exports = Podcast; \ No newline at end of file diff --git a/main.js b/main.js index ebedbf1..a5a2fe3 100644 --- a/main.js +++ b/main.js @@ -1,4 +1,6 @@ const Media = require("./classes/Media"); const Book = require("./classes/Book"); const Movie = require("./classes/Movie"); -const Music = require("./classes/Music"); \ No newline at end of file +const Music = require("./classes/Music"); +const Podcast = require("./classes/Podcast"); + From 4a9e73ef5946378e3f9ed3b9c3812d1261f1c479 Mon Sep 17 00:00:00 2001 From: Emmanuel Luis Date: Tue, 6 May 2025 13:55:10 -0500 Subject: [PATCH 6/7] Added calculate average for Movie/Book --- classes/Book.js | 7 +++++++ classes/Movie.js | 5 +++++ classes/Music.js | 1 + main.js | 30 ++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+) diff --git a/classes/Book.js b/classes/Book.js index 47b92d5..6e3feb9 100644 --- a/classes/Book.js +++ b/classes/Book.js @@ -16,6 +16,13 @@ class Book extends Media { static highestRating(arr) { return arr.sort((a , b) => b.rating - a.rating)[0] } + + static calculateAverageRating(arr) { + + const arr_ratings = arr.map((book) => book.rating); + return (arr_ratings.reduce((acc, rating) => acc + rating), 0) / arr_ratings.length; + + } } // don't change below diff --git a/classes/Movie.js b/classes/Movie.js index 015bd1b..45e580a 100644 --- a/classes/Movie.js +++ b/classes/Movie.js @@ -15,6 +15,11 @@ class Movie extends Media{ static longestMovie(arr){ return arr.reduce((max,current)=> (current.duration > max.duration ? current:max)) } + + static calculateAverageRating(arr) { + + return arr.reduce((acc, movie) => acc + movie.rating, 0) / arr.length; + } } // don't change below module.exports = Movie; \ No newline at end of file diff --git a/classes/Music.js b/classes/Music.js index 2f5dc4a..90469a5 100644 --- a/classes/Music.js +++ b/classes/Music.js @@ -22,6 +22,7 @@ class Music extends Media { return shortestAlbum; } + } diff --git a/main.js b/main.js index a5a2fe3..2eee401 100644 --- a/main.js +++ b/main.js @@ -4,3 +4,33 @@ const Movie = require("./classes/Movie"); const Music = require("./classes/Music"); const Podcast = require("./classes/Podcast"); +const movie1 = new Movie( + 'Inception', + 2010, + 'Sci-Fi', + 'Christopher Nolan', + 148, + 10 + ) + const movie2 = new Movie( + 'Inception', + 2010, + 'Sci-Fi', + 'Christopher Nolan', + 148, + 10 + ) + const movie3 = new Movie( + 'Inception', + 2010, + 'Sci-Fi', + 'Christopher Nolan', + 148, + 50 + ) + + let arr = [movie1, movie2, movie3] + +console.log(Movie.calculateAverageRating(arr)) + + From 3f4f66057c1a71c3805fd08a1037d4b648175663 Mon Sep 17 00:00:00 2001 From: LaneLR Date: Tue, 6 May 2025 14:06:26 -0500 Subject: [PATCH 7/7] added ALL_MEDIA to Media --- classes/Media.js | 4 ++++ main.js | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/classes/Media.js b/classes/Media.js index a8d5c76..d65283f 100644 --- a/classes/Media.js +++ b/classes/Media.js @@ -1,12 +1,16 @@ // create your Media class: +const { ALL_MEDIA } = require("./Media"); + class Media { + static ALL_MEDIA = []; static totalMediaCount = 0; constructor(title, year, genre) { this.title = title; this.year = year; this.genre = genre; ++Media.totalMediaCount; + Media.ALL_MEDIA.push(this); } summary() { diff --git a/main.js b/main.js index 2eee401..142bcae 100644 --- a/main.js +++ b/main.js @@ -29,8 +29,7 @@ const movie1 = new Movie( 50 ) - let arr = [movie1, movie2, movie3] - -console.log(Movie.calculateAverageRating(arr)) +const music1 = new Music('Lemonade', 2016, 'R&B', 'Beyonce', 3949) +console.log(Media.ALL_MEDIA)