Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions models/playlist.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const mongoose = require('mongoose');
const songSchema = require('../models/song').schema;
const userSchema = require('../models/user').schema;

const playlistSchema = new mongoose.Schema({
user: userSchema,
songs: [songSchema],
});


var Playlist = mongoose.model('Playlist',playlistSchema);

module.exports = Playlist;
16 changes: 16 additions & 0 deletions models/song.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const mongoose = require('mongoose');


const songSchema = new mongoose.Schema({
id: String,
title: String,
preview: String,
cover_big: String,
cover_xl: String,
artist: String,
});


var Song= mongoose.model('Song',songSchema);

module.exports = Song;
15 changes: 15 additions & 0 deletions models/user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const mongoose = require('mongoose');



const userSchema = new mongoose.Schema({
googleId: String,
firstName: String,
lastName: String,
profilePhoto: String,
});


var User = mongoose.model('User',userSchema);

module.exports = User;
43 changes: 43 additions & 0 deletions routes/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const express = require('express');
const router = express.Router();
const passport = require('passport');




router.get("/",function(req,res){

let user=null;
if (req.isAuthenticated()) {
user = req.user;
}
res.render("home",{ showNavbar: true, user: user});
});

router.get("/login",
passport.authenticate("google", { scope: ["profile"] })
);

router.get('/auth/google/musicbuzz',
passport.authenticate('google', { failureRedirect: "/login" }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect("/");
console.log("Successfully logged in");
});



router.use("/songs",require('./songs'));


router.use("/:userId",require('./user'));


router.use("/search", require('./search'));



router.use("/playlists", require('./playlist'));

module.exports = router ;
78 changes: 78 additions & 0 deletions routes/playlist.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
const express = require('express');
const router = express.Router();
const Song = require('../models/song');
const Playlist = require('../models/playlist');

router.get("/", function (req, res) {
if (req.isAuthenticated()) {
res.redirect("/" + req.user._id + "/playlists");
} else {
res.send("You need to be logged in to view or create your playlist");
}
});

router.post("/",function (req, res) {
if (!req.isAuthenticated()) {
res.redirect("/login");
} else {
const currentUser = req.user;
const songInfo = JSON.parse(req.body.songInfo);
console.log(songInfo);
Playlist.findOne({ user: currentUser }, function (err, foundPlaylist) {
if (err) {
console.log(err);
} else {
const songToAdd = new Song({
id: songInfo.id,
title: songInfo.title,
preview: songInfo.preview,
cover_big: songInfo.cover_big,
cover_xl: songInfo.cover_xl,
artist: songInfo.artist
});
if (!foundPlaylist) {
// Create a new Playlist
songs = [songToAdd];
const list = new Playlist({
user: currentUser,
songs: songs,
});
list.save(function (err) {
if (!err) {
res.redirect("/");
console.log("Successfully added song to your favorites");
}
});
} else {

let flag = 1;
// Check if song already exists in the playlist
foundPlaylist.songs.forEach(song => {
if (song.id === songToAdd.id) {
flag = 0;
}
if (flag === 0) {
console.log("Song already exists in your favorites");
res.redirect("/");
} else {
// Add Song to existing Playlist
foundPlaylist.songs.push(songToAdd);
foundPlaylist.save(function (err) {
console.log("Successfully added song to your favorites");
res.redirect("/");
});
}
});
}
}
});
}
});







module.exports = router;
69 changes: 69 additions & 0 deletions routes/search.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
const express = require('express');
const router = express.Router();
const Song = require('../models/song');
const unirest = require("unirest");



function search(query,callback){

var req = unirest("GET", "https://deezerdevs-deezer.p.rapidapi.com/search");

req.query({
"q": query
});

req.headers({
"x-rapidapi-host": "deezerdevs-deezer.p.rapidapi.com",
"x-rapidapi-key": process.env.API_KEY,
"useQueryString": true
});

req.end(function (res) {
if (res.error) throw new Error(res.error);
else{
// console.log(res.body);
callback(res.body);
}
});
}




router.post('/',function(req,res){
let query = req.body.searchQuery;
res.redirect("/search/" + query);
});

router.get("/:name", function(req,res){

let user = null;
if (req.isAuthenticated()) {
user = req.user;
}
let query = req.params.name;

let searchResponse = search(query,function(response){

const data = response.data;
let songList = [];
for(const song of data){
const newSong = new Song({
id: song.id,
title: song.title,
preview: song.preview,
cover_big: song.album.cover_big,
cover_xl: song.album.cover_xl,
artist: song.artist.name
});
songList.push(newSong);
}
res.render("songlist",{songs: songList,user: user,showNavbar: true});
});
})




module.exports = router ;
66 changes: 66 additions & 0 deletions routes/songs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
const express = require('express');
const router = express.Router();
const Song = require('../models/song');
const unirest = require("unirest");

function getTrack(songId,callback){

var req = unirest("GET", "https://deezerdevs-deezer.p.rapidapi.com/track/" + songId);

req.headers({
"x-rapidapi-host": "deezerdevs-deezer.p.rapidapi.com",
"x-rapidapi-key": process.env.API_KEY,
"useQueryString": true
});

req.end(function (res) {
if (res.error) throw new Error(res.error);

else{
console.log(res.body);
callback(res.body);
}

});
}



router.get('/',function(req,res){
let query = req.body.searchQuery;
res.redirect("/songs/" + query);
});


router.get("/:id",function(req,res){



let user = null;
if (req.isAuthenticated()) {
user = req.user;
}
const songId = req.params.id;
let trackResponse = getTrack(songId,function(response){

const songData = response;
const song = new Song({
id: songId,
title: songData.title,
preview: songData.preview,
cover_big: songData.album.cover_big,
cover_xl: songData.album.cover_xl,
artist: songData.artist.name,
});
// const song = {title: songData.title,preview: songData.preview, cover_big: songData.album.cover_big, cover_xl: songData.album.cover_xl, artist: songData.artist.name};

res.render("song",{song: song, user: user,showNavbar: false });

});

});




module.exports = router ;
43 changes: 43 additions & 0 deletions routes/user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const express = require('express');
const router = express.Router();
const User = require('../models/user');
const Playlist = require('../models/playlist');


router.get("/logout", function (req, res) {
if (req.isAuthenticated()){
req.logout();
res.redirect("/");
console.log("Successfully logged out");
} else {
res.redirect("/login")
}
});

router.get("/playlists" , function (req, res) {
User.findOne({ _id: req.user.id }, function (err, foundUser) {
if (err) {
console.log(err);
} else {
Playlist.findOne({ user: foundUser}, function (err, foundPlaylist) {
if (err) {
console.log(err);
} else {
if (!foundPlaylist) {
res.send("No Playlists have been created");

} else {
res.render("songlist",{songs: foundPlaylist.songs, user: foundPlaylist.user, showNavbar: true});
}
}
});
}
});
});






module.exports = router ;
Loading