Compare commits

..

10 Commits

@ -1,7 +1,7 @@
var express = require('express'); var express = require('express');
var router = express.Router(); var router = express.Router();
var Article = require('../models/articles.js'); var Article = require('../models/articles.js');
var Author = require('../models/authors.js'); var Author = require('../models/authors.js')
router.get('/', function(req, res){ router.get('/', function(req, res){
Article.find({}, function(err, foundArticles){ Article.find({}, function(err, foundArticles){
@ -12,52 +12,68 @@ router.get('/', function(req, res){
}); });
router.get('/new', function(req, res){ router.get('/new', function(req, res){
res.render('articles/new.ejs'); Author.find({}, function(err, allAuthors){
res.render('articles/new.ejs', {
authors:allAuthors
});
});
}); });
router.post('/', function(req, res){ router.post('/', function(req, res){
Article.create(req.body, function(err, createdArticle){ Author.findById(req.body.authorId, function(err, foundAuthor){
res.redirect('/articles'); Article.create(req.body, function(err, createdArticle){
}) foundAuthor.articles.push(createdArticle);
foundAuthor.save(function(){
res.redirect('/articles');
})
});
});
}); });
router.get('/:id', function(req,res){ router.get('/:id', function(req,res){
Article.findById(req.params.id, function(err, foundArticle){ Article.findById(req.params.id, function(err, foundArticle){
res.render('articles/show.ejs', { Author.findOne({'articles._id':req.params.id}, function(err, foundAuthor){
article: foundArticle res.render('articles/show.ejs', {
author: foundAuthor,
article: foundArticle
});
}); });
}); });
}); });
router.delete('/:id', function(req, res){ router.delete('/:id', function(req, res){
Author.find({'articles._id':req.params.id}, function(err, foundAuthors){ Author.findOne({'articles._id':req.params.id}, function(err, author){
for(var i = 0; i < foundAuthors.length; i++){ author.articles.id(req.params.id).remove();
foundAuthors[i].articles.id(req.params.id).remove(); author.save();
foundAuthors[i].save(); });
} Article.findByIdAndRemove(req.params.id, function(){
Article.findByIdAndRemove(req.params.id, function(){ res.redirect('/articles');
res.redirect('/articles');
})
}); });
}); });
router.get('/:id/edit', function(req, res){ router.get('/:id/edit', function(req, res){
Article.findById(req.params.id, function(err, foundArticle){ Author.find({}, function(err, allAuthors){
res.render('articles/edit.ejs', { Article.findById(req.params.id, function(err, foundArticle){
article: foundArticle res.render('articles/edit.ejs', {
article: foundArticle,
authors: allAuthors
});
}); });
}); });
}); });
router.put('/:id', function(req, res){ router.put('/:id', function(req, res){
Article.findByIdAndUpdate(req.params.id, req.body, {new:true}, function(err, updatedArticle){ Author.findOne({'articles._id':req.params.id}, function(err, previousAuthor){
Author.find({'articles._id':req.params.id}, function(err, foundAuthors){ previousAuthor.articles.id(req.params.id).remove();
for(var i = 0; i < foundAuthors.length; i++){ previousAuthor.save(function(){
foundAuthors[i].articles.id(req.params.id).remove(); Author.findById(req.body.authorId, function(err, newAuthor){
foundAuthors[i].articles.push(updatedArticle); Article.findByIdAndUpdate(req.params.id, req.body, {new:true}, function(err, updatedArticle){
foundAuthors[i].save(); newAuthor.articles.push(updatedArticle);
} newAuthor.save(function(){
res.redirect('/articles'); res.redirect('/articles');
});
});
});
}); });
}); });
}); });

@ -1,6 +1,5 @@
var express = require('express'); var express = require('express');
var Author = require('../models/authors.js'); var Author = require('../models/authors.js');
var Article = require('../models/articles.js');
var router = express.Router(); var router = express.Router();
router.get('/', function(req, res){ router.get('/', function(req, res){
@ -42,34 +41,11 @@ router.put('/:id', function(req, res){
}); });
router.get('/:id/edit', function(req, res){ router.get('/:id/edit', function(req, res){
Article.find({}, function(err, foundArticles){ Author.findById(req.params.id, function(err, foundAuthor){
Author.findById(req.params.id, function(err, foundAuthor){ res.render('authors/edit.ejs', {
res.render('authors/edit.ejs', { author: foundAuthor
author: foundAuthor,
articles: foundArticles
});
});
});
});
router.post('/:id/articles', function(req, res){
Article.findById(req.body.articleId, function(err, foundArticle){
Author.findById(req.params.id, function(err, foundAuthor){
foundAuthor.articles.push(foundArticle);
foundAuthor.save(function(){
res.redirect('/authors/' + req.params.id + '/edit');
})
}); });
}); });
}); });
router.delete('/:authorId/articles/:articleId', function(req, res){
Author.findById(req.params.authorId, function(err, foundAuthor){
foundAuthor.articles.id(req.params.articleId).remove();
foundAuthor.save(function(){
res.redirect('/authors/' + req.params.authorId + '/edit');
})
});
});
module.exports = router; module.exports = router;

@ -22,9 +22,21 @@
<h2>Article Attributes:</h2> <h2>Article Attributes:</h2>
<form action="/articles/<%=article._id%>?_method=PUT" method="post"> <form action="/articles/<%=article._id%>?_method=PUT" method="post">
<input type="text" name="title" value="<%=article.title%>"/><br/> <input type="text" name="title" value="<%=article.title%>"/><br/>
<textarea name="body"> <textarea name="body"><%=article.body%></textarea><br/>
<%=article.body%> Choose and author:
</textarea><br/> <select name="authorId">
<% for(var currentAuthorIndex = 0; currentAuthorIndex < authors.length; currentAuthorIndex++) { %>
<%
var isAuthor = false;
for(var currentArticleIndex = 0; currentArticleIndex < authors[currentAuthorIndex].articles.length; currentArticleIndex++){
if(authors[currentAuthorIndex].articles[currentArticleIndex]._id.toString() == article._id.toString()){
isAuthor = true;
}
}
%>
<option value="<%=authors[currentAuthorIndex]._id %>" <%=(isAuthor)?'selected':''%>><%=authors[currentAuthorIndex].name %></option>
<% } %>
</select><br/>
<input type="submit" value="Update Article"/> <input type="submit" value="Update Article"/>
</form> </form>
</main> </main>

@ -22,6 +22,12 @@
<form action="/articles" method="post"> <form action="/articles" method="post">
<input type="text" name="title" /><br/> <input type="text" name="title" /><br/>
<textarea name="body"></textarea><br/> <textarea name="body"></textarea><br/>
Choose and author:
<select name="authorId">
<% for(var i = 0; i < authors.length; i++) { %>
<option value="<%=authors[i]._id %>"><%=authors[i].name %></option>
<% } %>
</select><br/>
<input type="submit" value="Publish Article"/> <input type="submit" value="Publish Article"/>
</form> </form>
</main> </main>

@ -6,7 +6,7 @@
</head> </head>
<body> <body>
<header> <header>
<h1><%=article.title%></h1> <h1><%=article.title%> by <a href="/authors/<%=author._id%>"><%=author.name%></a></h1>
<nav> <nav>
<ul> <ul>
<li> <li>

@ -13,46 +13,17 @@
<a href="/">Home</a> <a href="/">Home</a>
</li> </li>
<li> <li>
<a href="/authors/<%=author._id%>"><%=author.name%>'s Show Page</a> <a href="/authors">Authors Index</a>
</li> </li>
</ul> </ul>
</nav> </nav>
</header> </header>
<main> <main>
<section> <h2>Author Attributes:</h2>
<h2>Author Attributes:</h2> <form action="/authors/<%=author._id%>?_method=PUT" method="post">
<form action="/authors/<%=author._id%>?_method=PUT" method="post"> <input type="text" name="name" value="<%=author.name%>"/><br/>
<input type="text" name="name" value="<%=author.name%>"/><br/> <input type="submit" value="Update Author"/>
<input type="submit" value="Update Author"/> </form>
</form>
</section>
<section>
<h2>Articles Written By This Author</h2>
<ul>
<% for(var i = 0; i < author.articles.length; i++) { %>
<li>
<%=author.articles[i].title%>
<form action="/authors/<%=author._id%>/articles/<%=author.articles[i]._id%>?_method=DELETE" method="post">
<input type="submit" value="Remove This Author's Attribution from This Article" />
</form>
</li>
<% } %>
</ul>
</section>
<section>
<h2>Articles Not Written By This Author</h2>
<ul>
<% for(var i = 0; i < articles.length; i++) { %>
<li>
<%=articles[i].title%>
<form action="/authors/<%=author._id%>/articles" method="post">
<input type="hidden" name="articleId" value="<%=articles[i]._id%>">
<input type="submit" value="Attribute Article To This Author" />
</form>
</li>
<% } %>
</ul>
</section>
</main> </main>
</body> </body>
</html> </html>

@ -28,8 +28,8 @@
<section> <section>
<h2>Articles Written By This Author</h2> <h2>Articles Written By This Author</h2>
<ul> <ul>
<% for(var i = 0; i < author.articles.length; i++) { %> <% for(var i = 0; i < author.articles.length; i++){ %>
<li><%=author.articles[i].title%></li> <li><a href="/articles/<%=author.articles[i]._id%>"><%=author.articles[i].title%></a></li>
<% } %> <% } %>
</ul> </ul>
</section> </section>

Loading…
Cancel
Save