Skip to content

Commit 441b817

Browse files
committed
Code Refactor
1 parent 005e062 commit 441b817

File tree

4 files changed

+50
-32
lines changed

4 files changed

+50
-32
lines changed

controllers/albumController.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const getAlbum = async (req, res) => {
3030
const songs = await Promise.all(songPromises);
3131

3232
album.tracks = cleanUpSongs(songs, album);
33+
album.songs = album.tracks.length;
3334

3435
res.json(album);
3536
} catch (error) {
@@ -48,6 +49,7 @@ const getAllAlbums = async (req, res) => {
4849
const songs = await Promise.all(songPromises);
4950

5051
album.tracks = cleanUpSongs(songs, album);
52+
album.songs = album.tracks.length;
5153
}
5254

5355
return res.json(albums);
@@ -83,8 +85,7 @@ const deleteAlbum = async (req, res) => {
8385

8486
const newAlbum = async (req, res) => {
8587
try {
86-
const { title, artist, releaseYear, releaseDate, albumCover, user } =
87-
req.body;
88+
const { title, artist, releaseDate, albumCover, user } = req.body;
8889
if (!user || !isAdmin(user.username, user.password)) {
8990
return res.status(403).send("Forbidden");
9091
}

controllers/songController.js

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
const Song = require("../models/Song");
22
const Album = require("../models/Album");
3-
const { isAdmin } = require("../utils");
3+
const { isAdmin, getAlbumDetails } = require("../utils");
44

55
const getSong = async (req, res) => {
66
try {
77
const { name } = req.params;
8-
const song = await Song.findOne({ name })
8+
const song = await Song.findOne({ name: { $regex: name, $options: "i" } })
99
.select("-__v -_id") // Exclude unnecessary fields
1010
.lean();
1111

@@ -14,29 +14,19 @@ const getSong = async (req, res) => {
1414
}
1515

1616
// Get album details without the tracks property
17-
const album = await Album.findById(song.albumId)
18-
.select("-__v -_id") // Exclude unnecessary fields
19-
.lean();
17+
const albumDetails = await getAlbumDetails(song.albumId);
2018

21-
if (!album) {
19+
if (!albumDetails) {
2220
return res.status(404).json({ error: "Album not found" });
2321
}
2422

25-
const albumDetails = {
26-
title: album.title,
27-
albumCover: album.albumCover,
28-
artist: album.artist,
29-
releaseYear: album.releaseYear,
30-
releaseDate: album.realeaseDate,
31-
};
32-
3323
res.json({
3424
...song,
3525
album: albumDetails,
3626
});
3727
} catch (error) {
38-
console.error("Error fetching song:", error.message);
39-
res.status(500).json({ error: "Internal Server Error" });
28+
console.error("Error fetching songs");
29+
errorHandler(res, error);
4030
}
4131
};
4232

@@ -45,19 +35,22 @@ const getAllSongs = async (req, res) => {
4535
const songs = await Song.find().select("-__v -_id").lean();
4636

4737
for (const song of songs) {
48-
const album = await Album.findById(song.albumId)
49-
.select("-__v -_id")
50-
.lean();
38+
// Use getAlbumDetails to get album details from albumId
39+
const albumDetails = await getAlbumDetails(song.albumId);
5140

52-
if (album) {
53-
song.albumName = album.title;
41+
if (albumDetails) {
42+
song.albumName = albumDetails.albumName;
5443
delete song.albumId; // Remove the original albumId field
5544
}
5645
}
5746

5847
res.json(songs);
5948
} catch (error) {
60-
console.error("Error fetching songs:", error.message);
49+
console.error("Error fetching songs");
50+
errorHandler(res, error);
51+
}
52+
};
53+
6154
res.status(500).json({ error: "Internal Server Error" });
6255
}
6356
};
@@ -95,8 +88,8 @@ const newSong = async (req, res) => {
9588

9689
res.json(savedSongs);
9790
} catch (error) {
98-
console.error("Error creating songs and updating album:", error.message);
99-
res.status(500).json({ error: "Internal Server Error" });
91+
console.error("Error creating a song and updating an album");
92+
errorHandler(res, error);
10093
}
10194
};
10295

models/Album.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ const albumSchema = new mongoose.Schema({
1313
type: String,
1414
required: true,
1515
},
16-
releaseYear: {
17-
type: Number,
18-
required: true,
19-
},
20-
realeaseDate: {
16+
releaseDate: {
2117
type: Array,
2218
required: true,
2319
},

utils/index.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const Album = require("../models/Album");
12
const isAdmin = (usernameToCheck, passwordToCheck) => {
23
const USER = [
34
{
@@ -19,4 +20,31 @@ const isAdmin = (usernameToCheck, passwordToCheck) => {
1920
return false;
2021
};
2122

22-
module.exports = { isAdmin };
23+
const getAlbumName = async (albumId) => {
24+
try {
25+
const album = await Album.findById(albumId).select("title").lean();
26+
27+
return album ? album.title : null;
28+
} catch (error) {
29+
console.error("Error fetching album name:", error.message);
30+
return null;
31+
}
32+
};
33+
34+
const getAlbumDetails = async (albumId) => {
35+
try {
36+
const album = await Album.findById(albumId).select("-__v -_id").lean();
37+
return album
38+
? {
39+
albumName: album.title,
40+
albumCover: album.albumCover,
41+
artist: album.artist,
42+
releaseDate: album.releaseDate,
43+
}
44+
: null;
45+
} catch (error) {
46+
console.error("Error fetching album details:", error.message);
47+
return null;
48+
}
49+
};
50+
module.exports = { isAdmin, getAlbumName, getAlbumDetails };

0 commit comments

Comments
 (0)