Skip to content

Commit

Permalink
Merge pull request #1 from Verma314/aditya-verma
Browse files Browse the repository at this point in the history
added business logic for asking questions, added relevant controllers…
  • Loading branch information
Verma314 authored Jan 9, 2022
2 parents 3c0db7d + 6e1874a commit 20cb275
Show file tree
Hide file tree
Showing 6 changed files with 162 additions and 10 deletions.
2 changes: 2 additions & 0 deletions project/stackover/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
users.txt
72 changes: 72 additions & 0 deletions project/stackover/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Building a sample Q&A website such as StackOverflow or Reddit

## to do

* [X] login, registeration
* [ ] adding HTTP error codes for faliure etc
* [X] mongodb connection
* [ ] refine login, registeration
* [ ] adding JWT tokens for login
* [X] adding session for _logged in_ user
* [X] creating endpoint for asking a question
* [ ] GET endpoint for enumerating all questions
* [ ] POST endpoint for answering a question
* [ ] GET endpoint for enumerating answers to a question
* [ ] Endpoint to upvote a question or an answer
* [ ] Endpoint to get stats of a user
* [ ] Deploying this to cloud



## Objects

### 1. User
- username
- password

### 2. Post
- ```question```
- List of ```Answer```s
- ```User```

### 3. Question
- ```Statement```
- List of ```Answer``` strings
- ```Upvotes```
- ```User```

### 4. Answer
- ```Statement```
- ```Upvotes```
- ```User```

--

## Public Endpoints
1. POST http://localhost:8080/login

Header:
Content-Type: application/x-www-form-urlencoded

Body:
username - <username>
password - <password>

2. GET http://localhost:8080/session

to check who is logged in

3. GET http://localhost:8080/logout

to log the user out.

4. POST http://localhost:8080/register

to register a new user

Header:
Content-Type: application/x-www-form-urlencoded

Body:
username - <username>
password - <password>
41 changes: 41 additions & 0 deletions project/stackover/controller/routes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
const dbUtilsQnA = require('../dao/dbUtilsQnA')

module.exports = function (app) {

app.get('/', function (req, res) {
res.send('Hello world !');
});

app.post('/ask', function (req, res) {

//perform validations here on the req
console.log(req.body);
console.log( "Logged in user: " + req.session.loggedInUser);

if ( req.session.loggedInUser == null ) {
res.status(400).send("User not logged in!");
return;
}

req.body["username"] = req.session.loggedInUser;


dbUtilsQnA.askQuestion(req.body, function (result,err) {
if ( err == null ) {
res.send("Question Submitted!");
} else {
res.status(500).send("Failed to ask question!");
}

});

});


app.get('/2', function (req, res) {
res.send('Hello world !');
});



};
22 changes: 22 additions & 0 deletions project/stackover/dao/dbUtilsQnA.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
const MongoClient = require('mongodb').MongoClient
fs = require('fs');


const connectionString = "mongodb+srv://admin:[email protected]/Stackover?retryWrites=true&w=majority";

module.exports.askQuestion = function (questionObj, callback) {
MongoClient.connect(connectionString, (err, client) => {
if (err) return console.error(err)
console.log('Connected to Database')

const db = client.db('Stackover')
const question = db.collection('Questions')

question.insertOne(questionObj)
.then(result => {
console.log(result)
callback(result,null);
})
.catch(error => callback(null,error))
})
};
2 changes: 1 addition & 1 deletion project/stackover/dbUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ module.exports.login = function (userObj, printResponse) {
users.findOne(userObj, function (error, result) {
if (!error) {
if (result) {
printResponse("User exists -- you are logged in ", "OK");
printResponse("User exists -- you are now logged in ", "OK");
//set cookie or status that the user has logged in
} else {
printResponse("user does not exists -- or incorrect username/password","NON");
Expand Down
33 changes: 24 additions & 9 deletions project/stackover/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ const session = require('express-session')
const bodyParser = require('body-parser')
const app = express();

console.log('May Node be with you')

console.log('Server is up and running...')

// to do --> put these in a config file
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
// It holds the secret key for session
Expand All @@ -17,14 +18,12 @@ app.use(session({





app.listen(8080, function (req, res) {
console.log('listening on 8080')
})

// handers:
app.get('/', function (req, res) {
res.send("hi")
})

app.post('/register', (req, res) => {
dbUtils.registerUser(req.body);
Expand All @@ -41,18 +40,34 @@ app.post('/login', (req, res) => {
//setting logged in user in session

} else if ( status == "NON") {
// user is logged in
res.send(searchResponse);

} else {
res.send("Error in logging in. Please contact team")
}

});
});

//check session
app.post('/session', (req, res) => {
res.send(req.session.loggedInUser + " is logged in ");
console.log(req.session);
app.get('/logout', (req,res) => {
if (req.session.loggedInUser != null ) {
req.session.loggedInUser = null;
res.send("Logged the user out!")
} else {
res.send("No one is logged in!")
}
});

//check session, i.e. who is logged in
app.get('/session', (req, res) => {
if ( req.session.loggedInUser != null ) {
res.send(req.session.loggedInUser + " is logged in ");
console.log(req.session);
} else {
res.send("No user is logged in!")
}
});


require('./controller/routes.js')(app);

0 comments on commit 20cb275

Please sign in to comment.