diff --git a/models/album.js b/models/album.js
index 0411a57..ed4b236 100644
--- a/models/album.js
+++ b/models/album.js
@@ -1,2 +1,16 @@
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
+
+var Song = require("./song");
+
+var AlbumSchema = new Schema({
+ artistName: String,
+ name: String,
+ releaseDate: String,
+ genres: [ String ],
+ songs: [ Song.schema]
+});
+
+var Album = mongoose.model('Album', AlbumSchema);
+
+module.exports = Album;
\ No newline at end of file
diff --git a/models/index.js b/models/index.js
index 6c10401..8136df4 100644
--- a/models/index.js
+++ b/models/index.js
@@ -1,2 +1,6 @@
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/tunely");
+
+module.exports.Album = require("./album.js");
+
+module.exports.Song = require("./song.js");
\ No newline at end of file
diff --git a/models/song.js b/models/song.js
new file mode 100644
index 0000000..3379e07
--- /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;
\ No newline at end of file
diff --git a/package.json b/package.json
index 0d3e4f8..6c11458 100644
--- a/package.json
+++ b/package.json
@@ -4,19 +4,26 @@
"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": "node server.js"
},
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/tgaff/tunely.git"
},
"author": "tgaff",
- "license": "ISC",
+ "license": "BSD-2-Clause",
"bugs": {
"url": "https://github.com/tgaff/tunely/issues"
},
"homepage": "https://github.com/tgaff/tunely#readme",
"dependencies": {
- "express": "^4.13.3"
+ "express": "~4.13.3",
+ "mongoose": "~4.2.10",
+ "body-parser": "~1.14.1",
+ "mongodb": "~2.1.0"
+ },
+ "directories": {
+ "doc": "docs"
}
}
diff --git a/public/js/app.js b/public/js/app.js
index 164eb55..1e85b41 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -5,88 +5,181 @@
*
*/
+$(document).ready(function() {
+ console.log('app.js loaded!');
-/* 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 */
+function getAndRenderAll() {
+ $.ajax({
+ method: 'GET',
+ url: '/api/albums',
+ success: function (data) {
+ // console.log(data);
+ // data.albums.forEach( function ( element, index) {
+ // sampleAlbums.push(element);
+ // console.log(element);
+ // });
+ // console.log(data);
+
+ data.forEach( function ( element, index) {
+ var songs = "";
+ element.songs.forEach ( function (element, index){
+ var name = element.name;
+ songs = songs + (renderSong(element.name, element.trackNumber));
+ });
+ renderAlbum(element, songs);
+ // console.log(songs);
+ });
+
+ // {name: "Swamped", trackNumber: 1, _id: "56678bfd318047be62e12e66"}
+
+ },
+ error: function () {
+ console.log("uh oh...");
+ }
+ });
+}
+function renderSong(name, count) {
+ var songsHtml =
+"
" + count + ". " + name + " ";
+ return songsHtml;
+}
+getAndRenderAll();
+// Form Input
+//to create new design Project
+var $addAlbum = $('.form-horizontal');
-$(document).ready(function() {
- console.log('app.js loaded!');
+$addAlbum.on('submit', function (event) {
+ event.preventDefault();
+
+ // serialze form data
+ // var newAlbum = $(this).serialize();
+
+ var newAlbum = $(this).serialize();
+
+ // console.log(newAlbum);
+
+ // POST request to create new designProject
+ $.post('/api/albums', newAlbum, function (data) {
+ console.log(data);
+
+ // render all designProjects to view
+ getAndRenderAll();
+
+ });
+
+ // reset the form
+ $addAlbum[0].reset();
+ $addAlbum.find('input').first().focus();
});
+//for adding new songs
+$('#albums').on('click', '.add-song', function(e) {
+ var id = $(this).parents('.album').data('album-id');
+ // console.log('id',id);
+ //adds the current album id data to the song modal
+ $('#songModal').data('album-id', id);
+ // console.log($('#songModal').data('album-id', id));
+ //calls the song modal to add a song
+ $('#songModal').modal();
+ $('#saveSong').on('click', handleNewSongSubmit() ,function() {
+ console.log('yes');
+ });
+});
+
+
+// handles the modal fields and POSTing the form to the server
+function handleNewSongSubmit(e) {
+ var albumId = $('#songModal').data('album-id');
+ // console.log(albumId);
+
+ 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
+ getAndRenderAll();
+ });
+
+ });
+
+ //clear form
+ $('#songName').val('');
+ $('#trackNumber').val('');
+ $('#songModal').modal('hide');
+}
// this function takes a single album and renders it to the page
-function renderAlbum(album) {
- console.log('rendering album:', album);
-
- var albumHtml =
- " " +
- "