@@ -0,0 +1,112 @@
var Movie = require("../models/movie");

var MovieController = {
all: function(req, res, next) {
Movie.all(function(error, movies) {
if(error) {
var err = new Error("Error retrieving movies list:\n" + error.message);
err.status = 500;
next(err);
} else {
res.render('index', { title: 'Movies' , stuff: movies});
}
})
},

item: function(req, res, next) {
Movie.item([Number(req.params.id)], function(error, item) {
if(error) {
var err = new Error("Error retrieving movie:\n" + error.message);
err.status = 500;
next(err);
} else {
console.log(item)
res.render('item', { title: 'Movies' , person: 'Director', stuff: item});
}
})
},

upvote: function(req, res, next) {
Movie.upvote([Number(req.params.id)], function(error, item) {
if(error) {
var err = new Error("Error retrieving movie:\n" + error.message);
err.status = 500;
next(err);
} else {
Movie.item([Number(req.params.id)], function(error, item) {
if(error) {
var err = new Error("Error retrieving movie:\n" + error.message);
err.status = 500;
next(err);
} else {
res.redirect('http://localhost:3000/movies/'+req.params.id);
}
})
}
})
},

edit: function(req, res, next) {
Movie.item([Number(req.params.id)], function(error, item) {
if(error) {
var err = new Error("Error retrieving movie:\n" + error.message);
err.status = 500;
next(err);
} else {
console.log(item)
res.render('edit', { title: 'Movies', person: "Director", stuff: item});
}
})
},

saveedit: function(req, res, next) {
// console.log(req.body)
Movie.saveedit([req.body.id, req.body.name, req.body.person, req.body.description], function(error, item) {
if(error) {
var err = new Error("Error retrieving movie:\n" + error.message);
err.status = 500;
next(err);
} else {
Movie.item([Number(req.params.id)], function(error, item) {
if(error) {
var err = new Error("Error retrieving movie:\n" + error.message);
err.status = 500;
next(err);
} else {
res.redirect('http://localhost:3000/movies/'+req.body.id);
}
})
}
})
},

delete: function(req, res, next) {
console.log(req.params.id)
Movie.delete([Number(req.params.id)], function(error, item) {
if(error) {
var err = new Error("Error deleting movie:\n" + error.message);
err.status = 500;
next(err);
} else {
// console.log(item)
res.redirect('http://localhost:3000/movies');
}
})
},

new: function(req, res, next) {
// console.log(req.body.name)
Movie.new([req.body.name, req.body.person, req.body.description], function(error, item) {
if(error) {
var err = new Error("Error creating movie:\n" + error.message);
err.status = 500;
next(err);
} else {
console.log(item)
res.redirect('http://localhost:3000/movies/'+item.id);
}
})
}
}

module.exports = MovieController;
@@ -1,69 +1,80 @@
[
{
"name": "Dancing Queen",
"type": "albums",
"artist": "ABBA",
"description": "she dances like a queen",
"votes": 0
},

{
"name": "Howling for You",
"type": "albums",
"artist": "The Black Keys",
"description": "yep..",
"votes": 10
},

{
"name": "Timber",
"type": "albums",
"artist": "Kesha",
"description": "It's going down",
"votes": 10
},

{
"name": "Yellow Submarine",
"type": "albums",
"artist": "The Beatles",
"description": "We all live here",
"votes": 4
},
{
"name": "American Idiot",
"type": "albums",
"artist": "Greenday",
"description": "Don't wanna be",
"votes": 4
},
{
"name": "Beautiful Soul",
"type": "albums",
"artist": "Jesse McCartney",
"description": "I just want you",
"votes": 1
},
{
"name": "Perfect",
"type": "albums",
"artist": "One Direction",
"description": "I might never be",
"votes": 10
},
{
"name": "Blank Space",
"type": "albums",
"artist": "Taylor Swift",
"description": "She cray cray",
"votes": 9
},
{
"name": "The Luckiest",
"type": "albums",
"artist": "Ben Folds",
"description": "You are",
"votes": 7
},
{
"name": "I don't understand what albums are",
"type": "albums",
"artist": "someone",
"description": "lolz",
"votes": 0
},
{
"name": "Cello Suite",
"type": "albums",
"artist": "Bach",
"description": "music",
"votes": 5
@@ -1,13 +1,15 @@
[
{
"name": "Space X",
"type": "books",
"author": "Some dude",
"description": "Elon Musk zomg",
"votes": 20
},

{
"name": "Bible",
"type": "books",
"author": "People",
"description": "life and stories and stuff",
"votes": 0
@@ -1,12 +1,14 @@
[
{
"name": "Swiss Army Man",
"type": "movies",
"director": "Some indie dude",
"description": "flatulant corpse Daniel Radcliffe",
"votes": 30
},
{
"name": "Finding Dory",
"type": "movies",
"director": "Pixar",
"description": "Trying to find her",
"votes": 29
@@ -4,6 +4,7 @@ DROP TABLE IF EXISTS books;

CREATE TABLE albums(
id serial PRIMARY KEY,
type text,
name text,
artist text,
description text,
@@ -12,6 +13,7 @@ CREATE TABLE albums(

CREATE TABLE movies(
id serial PRIMARY KEY,
type text,
name text,
director text,
description text,
@@ -21,6 +23,7 @@ CREATE TABLE movies(

CREATE TABLE books(
id serial PRIMARY KEY,
type text,
name text,
author text,
description text,
@@ -0,0 +1,82 @@
var app = require("../app");
var db = app.get("db");

var Album = function (album) {
this.id = album.id;
this.type = album.type;
this.name = album.name;
this.person = album.artist;
this.description = album.description;
this.votes = album.votes;
};

Album.all = function(callback) {
db.query("SELECT * FROM albums ORDER BY votes desc;", function(error, albums) {
if(error || !albums) {
callback(error || new Error("Could not retrieve albums"), undefined);
} else {
callback(null, albums.map(function(album) {
return new Album(album);
}))
}
})
}

Album.item = function(id, callback) {
db.query("SELECT * FROM albums WHERE id=$1", id, function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve album"), undefined);
} else {
var oneItem = item.map(function(item) {
return new Album(item);
});
callback(null, oneItem);
}
})
}

Album.upvote = function(id, callback) {
db.query("UPDATE albums SET votes = votes+1 WHERE id=$1;", id, function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve album"), undefined);
} else {
var oneItem = item.map(function(item) {
return new Album(item);
});
callback(null, oneItem);
}
})
}

Album.saveedit = function(params, callback) {
db.albums.update({id: params[0], name: params[1], artist: params[2], description: params[3]},function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve album"), undefined);
} else {
callback(null, item);
}
})
}

Album.delete = function(ids, callback) {
db.albums.destroy({id: ids}, function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve album"), undefined);
} else {
callback(null, item);
}
})
}

Album.new = function(params, callback) {
db.albums.insert({name: params[0], artist: params[1], description: params[2], type: 'albums', votes: 0},function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve album"), undefined);
} else {
callback(null, item);
}
})
}


module.exports = Album;
@@ -0,0 +1,82 @@
var app = require("../app");
var db = app.get("db");

var Book = function (book) {
this.id = book.id;
this.type = book.type;
this.name = book.name;
this.person = book.author;
this.description = book.description;
this.votes = book.votes;
};

Book.all = function(callback) {
db.query("SELECT * FROM books ORDER BY votes desc;", function(error, books) {
if(error || !books) {
callback(error || new Error("Could not retrieve books"), undefined);
} else {
callback(null, books.map(function(book) {
return new Book(book);
}))
}
})
}


Book.item = function(id, callback) {
db.query("SELECT * FROM books WHERE id=$1", id, function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve book"), undefined);
} else {
var oneItem = item.map(function(item) {
return new Book(item);
});
callback(null, oneItem);
}
})
}

Book.upvote = function(id, callback) {
db.query("UPDATE books SET votes = votes+1 WHERE id=$1;", id, function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve book"), undefined);
} else {
var oneItem = item.map(function(item) {
return new Book(item);
});
callback(null, oneItem);
}
})
}

Book.saveedit = function(params, callback) {
db.books.update({id: params[0], name: params[1], author: params[2], description: params[3]},function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve book"), undefined);
} else {
callback(null, item);
}
})
}

Book.delete = function(ids, callback) {
db.books.destroy({id: ids}, function(error, item) {
if(error || !item) {
callback(error || new Error("Could not delete book"), undefined);
} else {
callback(null, item);
}
})
}

Book.new = function(params, callback) {
db.books.insert({name: params[0], author: params[1], description: params[2], type: 'books', votes: 0},function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve book"), undefined);
} else {
callback(null, item);
}
})
}

module.exports = Book;
@@ -0,0 +1,84 @@
var app = require("../app");
var db = app.get("db");

var Movie = function (movie) {
this.id = movie.id;
this.type = movie.type;
this.name = movie.name;
this.person = movie.director;
this.description = movie.description;
this.votes = movie.votes;
};

Movie.all = function(callback) {
db.query("SELECT * FROM movies ORDER BY votes desc;", function(error, movies) {
if(error || !movies) {
callback(error || new Error("Could not retrieve movies"), undefined);
} else {
callback(null, movies.map(function(movie) {
return new Movie(movie);
}))
}
})
}

Movie.item = function(id, callback) {
db.query("SELECT * FROM movies WHERE id=$1", id, function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve movie"), undefined);
} else {
var oneItem = item.map(function(item) {
return new Movie(item);
});
callback(null, oneItem);
}
})
}

Movie.upvote = function(id, callback) {
db.query("UPDATE movies SET votes = votes+1 WHERE id=$1;", id, function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve movie"), undefined);
} else {
var oneItem = item.map(function(item) {
return new Movie(item);
});
callback(null, oneItem);
}
})
}


Movie.saveedit = function(params, callback) {
db.movies.update({id: params[0], name: params[1], director: params[2], description: params[3]},function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve movie"), undefined);
} else {
callback(null, item);
}
})
}

Movie.delete = function(ids, callback) {
db.movies.destroy({id: ids}, function(error, item) {
if(error || !item) {
callback(error || new Error("Could not delete movie"), undefined);
} else {
callback(null, item);
}
})
}

Movie.new = function(params, callback) {
db.movies.insert({name: params[0], director: params[1], description: params[2], type: 'movies', votes: 0},function(error, item) {
if(error || !item) {
callback(error || new Error("Could not retrieve movie"), undefined);
} else {
callback(null, item);
}
})
}



module.exports = Movie;
@@ -6,3 +6,20 @@ body {
a {
color: #00B7FF;
}

table, th, td {
border: 1px solid black;
/*width: 50%;*/
}

td {
width: 25%;
}

.hometable{
border: none;
}

.hometable td, .hometable th{
border-style: none;
}
@@ -0,0 +1,28 @@
var express = require('express');
var router = express.Router();
var Albums = require('../controllers/albums')


/* GET home page. */
router.get('/', Albums.all);

router.get('/new', function(req, res, next) {
res.render('addnew', { thing: 'Albums', person: 'Artist'});
});

router.post('/new', Albums.new);

router.get('/:id', Albums.item);

router.post('/:id', Albums.upvote);

router.get('/:id/edit', Albums.edit);

router.post('/:id/edit', Albums.saveedit);

router.post('/:id/delete', Albums.delete);

// router.get('/:id', Albums.item);


module.exports = router;
@@ -0,0 +1,26 @@
var express = require('express');
var router = express.Router();
var Books = require('../controllers/books')


/* GET home page. */
router.get('/', Books.all);

router.get('/new', function(req, res, next) {
res.render('addnew', { thing: 'Books', person: 'Author'});
});

router.post('/new', Books.new);

router.get('/:id', Books.item);

router.post('/:id', Books.upvote);

router.get('/:id/edit', Books.edit);

router.post('/:id/edit', Books.saveedit);

router.post('/:id/delete', Books.delete);


module.exports = router;
@@ -1,9 +1,15 @@
var express = require('express');
var router = express.Router();
var Index = require('../controllers/index')


/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
// router.get('/', function(req, res, next) {
// res.render('index', { title: 'Express' });
// });

router.get('/', Index.all);


// router.get('/', Controller.)
module.exports = router;
@@ -0,0 +1,28 @@
var express = require('express');
var router = express.Router();
var Movies = require('../controllers/movies')

/* GET home page. */
router.get('/', Movies.all);

router.get('/new', function(req, res, next) {
res.render('addnew', { thing: 'Movies', person: 'Director'});
});

router.post('/new', Movies.new);

router.get('/:id', Movies.item);

router.post('/:id', Movies.upvote);

router.get('/:id/edit', Movies.edit);

router.post('/:id/edit', Movies.saveedit);

router.post('/:id/delete', Movies.delete);

// {
// res.redirect('/test');
// });

module.exports = router;
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<title><%= thing %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>New <%= thing %></h1>
<form action="" method="post">
<label>Name: </label>
<input type="text" name="name" placeholder="Insert Text Here" >

<label><%= person %>: </label>
<input type="text" name="person" placeholder="John Smith">

<label>Description: </label>
<input type="text" name="description" placeholder="Describe Things">

<input type="submit" value="Submit">
</form>
</body>
</html>
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>

<h1>Edit <%= title %></h1>

<form action="" method="post">
<input type="hidden" name="id" value="<%=stuff[0].id%>">
Name:<br>
<input type="text" name="name" value="<%=stuff[0].name%>"><br><br>
<%=person%>:<br>
<input type="text" name="person" value="<%=stuff[0].person%>"><br><br>
Description:<br>
<input type="text" name="description" value="<%=stuff[0].description%>" ><br><br>

<input type="submit" value="Save">
</form>
</body>
</html>
@@ -0,0 +1,58 @@
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>Media Ranker: a ranking of medias</h1>
<!-- <p>Welcome to <%= title %></p> -->
<table class="hometable">
<tr>
<th><h2>Top Movies</h2></th>
<th><h2>Top Books</h2></th>
<th><h2>Top Albums</h2></th>
</tr>

<%for(var i=0; i < 10; i++) {%>
<tr>
<td>
<% if (movies[i]) { %>
<h3><a href=<%="movies/"+movies[i].id%>><%= movies[i].name%></a></h3> Votes: <%= movies[i].votes%>
<% } else {}%>
</td>
<td>
<% if (books[i]) { %>
<h3><a href=<%="books/"+books[i].id%>><%= books[i].name%></a></h3> Votes: <%= books[i].votes%>
<% } else {}%>
</td>
<td>
<% if (albums[i]) { %>
<h3><a href=<%="albums/"+albums[i].id%>><%= albums[i].name%></a></h3> Votes: <%= albums[i].votes%>
<% } else {}%>
</td>
</tr>
<% }%>

<tr>
<td>
<a href=<%="movies/"%>>View More Movies</a>
</td>

<td>
<a href=<%="books/"%>>View More Books</a>
</td>

<td>
<a href=<%="albums/"%>>View More Albums</a>
</td>
</tr>

</table>

</body>
</html>
@@ -6,6 +6,36 @@
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<!-- <p>Welcome to <%= title %></p> -->
<table>
<tr>
<th>Votes</th>
<th>Name</th>
<th>Upvote</th>
</tr>
<%for(var i of stuff) {%>
<tr>
<td><%= i.votes%></td>
<td><a href=<%=i.type+"/"+i.id%>><%= i.name%></a></td>
<td>
<form action= <%=i.id%> method="post" >
<input type="submit" value="Upvote">
</form>
</td>
</tr>
<% }%>

</table>
<br />
<% var str = stuff[0].type %>
<form action= <%="/"+stuff[0].type+"/new"%> >
<input type="submit" value="<%= "Add a "+str.substring(0, str.length-1) %>">
</form>

<form action="/">
<input type="submit" value="View All Media">
</form>

</body>
</html>
@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<!-- <h1><%= title %></h1>
<p>Welcome to <%= title %></p> -->
<h1><%= stuff[0].name %></h1>
<p><%=person+": "+stuff[0].person %></p>
<p>Description: <%= stuff[0].description %></p>
<p>Votes: <%= stuff[0].votes %></p>
<form action= <%=stuff[0].id%> method="post">
<input type="submit" value="Upvote">
</form>
<form action= <%=stuff[0].id+"/"+"edit"%> >
<input type="submit" value="Edit">
</form>
<form action= <%=stuff[0].id+"/delete"%> method="post" >
<input type="submit" value="Delete">
</form>
<form action= <%="/"+stuff[0].type%> >
<input type="submit" value="View All">
</form>
</body>
</html>