Skip to content

Commit c1d63f8

Browse files
Add get course by Id logic. and fixed bug I accidently introduced into listening on proper port.
1 parent 5414b38 commit c1d63f8

7 files changed

Lines changed: 62 additions & 18 deletions

File tree

src/app.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ db.on('connected', function() {
4242
// Callback to populate DB once collections have been cleared
4343
seeder.populateModels(data, function() {
4444
console.log("Finished seeding Database!");
45+
4546
app.emit("appStarted"); //Emits an event to tell our tests it is ok to now test.
4647
});
4748
});

src/bin/www

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ var port = normalizePort(process.env.PORT || '3000');
1616
app.set('port', port);
1717
console.log("Listening on port", port);
1818

19-
2019
/**
2120
* Create HTTP server.
2221
*/
@@ -27,11 +26,10 @@ var server = http.createServer(app);
2726
* Listen on provided port, on all network interfaces.
2827
*/
2928

29+
server.listen(port); //Dont delete this >.>
3030
server.on('error', onError);
3131
server.on('listening', onListening);
3232

33-
34-
3533
/**
3634
* Normalize a port into a number, string, or false.
3735
*/

src/models/course.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
const mongoose = require('mongoose');
22
const Schema = mongoose.Schema;
3+
const User = require('./user');
4+
const Review = require('./review');
35

46
const CourseSchema = new mongoose.Schema({
57
user: {
@@ -44,6 +46,14 @@ const CourseSchema = new mongoose.Schema({
4446
]
4547
});
4648

49+
CourseSchema.methods.getUser = function(cb) {
50+
return User.findById(this.user, cb);
51+
};
52+
53+
CourseSchema.methods.getReview = function(index, cb) {
54+
return Review.findById(this.reviews[index], cb);
55+
};
56+
4757

4858
const Course = mongoose.model('Course', CourseSchema);
4959
module.exports = Course;

src/models/review.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const mongoose = require('mongoose');
22
const Schema = mongoose.Schema;
3+
const User = require('./user');
34

45
const ReviewSchema = new Schema({
56
user: {
@@ -21,6 +22,10 @@ const ReviewSchema = new Schema({
2122
}
2223
});
2324

25+
ReviewSchema.methods.getUser = function(cb) {
26+
return User.findById(this.user, cb);
27+
};
28+
2429

2530
const Review = mongoose.model('Review', ReviewSchema);
2631
module.exports = Review;

src/routes/course.js

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,34 @@ router.get('/', (req, res, next) => {
2222
});
2323
});
2424

25-
// router.get('/:courseId', (req, res, next) => {
26-
// Course.findbyId(req.params.courseId, (err, course) => {
27-
//
28-
//
29-
// });
30-
//
31-
// });
25+
router.get('/:courseId', (req, res, next) => {
26+
Course.findById(req.params.courseId, (err, course) => {
27+
Utils.isError(err, next);
28+
course.getUser((err1, user) => {
29+
Utils.isError(err1, next);
30+
course.user = user;
31+
let itemsProcessed = 0;
32+
course.reviews.forEach((courseReview, index, array) => {
33+
course.getReview(index, (err2, review) => {
34+
Utils.isError(err2, next);
35+
review.getUser((err3, reviewUser) => {
36+
Utils.isError(err3, next);
37+
review.user = reviewUser;
38+
course.reviews[index] = review;
39+
itemsProcessed++;
40+
if(itemsProcessed === array.length){
41+
res.locals.course = course;
42+
next();
43+
}
44+
});
45+
});
46+
});
47+
});
48+
});
49+
}, (req, res) => {
50+
let status = 200;
51+
return res.status(status).json({success: true, message: "Course Successfully retrieved!", status: status, course: res.locals.course });
52+
});
3253

3354
router.post('/', authorizeUser, (req, res, next) => {
3455
if(!req.body.title || !req.body.description){

src/utils.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,9 @@ export default class Utils {
44
err.status = status;
55
return next(err);
66
}
7+
static isError(err, next){
8+
if(err){
9+
return next(err);
10+
}
11+
}
712
}

test/course_test.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,18 @@ describe('Courses', () => {
4242
});
4343
});
4444

45-
// describe('/GET course', () => {
46-
// it('should GET a course when provided with valid ID', (done) => {
47-
//
48-
//
49-
//
50-
// });
51-
//
52-
// });
45+
describe('/GET course', () => {
46+
it('should GET a course when provided with valid ID', (done) => {
47+
chai.request(server)
48+
.get(courseIndexLink+'57029ed4795118be119cc43d')
49+
.end((err, res) => {
50+
res.body.should.have.property('message').equal("Course Successfully retrieved!");
51+
res.should.have.status(200);
52+
done();
53+
});
54+
});
55+
56+
});
5357

5458
describe('/POST courses', () => {
5559
it('should POST a course with proper fields and proper auth', (done) => {

0 commit comments

Comments
 (0)