diff --git a/app.js b/app.js index f5571c0..d26dbdd 100644 --- a/app.js +++ b/app.js @@ -6,8 +6,9 @@ var logger = require("morgan"); var indexRouter = require("./routes/index"); var usersRouter = require("./routes/users"); - +var batchleader = require("./routes/batchleader"); var passport = require("passport"); +const registerBatchLeader = require("./routes/batchleader"); var app = express(); @@ -26,12 +27,13 @@ require("./middlewares/passport")(passport); app.use("/", indexRouter); app.use("/users", usersRouter); +app.use("/",registerBatchLeader) // catch 404 and forward to error handler app.use(function (req, res, next) { next(createError(404)); }); - +app.listen(8081); // error handler app.use(function (err, req, res, next) { // set locals, only providing error in development diff --git a/contollers/getData.js b/contollers/getData.js new file mode 100644 index 0000000..2bf53df --- /dev/null +++ b/contollers/getData.js @@ -0,0 +1,13 @@ +const Scrum = require("../models/scrum"); +const getData = async (req, res) => { + const id = req.id; + try { + data = await Scrum.findAll({ where: { user_id: id } }); + res.status(200).json({ data: data, success: true }); + } catch (err) { + res.status(500).json({ + success: false, + }); + } +}; +module.exports = getData; diff --git a/contollers/loginBatchLeader.js b/contollers/loginBatchLeader.js new file mode 100644 index 0000000..61db07f --- /dev/null +++ b/contollers/loginBatchLeader.js @@ -0,0 +1,60 @@ +const User = require("../models/user"); +const bcrypt = require("bcrypt"); +const jwt = require("jsonwebtoken"); +const { secret } = require("../config/index"); +const loginBatchLeader = async (req, res) => { + const { username, password } = req.body; + let user = await User.findOne({ where: { username: username } }); + // User.update + console.log("user =", user); + + if (!user) { + return res.status(404).json({ + message: "You are not registered", + success: false, + }); + } + + if (user.role !== "bl") { + return res.status(403).json({ + message: "Make sure you are in the correct portal", + success: false, + }); + } + + const passwordMatch = await bcrypt.compare(password, user.password); + if (passwordMatch) { + //Making jwt token + let token = jwt.sign( + { + user_id: user._id, + role: user.role, + username: user.username, + email: user.email, + }, + secret, + { + expiresIn: "15 days", + } + ); + + const result = { + role: user.role, + username: user.username, + email: user.email, + token: `Bearer ${token}`, + expiresIn: 168, + }; + return res.status(200).json({ + ...result, + message: "Logedin", + success: true, + }); + } else { + return res.status(403).json({ + message: "Incorrect password", + success: false, + }); + } +}; +module.exports = loginBatchLeader; \ No newline at end of file diff --git a/contollers/registerBatchLeader.js b/contollers/registerBatchLeader.js new file mode 100644 index 0000000..ff19a05 --- /dev/null +++ b/contollers/registerBatchLeader.js @@ -0,0 +1,36 @@ +const User = require("../models/user"); +const bcrypt = require("bcrypt") +const registerBatchLeader = async (req, res)=>{ + const {firstName, lastName, email, password, username} = req.body; + try { + const alreadyExists = await User.findOne({where:{ email:"email"}}); + console.log("checking of aldready exists", alreadyExists); + if (alreadyExists) { + res.status(401).send("Oops! Email already exists"); + } else { + const salt = bcrypt.genSaltSync(12); + const hash = bcrypt.hashSync(password, salt); + const newUser = new User({ + firstName: firstName, + lastName: lastName, + role: "bl", + email: email, + password: hash, + username: username + }); + + const savedUser = await newUser.save(); + res.status(201).json({ + message: "You have been registered", + user : savedUser, + success: true + }); + } + } catch (err) { + console.error(err); + res.status(500).send(err); + } + }; + + +module.exports = registerBatchLeader; diff --git a/contollers/updateData.js b/contollers/updateData.js new file mode 100644 index 0000000..7e87575 --- /dev/null +++ b/contollers/updateData.js @@ -0,0 +1,47 @@ +const Scrum = require("../models/scrum"); +const updateData = async (req, res) => { + const { + id, + attendance, + saw_last_lecture, + tha_progress, + topics_to_cover, + backlog_reasons, + class_rating, + user_id, + } = req.body; + try { + const isUserExists = await Scrum.findOne({where: {user_id: user_id}}) + if(! isUserExists) + { + res.status(200).json({ + success: true, + message: "user does not existe" + }); + } + + const updatedData = await Scrum.update( + { + id: id, + attendance, + attendance, + saw_last_lecture: saw_last_lecture, + tha_progress: tha_progress, + topics_to_cover: topics_to_cover, + backlog_reasons: backlog_reasons, + class_rating: class_rating, + }, + { where: { user_id: user_id } } + ); + res.status(201).json({ + success: true, + message: "Upadated successfully", + user: updatedData + }) + } catch (err) { + res.status(500).json({ + success: false, + message: "something went wrong" + }) + } +}; diff --git a/controllers/.gitignore b/controllers/.gitignore new file mode 100644 index 0000000..37d7e73 --- /dev/null +++ b/controllers/.gitignore @@ -0,0 +1,2 @@ +node_modules +.env diff --git a/controllers/getData.js b/controllers/getData.js new file mode 100644 index 0000000..4e32b9a --- /dev/null +++ b/controllers/getData.js @@ -0,0 +1,6 @@ +const User = require("../models/user"); +const Team = require("../models/team"); +const getData = (req,res)=>{ + const {teamName} = req.body; + +} \ No newline at end of file diff --git a/controllers/loginBatchLeader.js b/controllers/loginBatchLeader.js new file mode 100644 index 0000000..10c01c8 --- /dev/null +++ b/controllers/loginBatchLeader.js @@ -0,0 +1,58 @@ +const Team = require("../models/team"); +const User = require("../models/user"); +const bcryt = require("bcrypt"); +const { validateUsername } = require("../utils/auth"); +const loginBatchLeader = async (req, res) => { + const { username, password } = req.body; + const user = await validateUsername(username); + + if (!user) { + return res.status(404).json({ + message: "You are not registered", + success: false, + }); + } + + if (user.role !== "bl") { + return res.status(403).json({ + message: "Make sure you are in the correct portal", + success: false, + }); + } + + const passwordMatch = await bcrypt.compare(password, user.password); + if (passwordMatch) { + //Making jwt token + let token = jwt.sign( + { + user_id: user._id, + role: user.role, + username: user.username, + email: user.email, + }, + secret, + { + expiresIn: "15 days", + } + ); + + const result = { + role: user.role, + username: user.username, + email: user.email, + token: `Bearer ${token}`, + expiresIn: 168, + }; + return res.status(200).json({ + ...result, + message: "Logedin", + success: true, + }); + } else { + return res.status(403).json({ + message: "Incorrect password", + success: false, + }); + } +}; +module.exports = loginBatchLeader; \ No newline at end of file diff --git a/controllers/registerBatchLeader.js b/controllers/registerBatchLeader.js new file mode 100644 index 0000000..4bea4a0 --- /dev/null +++ b/controllers/registerBatchLeader.js @@ -0,0 +1,37 @@ +const User = require("../models/user"); +const bcrypt = require("bcrypt") +const jwt = require("jsonwebtoken"); +const registerBatchLeader = async (req, res)=>{ + const {firstName, lastName, email, password, userName} = req.body; + try { + const alreadyExists = await User.findOne({ where: {email: email } }); + console.log("checking of aldready exists", alreadyExists); + if (alreadyExists) { + res.status(401).send("Oops! Email already exists"); + } else { + const salt = bcrypt.genSaltSync(12); + const hash = bcrypt.hashSync(password, salt); + const newUser = new User({ + firstName: firstName, + lastName: lastName, + role: "bl", + email: email, + password: hash, + userName: userName + }); + + const savedUser = await newUser.save(); + res.status(201).json({ + message: "You have been registered", + user : savedUser, + success: true + }); + } + } catch (err) { + console.error(err); + res.status(500).send("something went wrong"); + } + }; + + +module.exports = registerBatchLeader; diff --git a/middlewares/initialChecks.js b/middlewares/initialChecks.js index 4070c25..8a2711c 100644 --- a/middlewares/initialChecks.js +++ b/middlewares/initialChecks.js @@ -15,25 +15,27 @@ const validatePassword = (password) => { }; const initialChecks = (req, res, next) => { - const { username, email, password, confirmPassword } = req.body; - console.log(req.body); + const {username, email, password, confirmPassword } = req.body; + console.log(req.body); - if ( - // typeof username === 'string' && - typeof email === "string" && - typeof password === "string" && - typeof confirmPassword === "string" && - email.length > 0 && - password.length > 0 && - confirmPassword === password && - // validateUsername(username) && - validateEmail(email) && - validatePassword(password) - ) { - next(); - } else { - res.status(401).send("Initital checks failed !!!"); - } -}; + if ( + typeof username === 'string' && + typeof email === 'string' && + typeof password === 'string' && + typeof confirmPassword === 'string' && + email.length > 0 && + password.length > 0 && + confirmPassword === password && + validateUsername(username) && + validateEmail(email) && validatePassword(password) + ) { + next(); + } else { + console.log(); + res.status(401).send("Initital checks failed !!!"); + + } + +} module.exports = initialChecks; diff --git a/models/user.js b/models/user.js index bd9fb27..9905ac0 100644 --- a/models/user.js +++ b/models/user.js @@ -1,7 +1,7 @@ const { DataTypes } = require("sequelize"); const sequelize = require("../database"); -const User = sequelize.define("Users", { +const User = sequelize.define("User", { //Model attributes id: { type: DataTypes.INTEGER, diff --git a/package.json b/package.json index 0dd0bd3..38c9566 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "bcrypt": "^5.0.1", "cookie-parser": "~1.4.4", "debug": "~2.6.9", - "dotenv": "^10.0.0", + "dotenv": "^10.0.0", "express": "^4.17.1", "http-errors": "~1.6.3", "jade": "~1.11.0", diff --git a/routes/batchleader.js b/routes/batchleader.js new file mode 100644 index 0000000..c1589bf --- /dev/null +++ b/routes/batchleader.js @@ -0,0 +1,15 @@ +const express = require("express"); +const router = express.Router(); +const initialChecks = require('../middlewares/initialChecks'); +const getData = require("../contollers/getData"); +const loginBatchLeader = require("../contollers/loginBatchLeader");; +const registerBatchLeader = require('../contollers/registerBatchLeader'); +router.get("/bl", (req,res)=>{ + res.status(200).send("welcome to batchleader Route"); +}) +router.post("/batch-leader-login" ,loginBatchLeader); +router.post("/batch-leader-register",initialChecks,registerBatchLeader); +router.post("/get-data",getData); +router.post("/updata-data",) + +module.exports = router; \ No newline at end of file diff --git a/utils/auth.js b/utils/auth.js index 422e99c..2cb1e9d 100644 --- a/utils/auth.js +++ b/utils/auth.js @@ -111,7 +111,7 @@ const checkRole = (roles) => (req, res, next) => { const validateUsername = async (username) => { //find the row where the username is found - let user = await User.findOne({ where: { username } }); + let user = await User.findOne({ where: { username:username } }); console.log("validate username ", user); //will return null if user not found