Skip to content

Commit

Permalink
first day
Browse files Browse the repository at this point in the history
  • Loading branch information
Mehss committed Jun 11, 2021
1 parent 8458e46 commit 214b320
Show file tree
Hide file tree
Showing 16 changed files with 238 additions and 46 deletions.
12 changes: 6 additions & 6 deletions .env
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
SECRET_KEY_JWT="BluePeriod"
SECRET_KEY_JWT=BluePeriod

DEV_USERNAME = "postgres"
DEV_PASSWORD =
DEV_SERVER = "localhost"
DEV_DB = "kanban_db"
DEV_USERNAME=postgres
DEV_PASSWORD=
DEV_SERVER=localhost
DEV_DB=kanban_db

DEV_G_CLIENT_ID = 982085477024-6n2tpq82aracq5krun8e705oj863h0q2.apps.googleusercontent.com
DEV_G_CLIENT_ID=982085477024-6n2tpq82aracq5krun8e705oj863h0q2.apps.googleusercontent.com
8 changes: 8 additions & 0 deletions .env template
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
SECRET_KEY_JWT=

DEV_USERNAME=
DEV_PASSWORD=
DEV_SERVER=
DEV_DB=

DEV_G_CLIENT_ID=
4 changes: 0 additions & 4 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,8 @@ const app = express()
const port = 3000
const routes = require('./routes')
const cors = require('cors')
const { hash, compareHash } = require('./helpers/brcypt')
const errorHandler = require('./middlewares/error-handler')

app.locals.hash = hash
app.locals.compareHash = compareHash

app.use(cors())
app.use(express.urlencoded({extended:true}))
app.use(express.json())
Expand Down
1 change: 1 addition & 0 deletions config/config.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
require("dotenv").config();
module.exports = {
"development": {
"username": process.env.DEV_USERNAME,
Expand Down
45 changes: 45 additions & 0 deletions controllers/taskController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
const {Task} = require('../models/index')
const {jwtEncrypt, jwtDecrypt} = require('../helpers/jwt')
const {compareHash} = require('../helpers/brcypt')

class Controller{
static postTask(req, res, next){
let task = req.body
task.UserId = req.currentUser.id
task.deadline = new Date()
task.deadline = task.deadline.toISOString()
Task.create(task, {returning: true})
.then(r => {
console.log(r)
res.status(201).json({r})
})
.catch(err => {next(err)})
}

static getTask(req, res, next){
Task.findAll()
.then(taskData => {
res.status(200).json(taskData)
})
.catch(err => {next(err)})
}

static deleteTask(req, res, next){
Task.destroy({where: {id:req.params.id}, returning:true})
.then(taskData => {
res.status(200).json("delete success")
})
.catch(err => {next(err)})
}

static putTask(req, res, next){

}

static patchTask(req, res, next){

}

}

module.exports = Controller
34 changes: 34 additions & 0 deletions controllers/userController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
const { User} = require('../models/index')
const {jwtEncrypt, jwtDecrypt} = require('../helpers/jwt')
const {compareHash} = require('../helpers/brcypt')

class Controller{
static postRegister(req, res, next){
if (!req.body.email || !req.body.password) throw {name: "FillEmailPassword"}
User.create(req.body)
.then(() => {
res.status(200).json({message: "User Registered", email:req.body.email})
})
.catch((err) => {
next(err)
})
}

static postLogin(req, res, next){
if (!req.body.email || !req.body.password) throw {name: "FillEmailPassword"}
User.findOne({where:{email: req.body.email.toLowerCase()}})
.then(user => {
if (!user) throw {name: "noEmail"}
if(compareHash(req.body.password, user.password)){
const token = jwtEncrypt({id: user.id, email: user.email})
res.status(200).json({message: "login successful", access_token: token})
}
else throw {name: "wrongPassword"}
})
.catch((err) =>{
next(err)
})
}
}

module.exports = Controller
23 changes: 21 additions & 2 deletions middlewares/auth.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const {jwtDecrypt} = require("../helpers/jwt")
const {User, Todo} = require("../models")
const {User, Task} = require("../models")

const authentication = (req, res, next) =>{
try{
Expand All @@ -10,6 +10,7 @@ const authentication = (req, res, next) =>{
if (!user){
throw {name: "AuthenticationError", message:"User not Found"}
} else {
console.log('a')
req.currentUser = {id: user.id}
next()
}
Expand All @@ -21,4 +22,22 @@ const authentication = (req, res, next) =>{
}
}

module.exports = {authentication, todoAuth}
const authorization = (req, res, next) => {
Task.findOne({where:{id:id}})
.then(task =>{
if (!task) {
throw {
name: "TaskNotFound",
message: `task with id ${id} not found`,
}
}
if (todo.user_id == req.currentUser.id) {
req.target = todo
next()
}
else throw {name:"AuthorizationError"}
}) .catch(err =>{
next(err)
})
}
module.exports = {authentication, authorization}
File renamed without changes.
46 changes: 46 additions & 0 deletions migrations/20210611133056-create-task.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Tasks', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
name: {
allowNull: false,
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING
},
deadline: {
type: Sequelize.DATE
},
category: {
allowNull: false,
type: Sequelize.STRING
},
UserId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'Users',
Key: 'id'
}
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Tasks');
}
};
2 changes: 1 addition & 1 deletion models/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const config = require(__dirname + '/../config/config.js')[env];
const db = {};

let sequelize;
Expand Down
15 changes: 9 additions & 6 deletions models/users.js → models/task.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Users extends Model {
class Task extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
Expand All @@ -13,12 +13,15 @@ module.exports = (sequelize, DataTypes) => {
// define association here
}
};
Users.init({
email: DataTypes.STRING,
password: DataTypes.STRING
Task.init({
name: DataTypes.STRING,
description: DataTypes.STRING,
deadline: DataTypes.DATE,
category: DataTypes.STRING,
UserId: DataTypes.INTEGER
}, {
sequelize,
modelName: 'Users',
modelName: 'Task',
});
return Users;
return Task;
};
49 changes: 49 additions & 0 deletions models/user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
'use strict';
const {hash} = require('../helpers/brcypt')
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
};
User.init({
email: {
type: DataTypes.STRING,
unique: {
msg: 'email is already taken'
},
validate: {
notEmpty: {msg: "Email cannot be empty"},
isEmail: {msg: "Please use proper email format"}
},
},
password: {
type: DataTypes.STRING,
validate: {
notEmpty: {msg: "Password cannot be empty"},
len: {
args: [4, 32],
msg: "Password must be between 4 to 32 characters"
}
}
},
}, {
hooks:{
beforeCreate: user =>{
user.password = hash(user.password)
user.email = user.email.toLowerCase()
}
},
sequelize,
modelName: 'User',
});
return User;
};
11 changes: 6 additions & 5 deletions routes/index.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
const express = require('express');
const router = express.Router();
const todoRoute = require('./todos-route')
const userRoute = require('./users-route')
const {authentication} = require('../middlewares/auth')
const taskRoute = require('./tasks-route')
const {authentication, authorization} = require('../middlewares/auth')
const userC = require('../controllers/userController')

router.use('/todos', authentication, todoRoute)
router.use('/users', userRoute)
router.post('/register', userC.postRegister)
router.post('/login', userC.postLogin)
router.use('/tasks', authentication, authorization, taskRoute)

module.exports = router;
12 changes: 12 additions & 0 deletions routes/tasks-route.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const express = require('express');
const router = express.Router();
const taskC = require('../controllers/taskController')
const {authorization} = require('../middlewares/auth')

router.put('/', taskC.putTask)
router.post('/', taskC.postTask)
router.get('/', taskC.getTask)
router.delete('/', taskC.deleteTask)
router.patch('/', taskC.patchTask)

module.exports = router;
13 changes: 0 additions & 13 deletions routes/todos-route.js

This file was deleted.

9 changes: 0 additions & 9 deletions routes/users-route.js

This file was deleted.

0 comments on commit 214b320

Please sign in to comment.