Provide feedback
This commit is contained in:
parent
c45e8ea2b2
commit
4ad637867e
|
@ -0,0 +1,33 @@
|
|||
'use strict';
|
||||
|
||||
module.exports = {
|
||||
up: (queryInterface, Sequelize) => {
|
||||
return queryInterface.createTable('feedback', {
|
||||
id: {
|
||||
type: Sequelize.BIGINT,
|
||||
primaryKey: true,
|
||||
autoIncrement: true
|
||||
},
|
||||
route: {
|
||||
type: Sequelize.TEXT,
|
||||
defaultValue: '/',
|
||||
allowNull: false
|
||||
},
|
||||
email: {
|
||||
type: Sequelize.TEXT
|
||||
},
|
||||
stars: {
|
||||
type: Sequelize.INTEGER
|
||||
},
|
||||
text: {
|
||||
type: Sequelize.TEXT
|
||||
}
|
||||
}, {
|
||||
charset: 'utf8mb4'
|
||||
})
|
||||
},
|
||||
|
||||
down: (queryInterface, Sequelize) => {
|
||||
return queryInterface.dropTable('awards');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
module.exports = {
|
||||
up(queryInterface, Sequelize) {
|
||||
return Promise.all([
|
||||
queryInterface.addColumn(
|
||||
'feedback',
|
||||
'createdAt',
|
||||
{
|
||||
type: Sequelize.DATE,
|
||||
},
|
||||
),
|
||||
queryInterface.addColumn(
|
||||
'feedback',
|
||||
'updatedAt',
|
||||
{
|
||||
type: Sequelize.DATE,
|
||||
},
|
||||
),
|
||||
]);
|
||||
},
|
||||
};
|
|
@ -0,0 +1,40 @@
|
|||
const Errors = require('../lib/errors')
|
||||
|
||||
module.exports = (sequelize, DataTypes) => {
|
||||
let Feedback = sequelize.define('Feedback', {
|
||||
id: {
|
||||
type: DataTypes.BIGINT,
|
||||
primaryKey: true,
|
||||
autoIncrement: true
|
||||
},
|
||||
route: {
|
||||
type: DataTypes.TEXT,
|
||||
defaultValue: '/',
|
||||
allowNull: false
|
||||
},
|
||||
email: {
|
||||
type: DataTypes.TEXT,
|
||||
validate: {
|
||||
isEmail: true
|
||||
}
|
||||
},
|
||||
stars: {
|
||||
type: DataTypes.INTEGER,
|
||||
validate: {
|
||||
min: 1,
|
||||
max: 5
|
||||
}
|
||||
},
|
||||
text: {
|
||||
type: DataTypes.TEXT,
|
||||
validate: {
|
||||
len: [5, 512]
|
||||
}
|
||||
},
|
||||
createdAt: DataTypes.DATE,
|
||||
updatedAt: DataTypes.DATE
|
||||
}, {
|
||||
freezeTableName: true
|
||||
})
|
||||
return Feedback
|
||||
}
|
|
@ -1,81 +0,0 @@
|
|||
const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
const User = require("../models/user.js")
|
||||
|
||||
//login handle
|
||||
router.get('/login',(req,res)=>{
|
||||
res.render('login');
|
||||
})
|
||||
|
||||
router.get('/register',(req,res)=>{
|
||||
res.render('register')
|
||||
})
|
||||
//Register handle
|
||||
router.post('/register',(req,res)=>{
|
||||
const {name,email, password, password2} = req.body;
|
||||
let errors = [];
|
||||
console.log(' Name ' + name+ ' email :' + email+ ' pass:' + password);
|
||||
if(!name || !email || !password || !password2) {
|
||||
errors.push({msg : "Please fill in all fields"})
|
||||
}
|
||||
//check if match
|
||||
if(password !== password2) {
|
||||
errors.push({msg : "passwords dont match"});
|
||||
}
|
||||
|
||||
//check if password is more than 6 characters
|
||||
if(password.length < 6 ) {
|
||||
errors.push({msg : 'password atleast 6 characters'})
|
||||
}
|
||||
if(errors.length > 0 ) {
|
||||
res.render('register', {
|
||||
errors : errors,
|
||||
name : name,
|
||||
email : email,
|
||||
password : password,
|
||||
password2 : password2})
|
||||
} else {
|
||||
//validation passed
|
||||
User.findOne({email: email}).exec((err, user) => {
|
||||
console.log(user);
|
||||
if (user) {
|
||||
errors.push({msg: 'email already registered'});
|
||||
render(res, errors, name, email, password, password2);
|
||||
|
||||
} else {
|
||||
const newUser = new User({
|
||||
name: name,
|
||||
email: email,
|
||||
password: password
|
||||
});
|
||||
//hash password
|
||||
bcrypt.genSalt(10, (err, salt) =>
|
||||
bcrypt.hash(newUser.password, salt,
|
||||
(err, hash) => {
|
||||
if (err) throw err;
|
||||
//save pass to hash
|
||||
newUser.password = hash;
|
||||
//save user
|
||||
newUser.save()
|
||||
.then((value) => {
|
||||
console.log(value)
|
||||
res.redirect('/users/login');
|
||||
})
|
||||
.catch(value => console.log(value));
|
||||
|
||||
}));
|
||||
} //ELSE statement ends here
|
||||
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
router.post('/login',(req,res,next)=>{
|
||||
|
||||
})
|
||||
|
||||
//logout
|
||||
router.get('/logout',(req,res)=>{
|
||||
})
|
||||
module.exports = router;
|
|
@ -0,0 +1,22 @@
|
|||
let express = require('express')
|
||||
let router = express.Router()
|
||||
const auth = require('../lib/auth')
|
||||
|
||||
const Errors = require('../lib/errors')
|
||||
let { Feedback } = require('../models')
|
||||
let pagination = require('../lib/pagination.js')
|
||||
const rateLimit = require("express-rate-limit");
|
||||
const postLimiter = rateLimit({
|
||||
windowMs: 60000,
|
||||
max: 10,
|
||||
message: "{\"errors\":[{\"name\":\"rateLimit\",\"message\":\"You may only make 10 requests to this endpoint per minute.\",\"status\":429}]}"
|
||||
});
|
||||
|
||||
router.post('/', postLimiter, async(req, res, next) => {
|
||||
try {
|
||||
let feedback = await Feedback.create({route: req.body.route, text: req.body.text, stars: req.body.stars, email: req.body.email})
|
||||
res.json(feedback)
|
||||
} catch (e) { next(e) }
|
||||
})
|
||||
|
||||
module.exports = router
|
|
@ -27,7 +27,8 @@ router.get('/show/:username', async(req, res, next) => {
|
|||
let meta = await user.getMeta(limit)
|
||||
let Posts = await teamWall.find(postInclude)
|
||||
|
||||
res.json(Object.assign( user.toJSON(limit), { meta, Posts } )) } catch (e) { next(e) }
|
||||
res.json(Object.assign( user.toJSON(limit), { meta, Posts } ))
|
||||
} catch (e) { next(e) }
|
||||
})
|
||||
|
||||
router.all('*', auth, (req, res, next) => {
|
||||
|
|
|
@ -123,6 +123,7 @@ if(!config.maintenance) {
|
|||
app.use('/api/v1/nodes/', require('./routes/node'))
|
||||
app.use('/api/v1/awards/', require('./routes/award'))
|
||||
app.use('/api/v1/blog', require('./routes/blog'))
|
||||
app.use('/api/v1/feedback', require('./routes/feedback'))
|
||||
app.use(require('./lib/errorHandler'))
|
||||
app.set('trust proxy', true)
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue