Skip to content

Commit

Permalink
Added in Chart and Admin
Browse files Browse the repository at this point in the history
Added in a visual chart to show questions and a admin function to delete users and update to admin
  • Loading branch information
AlexanderDoerr committed Aug 27, 2022
1 parent 101387c commit ed038cf
Show file tree
Hide file tree
Showing 10 changed files with 323 additions and 18 deletions.
3 changes: 3 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ app.use('', indexRouter);
const usersRouter = require('./routes/users');
app.use('/u', usersRouter);

const apiRouter = require("./routes/api");
app.use('/api', apiRouter);

app.listen(port, () => {
console.log(`Server is running on port ${port}`);
} );
75 changes: 73 additions & 2 deletions data/mongoDAL.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,32 @@ const updateUser = async (findKey, updateValues) => {

}

////////////////////////////////////////////////////////////////////////////////

const updateUserAdmin = async (findKey, updateValues) => {
const client = await MongoClient.connect(uri);

try{
const db = client.db(dbName);
const collection = db.collection(collectionName);

const filter = {Username: findKey};

var results = await collection.updateOne(filter, {$set: updateValues});

console.log("updateUserAdmin: results");
console.log(results);

return results;
}catch(err){
console.log("updateUserAdmin: Some error happened");
console.log(err);
}finally{
client.close();
}

}

/////////////////////////////////////////////////////////////////////////////////

const findUser = async (key, value) => {
Expand Down Expand Up @@ -60,7 +86,7 @@ const findUser = async (key, value) => {

//////////////////////////////////////////////////////////////////////////

const addUser = async (username, password, email, age, questions) => {
const addUser = async (username, password, email, age, admin, questions) => {
const client = await MongoClient.connect(uri);

try{
Expand All @@ -73,6 +99,7 @@ const addUser = async (username, password, email, age, questions) => {
Password: password,
Email: email,
Age: age,
Admin: admin,
questions: [
questions[0],
questions[1],
Expand All @@ -93,6 +120,50 @@ const addUser = async (username, password, email, age, questions) => {

///////////////////////////////////////////////////////////////////////////

const findQuestions = async () => {
const client = await MongoClient.connect(uri);

try{
const db = client.db(dbName);
const collection = db.collection(collectionName);

var query = {questions: {$exists: true}};
var results = await collection.find(query).toArray();

return results;
}catch(err){
console.log("findQuestions: Some error happened");
console.log(err);
}finally{
client.close();
}
}

///////////////////////////////////////////////////////////////////////////

// find and delete a user
const deleteUser = async (findKey) => {
const client = await MongoClient.connect(uri);

try{
const db = client.db(dbName);
const collection = db.collection(collectionName);

var query = {Username: findKey};
var results = await collection.deleteOne(query);

return results;
}catch(err){
console.log("deleteUser: Some error happened");
console.log(err);
}finally{
client.close();
}
}

exports.findUser = findUser;
exports.addUser = addUser;
exports.updateUser = updateUser;
exports.updateUser = updateUser;
exports.findQuestions = findQuestions;
exports.deleteUser = deleteUser;
exports.updateUserAdmin = updateUserAdmin;
90 changes: 90 additions & 0 deletions public/JS/site.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
const ctx = document.getElementById('myChart').getContext('2d');

const url = 'http://localhost:3000/api/getanswers';

fetch(url)
.then(response => response.json())
.then(data => {
console.log(data);
setUpPieChart(data.labels, data.data);
});


const setUpBarChart = (labels, data) => {
const myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: '# of Votes',
data: data,
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
}

const setUpPieChart = (labels, data) => {
const myChart = new Chart(ctx, {
type: 'doughnut',
data :{
labels: [
'Red',
'Blue',
'Green',
'Dog',
'Cat',
'Fish',
'Pizza',
'Pasta',
'Sushi'
],
datasets: [{
label: labels,
data: data,
backgroundColor: [
'rgb(255, 99, 132)',
'rgb(54, 162, 235)',
'rgb(3, 252, 3)',
'rgb(75, 192, 192)',
'rgb(153, 102, 255)',
'rgb(255, 159, 64)',
'rgb(255, 205, 86)',
'rgb(7, 3, 252)',
'rgb(252, 3, 3)'
],
hoverOffset: 4
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
}
54 changes: 54 additions & 0 deletions routes/api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
const express = require('express');
const router = express.Router();

const dal = require('../data/mongoDAL');

router.get("/", (req, res) => {
var resultJson = {
data: [
{
name: "Ark",
likes: 50
}
]
}
res.json(resultJson);
});

router.get("/getanswers", async (req, res) => {
let answerToQuestion = await dal.findQuestions();
let red = 0;
let blue = 0;
let green = 0;
let dog = 0;
let cat = 0;
let fish = 0;
let pizza = 0;
let pasta = 0;
let sushi = 0;

for(let i = 0; i < answerToQuestion.length; i++){
for(let j = 0; j < answerToQuestion[i].questions.length; j++){
switch(answerToQuestion[i].questions[j]){
case "red": red++; break;
case "blue": blue++; break;
case "green": green++; break;
case "dog": dog++; break;
case "cat": cat++; break;
case "fish": fish++; break;
case "pizza": pizza++; break;
case "pasta": pasta++; break;
case "sushi": sushi++; break;
default: break;
}
}
}

var resultJson = {
labels: ["Red", "Blue", "Green", "Dog", "Cat", "Fish", "Pizza", "Pasta", "Sushi"],
data: [red, blue, green, dog, cat, fish, pizza, pasta, sushi]
}
res.json(resultJson);
});

module.exports = router;
48 changes: 41 additions & 7 deletions routes/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,12 @@ router.post("/login", async (req, res) => {
let user = {
username: username,
userId: userLogin._id,
isAdmin: false
isAdmin: userLogin.Admin
}
console.log(`UserID: ${user.userId}`);

req.session.user = user;
res.redirect("/u/profile");
// res.render("profile");
}else{
// Invalid Login!
let model = {
ErrorMessage: "Invalid Login!",
username: username,
Expand All @@ -56,7 +53,8 @@ router.get("/logout", async (req, res) => {
////////////////////////////////////////////////////////////////////////////

router.get("/profile", async (req, res) => {
let userInfo = await dal.findUser('Username', req.session.user.username);
let userInfo = await dal.findUser('Username', req.session.user.username);
console.log(req.session.user.username);

let model = {
loggedInUser: req.session.user,
Expand All @@ -68,6 +66,7 @@ router.get("/profile", async (req, res) => {
question1: userInfo.questions[0],
question2: userInfo.questions[1],
question3: userInfo.questions[2],
isAdmin: userInfo.Admin
};

console.log(`This is the ID on the Profile.get : ${model.loggedInUser.userId}`);
Expand Down Expand Up @@ -139,7 +138,11 @@ router.post("/profile", async (req, res) => {
/////////////////////////////////////////////////////////////////////////

router.get("/register", (req, res) => {
res.render('register');
let model = {
loggedInUser: req.session.user
};

res.render("register", model);
})

router.post("/register", async (req, res) => {
Expand All @@ -148,6 +151,7 @@ router.post("/register", async (req, res) => {
let confirmPassword = req.body.confirmPassword;
let email = req.body.email;
let age = req.body.age;
let admin = false;
let questions = [
req.body.question1,
req.body.question2,
Expand All @@ -157,7 +161,7 @@ router.post("/register", async (req, res) => {
let hashedPassword = await bcrypt.hash(password, 10);

if(password == confirmPassword && password != "" && username != "" && email != "" && age != "" && questions[0] != undefined && questions[1] != undefined && questions[2] != undefined){
let result = await dal.addUser(username, hashedPassword, email, age, questions);
let result = await dal.addUser(username, hashedPassword, email, age, admin, questions);
res.redirect("/u/login");
}else {
let model = {
Expand All @@ -172,5 +176,35 @@ router.post("/register", async (req, res) => {

///////////////////////////////////////////////////////////////////////////////

router.get("/admin", async (req, res) => {
let model = {
loggedInUser: req.session.user
};

res.render("admin", model);
})

router.post("/admin", async (req, res) => {
let username = req.body.findUsername;
let selection = req.body.selection;
console.log(selection);

if(selection == "delete" && username != ""){
await dal.deleteUser(username);
console.log(`Deleted user ${username}`);
res.redirect("admin");
}else if(selection == "changeAdmin" && username != ""){
await dal.updateUserAdmin(username, {Admin: true});
console.log(`Made user ${username} an Admin`);
res.redirect("admin");
} else {
let model = {
ErrorMessage: "Username not found",
username: username
}
res.render("admin", model);
}
})


module.exports = router;
Loading

0 comments on commit ed038cf

Please sign in to comment.