From d30b2bcfcdf88ff852d757f83c6d54177a8acfff Mon Sep 17 00:00:00 2001 From: Monk Wellington Date: Thu, 3 Mar 2016 19:34:09 -0800 Subject: [PATCH 01/12] initial commit: finish wireframes and site-map. --- tunely.bmpr | Bin 0 -> 80896 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tunely.bmpr diff --git a/tunely.bmpr b/tunely.bmpr new file mode 100644 index 0000000000000000000000000000000000000000..a7744690956b0c032508974835e57c62a1b13b49 GIT binary patch literal 80896 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 Q`yjnA&R(DWKKuXu|JljRjsO4v literal 0 HcmV?d00001 From f969ba6ee9400677519965f82f39e9d4cf1c7e71 Mon Sep 17 00:00:00 2001 From: Monk Wellington Date: Thu, 3 Mar 2016 20:55:03 -0800 Subject: [PATCH 02/12] finish sprint 1. --- models/album.js | 11 ++++++++++ models/index.js | 5 ++++- package.json | 6 +++-- public/css/styles.css | 1 - public/js/app.js | 16 +++++++++----- seed.js | 31 ++++++++++++++++++++++---- server.js | 43 +++++++++--------------------------- views/index.html | 51 ------------------------------------------- 8 files changed, 67 insertions(+), 97 deletions(-) diff --git a/models/album.js b/models/album.js index 0411a57..dbefb24 100644 --- a/models/album.js +++ b/models/album.js @@ -1,2 +1,13 @@ var mongoose = require("mongoose"); var Schema = mongoose.Schema; + +var AlbumSchema = new Schema({ + artistName: String, + name: String, + releaseDate: String, + genres: [ String ] +}); + +var Album = mongoose.model('Album', AlbumSchema); + +module.exports = Album; diff --git a/models/index.js b/models/index.js index 6c10401..9d5f1b3 100644 --- a/models/index.js +++ b/models/index.js @@ -1,2 +1,5 @@ var mongoose = require("mongoose"); -mongoose.connect("mongodb://localhost/tunely"); +mongoose.connect("mongodb://localhost/tunely_test"); +var Album = require('./album'); + +module.exports.Album = Album; diff --git a/package.json b/package.json index 0d3e4f8..4b43d93 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "An app for tracking your music collection", "main": "server.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "start": "nodemon server.js" }, "repository": { "type": "git", @@ -17,6 +18,7 @@ }, "homepage": "https://github.com/tgaff/tunely#readme", "dependencies": { - "express": "^4.13.3" + "express": "^4.13.3", + "mongoose": "^4.2.9" } } diff --git a/public/css/styles.css b/public/css/styles.css index 6d4b961..0978ccf 100644 --- a/public/css/styles.css +++ b/public/css/styles.css @@ -13,4 +13,3 @@ vertical-align: baseline; margin-right: 12px; } - diff --git a/public/js/app.js b/public/js/app.js index 164eb55..b65d505 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -39,6 +39,12 @@ sampleAlbums.push({ $(document).ready(function() { console.log('app.js loaded!'); + $.get('/api/albums').success(function (albums) { + albums.forEach(function(album) { + renderAlbum(album); + }); + + }); }); @@ -64,15 +70,15 @@ function renderAlbum(album) { "
    " + "
  • " + "

    Album Name:

    " + - " " + "HARDCODED ALBUM NAME" + "" + + " " + album.name + "" + "
  • " + "
  • " + "

    Artist Name:

    " + - " " + "HARDCODED ARTIST NAME" + "" + + " " + album.artistName + "" + "
  • " + "
  • " + "

    Released date:

    " + - " " + "HARDCODED RELEASE DATE" + "" + + " " + album.releaseDate + "" + "
  • " + "
" + " " + @@ -88,5 +94,5 @@ function renderAlbum(album) { " " + " "; - // render to the page with jQuery -} + $('#albums').prepend(albumHtml); + } diff --git a/seed.js b/seed.js index 1943f8f..80d514b 100644 --- a/seed.js +++ b/seed.js @@ -3,13 +3,36 @@ var db = require("./models"); -var albumsList =[ - // put data here! -]; +var albumList =[]; +albumList.push({ + artistName: 'Nine Inch Nails', + name: 'The Downward Spiral', + releaseDate: '1994, March 8', + genres: [ 'industrial', 'industrial metal' ] + }); +albumList.push({ + artistName: 'Metallica', + name: 'Metallica', + releaseDate: '1991, August 12', + genres: [ 'heavy metal' ] + }); +albumList.push({ + artistName: 'The Prodigy', + name: 'Music for the Jilted Generation', + releaseDate: '1994, July 4', + genres: [ 'electronica', 'breakbeat hardcore', 'rave', 'jungle' ] + }); +albumList.push({ + artistName: 'Johnny Cash', + name: 'Unchained', + releaseDate: '1996, November 5', + genres: [ 'country', 'rock' ] + }); + db.Album.remove({}, function(err, albums){ - db.Album.create(albumsList, function(err, albums){ + db.Album.create(albumList, function(err, albums){ if (err) { return console.log('ERROR', err); } console.log("all albums:", albums); console.log("created", albums.length, "albums"); diff --git a/server.js b/server.js index 5da137b..ab4cf44 100644 --- a/server.js +++ b/server.js @@ -4,46 +4,16 @@ var express = require('express'); // generate a new express app and call it 'app' var app = express(); - +var mongoose = require('mongoose'); // serve static files from public folder app.use(express.static(__dirname + '/public')); + /************ * DATABASE * ************/ -/* hard-coded data */ -var albums = []; -albums.push({ - _id: 132, - artistName: 'Nine Inch Nails', - name: 'The Downward Spiral', - releaseDate: '1994, March 8', - genres: [ 'industrial', 'industrial metal' ] - }); -albums.push({ - _id: 133, - artistName: 'Metallica', - name: 'Metallica', - releaseDate: '1991, August 12', - genres: [ 'heavy metal' ] - }); -albums.push({ - _id: 134, - artistName: 'The Prodigy', - name: 'Music for the Jilted Generation', - releaseDate: '1994, July 4', - genres: [ 'electronica', 'breakbeat hardcore', 'rave', 'jungle' ] - }); -albums.push({ - _id: 135, - artistName: 'Johnny Cash', - name: 'Unchained', - releaseDate: '1996, November 5', - genres: [ 'country', 'rock' ] - }); - - +var db = require('./models'); /********** * ROUTES * @@ -73,6 +43,13 @@ app.get('/api', function api_index (req, res){ }); }); +app.get('/api/albums', function albumsIndex(req, res) { + db.Album.find({}, function(err, albums) { + res.json(albums); + }); +}); + + /********** * SERVER * **********/ diff --git a/views/index.html b/views/index.html index 5cb6501..4a831db 100644 --- a/views/index.html +++ b/views/index.html @@ -34,57 +34,6 @@

Albums

- - - - -
- -
-
-
- - - -
-
- album image -
- -
-
    -
  • -

    Album Name:

    - Ladyhawke -
  • - -
  • -

    Artist Name:

    - Ladyhawke -
  • - -
  • -

    Released date:

    - 2008, November 18 -
  • -
-
- -
- - - - -
-
-
-
- - - - -
From 97082335bdf7f0f3885ee5e357325b0356320659 Mon Sep 17 00:00:00 2001 From: howellwho Date: Fri, 4 Mar 2016 09:39:49 -0800 Subject: [PATCH 03/12] added album form --- views/index.html | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/views/index.html b/views/index.html index 4a831db..16fa403 100644 --- a/views/index.html +++ b/views/index.html @@ -24,6 +24,23 @@

Welcome to tunely

Your music binder!

+
+
+
+
+ Artist
+ +
+ Album Name
+ +
+ Release Date
+ +
+ +
+
+
From 83fef38ff2ee3ac0bdc70c76acdd33b223388529 Mon Sep 17 00:00:00 2001 From: Monk Wellington Date: Fri, 4 Mar 2016 09:52:26 -0800 Subject: [PATCH 04/12] update seed files. --- seed.js | 1 - 1 file changed, 1 deletion(-) diff --git a/seed.js b/seed.js index 80d514b..05d0207 100644 --- a/seed.js +++ b/seed.js @@ -38,5 +38,4 @@ db.Album.remove({}, function(err, albums){ console.log("created", albums.length, "albums"); process.exit(); }); - }); From 4bf4ab3a8ec828ac5ac4d50ff4081ae714e4c8e4 Mon Sep 17 00:00:00 2001 From: JDe-Lora Date: Fri, 4 Mar 2016 10:21:12 -0800 Subject: [PATCH 05/12] serialize --- public/js/app.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/public/js/app.js b/public/js/app.js index b65d505..b55bf3d 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -45,10 +45,23 @@ $(document).ready(function() { }); }); -}); + $('#album-form form').on('submit', function(e) { + e.preventDefault(); + var formData = $(this).serialize(); + console.log('formData', formData); + $.post('/api/albums', formData, function(album) { + console.log('album after POST', album); + renderAlbum(album); //render the server's response + }); + $(this).trigger("reset"); + }); + +}); + + // this function takes a single album and renders it to the page From b28ffafbaf8e8c4a7f0de9996c6322444f5b819d Mon Sep 17 00:00:00 2001 From: Monk Wellington Date: Fri, 4 Mar 2016 10:24:09 -0800 Subject: [PATCH 06/12] revert back. --- public/js/app.js | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/public/js/app.js b/public/js/app.js index b65d505..9036ff1 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -5,7 +5,6 @@ * */ - /* hard-coded data! */ var sampleAlbums = []; sampleAlbums.push({ @@ -34,23 +33,13 @@ sampleAlbums.push({ }); /* end of hard-coded data */ - - - $(document).ready(function() { console.log('app.js loaded!'); - $.get('/api/albums').success(function (albums) { - albums.forEach(function(album) { - renderAlbum(album); - }); - + sampleAlbums.forEach(function (element) { + renderAlbum(element); }); }); - - - - // this function takes a single album and renders it to the page function renderAlbum(album) { console.log('rendering album:', album); @@ -70,15 +59,15 @@ function renderAlbum(album) { "
    " + "
  • " + "

    Album Name:

    " + - " " + album.name + "" + + " " + "HARDCODED ALBUM NAME" + "" + "
  • " + "
  • " + "

    Artist Name:

    " + - " " + album.artistName + "" + + " " + "HARDCODED ARTIST NAME" + "" + "
  • " + "
  • " + "

    Released date:

    " + - " " + album.releaseDate + "" + + " " + "HARDCODED RELEASE DATE" + "" + "
  • " + "
" + "
" + @@ -94,5 +83,6 @@ function renderAlbum(album) { " " + " "; - $('#albums').prepend(albumHtml); - } + // render to the page with jQuery + $('#albums').append(albumHtml); +} From d3fbdade46eea2b7a943a88fa776cf7f41e01fca Mon Sep 17 00:00:00 2001 From: howellwho Date: Fri, 4 Mar 2016 11:50:19 -0800 Subject: [PATCH 07/12] added post route --- server.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server.js b/server.js index ab4cf44..d04098e 100644 --- a/server.js +++ b/server.js @@ -5,6 +5,7 @@ var express = require('express'); // generate a new express app and call it 'app' var app = express(); var mongoose = require('mongoose'); +var bodyParser = require('body-parser'); // serve static files from public folder app.use(express.static(__dirname + '/public')); @@ -49,6 +50,13 @@ app.get('/api/albums', function albumsIndex(req, res) { }); }); +app.post('/api/albums', function albumCreate(req, res){ + db.Album.create(req.body, function(err, album) { + if (err) { console.log('error', err); } + console.log(album); + res.json(album); + }); +}); /********** * SERVER * From c594bb38f7c3729072bc672cc6c7386844254c33 Mon Sep 17 00:00:00 2001 From: howellwho Date: Fri, 4 Mar 2016 11:58:02 -0800 Subject: [PATCH 08/12] updated dependency --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 4b43d93..8d50977 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "homepage": "https://github.com/tgaff/tunely#readme", "dependencies": { "express": "^4.13.3", - "mongoose": "^4.2.9" + "mongoose": "^4.2.9", + "body-parser": "^1.13.2" } } From 0df92f8b04d79d2954382373da88e0f5dd39413e Mon Sep 17 00:00:00 2001 From: howellwho Date: Fri, 4 Mar 2016 12:13:25 -0800 Subject: [PATCH 09/12] added genre --- views/index.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/views/index.html b/views/index.html index 16fa403..189267f 100644 --- a/views/index.html +++ b/views/index.html @@ -37,6 +37,9 @@

Welcome to tunely

Release Date

+ Genre
+ +
From 8d3ab72dfe279f8efecdc7daaa402c4756385c70 Mon Sep 17 00:00:00 2001 From: Monk Wellington Date: Fri, 4 Mar 2016 12:37:20 -0800 Subject: [PATCH 10/12] fix rendering albums. --- public/js/app.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/public/js/app.js b/public/js/app.js index 8a631d5..eb22cd2 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -41,6 +41,7 @@ $(document).ready(function() { $('#album-form form').on('submit', function(e) { + debugger; e.preventDefault(); var formData = $(this).serialize(); console.log('formData', formData); @@ -62,7 +63,7 @@ function renderAlbum(album) { var albumHtml = " " + - "
" + + "
" + "
" + "
" + "
" + @@ -75,15 +76,15 @@ function renderAlbum(album) { "
    " + "
  • " + "

    Album Name:

    " + - " " + "HARDCODED ALBUM NAME" + "" + + " " + album.name + "" + "
  • " + "
  • " + "

    Artist Name:

    " + - " " + "HARDCODED ARTIST NAME" + "" + + " " + album.artistName + "" + "
  • " + "
  • " + "

    Released date:

    " + - " " + "HARDCODED RELEASE DATE" + "" + + " " + album.releaseDate + "" + "
  • " + "
" + "
" + From 1287528d43824fb0cda1d0b15744dda51d011712 Mon Sep 17 00:00:00 2001 From: Monk Wellington Date: Sat, 5 Mar 2016 09:46:28 -0800 Subject: [PATCH 11/12] finish sprint 2. --- models/album.js | 5 +- models/index.js | 2 + models/song.js | 11 +++++ package.json | 4 +- public/js/app.js | 124 ++++++++++++++++++++++++++++++++++------------- seed.js | 31 ++++++++++++ server.js | 51 +++++++++++++++++-- views/index.html | 86 ++++++++++++++++++++++++-------- 8 files changed, 253 insertions(+), 61 deletions(-) create mode 100644 models/song.js diff --git a/models/album.js b/models/album.js index dbefb24..1fd23c3 100644 --- a/models/album.js +++ b/models/album.js @@ -1,11 +1,14 @@ var mongoose = require("mongoose"); var Schema = mongoose.Schema; +var Song = require('./song'); + var AlbumSchema = new Schema({ artistName: String, name: String, releaseDate: String, - genres: [ String ] + genres: [ String ], + songs: [Song.schema] }); var Album = mongoose.model('Album', AlbumSchema); diff --git a/models/index.js b/models/index.js index 9d5f1b3..0366699 100644 --- a/models/index.js +++ b/models/index.js @@ -1,5 +1,7 @@ var mongoose = require("mongoose"); mongoose.connect("mongodb://localhost/tunely_test"); var Album = require('./album'); +var Song = require('./song'); module.exports.Album = Album; +module.exports.Song = Song; diff --git a/models/song.js b/models/song.js new file mode 100644 index 0000000..e6c12a0 --- /dev/null +++ b/models/song.js @@ -0,0 +1,11 @@ +var mongoose = require("mongoose"); +var Schema = mongoose.Schema; + +var SongSchema = new Schema({ + name: String, + trackNumber: Number +}); + +var Song = mongoose.model('Song', SongSchema); + +module.exports = Song; diff --git a/package.json b/package.json index 8d50977..415838f 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ }, "homepage": "https://github.com/tgaff/tunely#readme", "dependencies": { + "body-parser": "^1.14.1", "express": "^4.13.3", - "mongoose": "^4.2.9", - "body-parser": "^1.13.2" + "mongoose": "^4.2.9" } } diff --git a/public/js/app.js b/public/js/app.js index eb22cd2..ee3a320 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -5,43 +5,18 @@ * */ -/* hard-coded data! */ -var sampleAlbums = []; -sampleAlbums.push({ - artistName: 'Ladyhawke', - name: 'Ladyhawke', - releaseDate: '2008, November 18', - genres: [ 'new wave', 'indie rock', 'synth pop' ] - }); -sampleAlbums.push({ - artistName: 'The Knife', - name: 'Silent Shout', - releaseDate: '2006, February 17', - genres: [ 'synth pop', 'electronica', 'experimental' ] - }); -sampleAlbums.push({ - artistName: 'Juno Reactor', - name: 'Shango', - releaseDate: '2000, October 9', - genres: [ 'electronic', 'goa trance', 'tribal house' ] - }); -sampleAlbums.push({ - artistName: 'Philip Wesley', - name: 'Dark Night of the Soul', - releaseDate: '2008, September 12', - genres: [ 'piano' ] - }); -/* end of hard-coded data */ + $(document).ready(function() { console.log('app.js loaded!'); - sampleAlbums.forEach(function (element) { - renderAlbum(element); + $.get('/api/albums').success(function (albums) { + albums.forEach(function(album) { + renderAlbum(album); + }); }); $('#album-form form').on('submit', function(e) { - debugger; e.preventDefault(); var formData = $(this).serialize(); console.log('formData', formData); @@ -52,9 +27,83 @@ $(document).ready(function() { $(this).trigger("reset"); }); + + $('#albums').on('click', '.add-song', function(e) { + var id= $(this).parents('.album').data('album-id'); + console.log('id',id); + $('#songModal').data('album-id', id); + $('#songModal').modal(); + }); + + $('#saveSong').on('click', handleNewSongSubmit); + + $('#albums').on('click', '.delete-album', handleDeleteAlbumClick); + }); +function handleDeleteAlbumClick(e) { + var albumId = $(this).parents('.album').data('album-id'); + console.log('someone wants to delete album id=' + albumId ); + $.ajax({ + method: 'DELETE', + url: ('/api/albums/' + albumId), + success: function() { + console.log("He's dead Jim"); + $('[data-album-id='+ albumId + ']').remove(); + } + }); +} + +// handles the modal fields and POSTing the form to the server +function handleNewSongSubmit(e) { + var albumId = $('#songModal').data('album-id'); + var songName = $('#songName').val(); + var trackNumber = $('#trackNumber').val(); + + var formData = { + name: songName, + trackNumber: trackNumber + }; + + var postUrl = '/api/albums/' + albumId + '/songs'; + console.log('posting to ', postUrl, ' with data ', formData); + + $.post(postUrl, formData) + .success(function(song) { + console.log('song', song); + + // re-get full album and render on page + $.get('/api/albums/' + albumId).success(function(album) { + //remove old entry + $('[data-album-id='+ albumId + ']').remove(); + // render a replacement + renderAlbum(album); + }); + + //clear form + $('#songName').val(''); + $('#trackNumber').val(''); + $('#songModal').modal('hide'); + + }); +} + + + +function buildSongsHtml(songs) { + var songText = " – "; + songs.forEach(function(song) { + songText = songText + "(" + song.trackNumber + ") " + song.name + " – "; + }); + var songsHtml = + "
  • " + + "

    Songs:

    " + + " " + songText + "" + + "
  • "; + return songsHtml; +} + // this function takes a single album and renders it to the page @@ -63,7 +112,7 @@ function renderAlbum(album) { var albumHtml = " " + - "
    " + + "
    " + "
    " + "
    " + "
    " + @@ -84,8 +133,12 @@ function renderAlbum(album) { " " + "
  • " + "

    Released date:

    " + - " " + album.releaseDate + "" + + " " + album.releaseDate + "" + "
  • " + + + buildSongsHtml(album.songs) + + + " " + "
    " + "
    " + @@ -94,12 +147,13 @@ function renderAlbum(album) { "
    " + // end of panel-body " " + "
    " + "
    " + " "; - // render to the page with jQuery - $('#albums').append(albumHtml); -} + $('#albums').prepend(albumHtml); + } diff --git a/seed.js b/seed.js index 05d0207..ad5570f 100644 --- a/seed.js +++ b/seed.js @@ -29,6 +29,36 @@ albumList.push({ genres: [ 'country', 'rock' ] }); +var sampleSongs = []; + +sampleSongs.push({ name: 'Swamped', + trackNumber: 1 +}); +sampleSongs.push({ name: "Heaven's a Lie", + trackNumber: 2 +}); +sampleSongs.push({ name: 'Daylight Dancer', + trackNumber: 3 +}); +sampleSongs.push({ name: 'Humane', + trackNumber: 4 +}); +sampleSongs.push({ name: 'Self Deception', + trackNumber: 5 +}); +sampleSongs.push({ name: 'Aeon', + trackNumber: 6 +}); +sampleSongs.push({ name: 'Tight Rope', + trackNumber: 7 +}); + + +// populate each albums song list +albumList.forEach(function(album) { + album.songs = sampleSongs; +}); + db.Album.remove({}, function(err, albums){ @@ -38,4 +68,5 @@ db.Album.remove({}, function(err, albums){ console.log("created", albums.length, "albums"); process.exit(); }); + }); diff --git a/server.js b/server.js index d04098e..c95bd7c 100644 --- a/server.js +++ b/server.js @@ -6,9 +6,10 @@ var express = require('express'); var app = express(); var mongoose = require('mongoose'); var bodyParser = require('body-parser'); + // serve static files from public folder app.use(express.static(__dirname + '/public')); - +app.use(bodyParser.urlencoded({ extended: true })); /************ * DATABASE * @@ -50,14 +51,56 @@ app.get('/api/albums', function albumsIndex(req, res) { }); }); -app.post('/api/albums', function albumCreate(req, res){ +app.post('/api/albums', function albumCreate(req, res) { + console.log('body', req.body); + + // split at comma and remove and trailing space + var genres = req.body.genres.split(',').map(function(item) { return item.trim(); } ); + req.body.genres = genres; + db.Album.create(req.body, function(err, album) { if (err) { console.log('error', err); } - console.log(album); - res.json(album); + console.log(album); + res.json(album); + }); + +}); + + +app.get('/api/albums/:id', function albumShow(req, res) { + console.log('requested album id=', req.params.id); + db.Album.findOne({_id: req.params.id}, function(err, album) { + res.json(album); + }); +}); + + +app.post('/api/albums/:albumId/songs', function songsCreate(req, res) { + console.log('body', req.body); + db.Album.findOne({_id: req.params.albumId}, function(err, album) { + if (err) { console.log('error', err); } + + var song = new db.Song(req.body); + album.songs.push(song); + album.save(function(err, savedAlbum) { + if (err) { console.log('error', err); } + console.log('album with new song saved:', savedAlbum); + res.json(song); }); + }); }); +app.delete('/api/albums/:id', function deleteAlbum(req, res) { + console.log('deleting id: ', req.params.id); + db.Album.remove({_id: req.params.id}, function(err) { + if (err) { return console.log(err); } + console.log("removal of id=" + req.params.id + " successful."); + res.status(200).send(); // everything is a-OK + }); +}); + + + /********** * SERVER * **********/ diff --git a/views/index.html b/views/index.html index 189267f..ef82ff2 100644 --- a/views/index.html +++ b/views/index.html @@ -24,26 +24,75 @@

    Welcome to tunely

    Your music binder!

    -
    + + + + + + +
    -
    -
    - Artist
    - -
    - Album Name
    - -
    - Release Date
    - -
    - Genre
    - -
    - -
    -
    +
    + +
    +
    + + + Add New Album + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + +
    +
    + + + +
    + +
    + +
    +
    +
    +
    +
    +
    + + + + +
    @@ -88,7 +137,6 @@ -
    '+ + '
    ' + + ' ' + + '
    '+ + '
    ' + + ' ' + + '
    '+ + '
    ' + + ' ' + + '
    '+ + ''; + }); + return html; +} // this function takes a single album and renders it to the page function renderAlbum(album) { diff --git a/server.js b/server.js index c95bd7c..792655f 100644 --- a/server.js +++ b/server.js @@ -99,6 +99,23 @@ app.delete('/api/albums/:id', function deleteAlbum(req, res) { }); }); +app.put('/api/albums/:albumId/songs/:id', function(req, res) { + var albumId = req.params.albumId; + var songId = req.params.id; + db.Album.findOne({_id: albumId}, function (err, foundAlbum) { + // find song embedded in album + var foundSong = foundAlbum.songs.id(songId); + foundSong.name = req.body.name; + foundSong.trackNumber = req.body.trackNumber; + + // save changes + foundAlbum.save(function(err, saved) { + if(err) { console.log('error', err); } + res.json(saved); + }); + }); +}); + /**********