Skip to content

Commit 6565a28

Browse files
Merge branch '100xdevs-cohort-2:master' into master
2 parents bf01b58 + 44221a6 commit 6565a28

File tree

15 files changed

+491
-190
lines changed

15 files changed

+491
-190
lines changed

week-3/03-mongo/solution/db/index.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
const mongoose = require('mongoose');
2+
3+
// Connect to MongoDB
4+
mongoose.connect('mongodb+srv://kirags123:[email protected]/course_selling_app');
5+
6+
// Define schemas
7+
const AdminSchema = new mongoose.Schema({
8+
// Schema definition here
9+
username: String,
10+
password: String
11+
});
12+
13+
const UserSchema = new mongoose.Schema({
14+
// Schema definition here
15+
username: String,
16+
password: String,
17+
purchasedCourses: [{
18+
type: mongoose.Schema.Types.ObjectId,
19+
ref: 'Course'
20+
}]
21+
});
22+
23+
const CourseSchema = new mongoose.Schema({
24+
// Schema definition here
25+
title: String,
26+
description: String,
27+
imageLink: String,
28+
price: Number
29+
});
30+
31+
const Admin = mongoose.model('Admin', AdminSchema);
32+
const User = mongoose.model('User', UserSchema);
33+
const Course = mongoose.model('Course', CourseSchema);
34+
35+
module.exports = {
36+
Admin,
37+
User,
38+
Course
39+
}

week-3/03-mongo/solution/index.js

Lines changed: 0 additions & 95 deletions
This file was deleted.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const { Admin } = require("../db");
2+
3+
// Middleware for handling auth
4+
function adminMiddleware(req, res, next) {
5+
// Implement admin auth logic
6+
// You need to check the headers and validate the admin from the admin DB. Check readme for the exact headers to be expected
7+
const username = req.headers.username; // harkirat@gmail.com
8+
const password = req.headers.password; /// 123456
9+
10+
Admin.findOne({
11+
username: username,
12+
password: password
13+
})
14+
.then(function(value) {
15+
if (value) {
16+
next();
17+
} else {
18+
res.status(403).json({
19+
msg: "Admin doesnt exist"
20+
})
21+
}
22+
})
23+
}
24+
25+
module.exports = adminMiddleware;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const { User } = require("../db");
2+
3+
function userMiddleware(req, res, next) {
4+
// Implement admin auth logic
5+
// You need to check the headers and validate the admin from the admin DB. Check readme for the exact headers to be expected
6+
const username = req.headers.username; // harkirat@gmail.com
7+
const password = req.headers.password; /// 123456
8+
9+
User.findOne({
10+
username: username,
11+
password: password
12+
})
13+
.then(function(value) {
14+
if (value) {
15+
next();
16+
} else {
17+
res.status(403).json({
18+
msg: "User doesnt exist"
19+
})
20+
}
21+
})
22+
}
23+
24+
module.exports = userMiddleware;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const express = require("express");
2+
const adminMiddleware = require("../middleware/admin");
3+
const { Admin, Course } = require("../db");
4+
const router = express.Router();
5+
6+
router.post('/signup', async (req, res) => {
7+
// Implement admin signup logic
8+
const username = req.body.username;
9+
const password = req.body.password;
10+
11+
// check if a user with this username already exists
12+
await Admin.create({
13+
username: username,
14+
password: password
15+
})
16+
17+
res.json({
18+
message: 'Admin created successfully'
19+
})
20+
21+
});
22+
23+
router.post('/courses', adminMiddleware, async (req, res) => {
24+
// Implement course creation logic
25+
const title = req.body.title;
26+
const description = req.body.description;
27+
const imageLink = req.body.imageLink;
28+
const price = req.body.price;
29+
// zod
30+
const newCourse = await Course.create({
31+
title,
32+
description,
33+
imageLink,
34+
price
35+
})
36+
37+
res.json({
38+
message: 'Course created successfully', courseId: newCourse._id
39+
})
40+
});
41+
42+
router.get('/courses', adminMiddleware, async (req, res) => {
43+
// Implement fetching all courses logic
44+
const response = await Course.find({});
45+
46+
res.json({
47+
courses: response
48+
})
49+
50+
});
51+
52+
53+
module.exports = router;
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
const { Router } = require("express");
2+
const router = Router();
3+
const userMiddleware = require("../middleware/user");
4+
const { User, Course } = require("../db");
5+
const { default: mongoose } = require("mongoose");
6+
7+
// User Routes
8+
router.post('/signup', (req, res) => {
9+
// Implement user signup logic
10+
const username = req.body.username;
11+
const password = req.body.password;
12+
User.create({
13+
username,
14+
password
15+
})
16+
res.json({
17+
message: "User created successfully"
18+
})
19+
});
20+
21+
router.get('/courses', async (req, res) => {
22+
// Implement listing all courses logic
23+
// Implement fetching all courses logic
24+
const response = await Course.find({});
25+
26+
res.json({
27+
courses: response
28+
})
29+
});
30+
31+
router.post('/courses/:courseId', userMiddleware, async(req, res) => {
32+
// Implement course purchase logic
33+
const courseId = req.params.courseId;
34+
const username = req.headers.username;
35+
36+
await User.updateOne({
37+
username: username
38+
}, {
39+
"$push": {
40+
purchasedCourses: courseId
41+
}
42+
})
43+
res.json({
44+
message: "Purchase complete!"
45+
})
46+
});
47+
48+
router.get('/purchasedCourses', userMiddleware, async (req, res) => {
49+
// Implement fetching purchased courses logic
50+
const user = await User.findOne({
51+
username: req.headers.username
52+
});
53+
54+
console.log(user.purchasedCourses);
55+
const courses = await Course.find({
56+
_id: {
57+
"$in": user.purchasedCourses
58+
}
59+
});
60+
61+
res.json({
62+
courses: courses
63+
})
64+
});
65+
66+
module.exports = router
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
const mongoose = require('mongoose');
2+
3+
// Connect to MongoDB
4+
mongoose.connect('mongodb+srv://kirags123:[email protected]/course_selling_app2');
5+
6+
// Define schemas
7+
const AdminSchema = new mongoose.Schema({
8+
// Schema definition here
9+
username: String,
10+
password: String
11+
});
12+
13+
const UserSchema = new mongoose.Schema({
14+
// Schema definition here
15+
username: String,
16+
password: String,
17+
purchasedCourses: [{
18+
type: mongoose.Schema.Types.ObjectId,
19+
ref: 'Course'
20+
}]
21+
});
22+
23+
const CourseSchema = new mongoose.Schema({
24+
// Schema definition here
25+
title: String,
26+
description: String,
27+
imageLink: String,
28+
price: Number
29+
});
30+
31+
const Admin = mongoose.model('Admin', AdminSchema);
32+
const User = mongoose.model('User', UserSchema);
33+
const Course = mongoose.model('Course', CourseSchema);
34+
35+
module.exports = {
36+
Admin,
37+
User,
38+
Course
39+
}

0 commit comments

Comments
 (0)