Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
.env
72 changes: 72 additions & 0 deletions Controllers/items-controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
const Items = require('../Models/items.js')
const jwt = require('jsonwebtoken')
const Storage = require('dom-storage')
const localStorage = new Storage('./db.json', {strict:false,ws:' '})
const Token = localStorage.getItem('myKey')
const multer = require('multer',{dest:'uploads/'})
require('dotenv').config()

function list (req,res,next){
Items.find({},function(err,result){
res.send(result)
})
}

function createItem(req,res,next){
Items.create({
name: req.body.name,
picture: req.body.picture,
stock: req.body.stock,
category: req.body.category,
description: req.body.description,
price: req.body.price
},function(err,result){
res.send(result)
})
}

function searchCategory (req,res,next){
Items.find({
category: req.params.category
},function(err,result){
res.send(result)
})
}

function deleteItem (req,res,next){
Items.remove({
_id: req.params.id
},function(err,result){
res.send('Delete Success!')
})
}

function getItem (req,res,next){
Items.findOne({
_id: req.params.id
},function(err,result){
res.send(result)
})
}

function editItem (req,res,next){
Items.findOne({
_id: req.params.id
},function(err,result){
Items.updateOne({
_id: req.params.id
},{
name: req.body.name || result.name,
picture: req.body.picture || result.picture,
stock: req.body.stock || result.stock,
category: req.body.category || result.category,
price: req.body.price || result.price
},function(err,result){
res.send('Update Success!')
})
})
}

module.exports = {
list,searchCategory,deleteItem,editItem,createItem,getItem
}
74 changes: 74 additions & 0 deletions Controllers/users-controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
const Users = require('../Models/users.js')
const bcrypt = require('bcrypt')
const saltRounds = 10
const jwt = require('jsonwebtoken')
const Storage = require('dom-storage')
const localStorage = new Storage('./db.json', {strict:false,ws:' '})
const Token = localStorage.getItem('myKey')
require('dotenv').config()

function UserList (req,res,next){
Users.find({},function(err,result){
res.send(result)
})
}

function signup (req,res,next){
let salt = bcrypt.genSaltSync(saltRounds)
let hash = bcrypt.hashSync(req.body.password,salt)
Users.create({
username: req.body.username,
password: hash,
email: req.body.email
},function(err,result){
res.send(result)
})
}

function login (req,res,next){
Users.findOne({
username: req.body.username
},function(err,result){
if(result === null){
res.send('Invalid Username!')
}
else{
if(bcrypt.compare(req.body.password,result.password)){
let token = jwt.sign({_id: result.id, username: result.username, email: result.email},process.env.SECRET)
localStorage.setItem('myKey',token)
res.send(token)
}
else{
res.send('Invalid Password!')
}
}
})
}

function editUser (req,res,next){
Users.findOne({
_id: req.params.id
},function(err,result){
Users.updateOne({
_id: req.params.id
},{
username: req.body.username || result.username,
email: req.body.email || result.email
},function(err,result){
res.send('Update User Sucess!')
})
})
}

function deleteUser (req,res,next){
Users.remove({
_id: req.params.id
},function(err,result){
res.send('Delete Success!')
})
}


module.exports = {
signup,login,editUser,deleteUser,UserList
}
15 changes: 15 additions & 0 deletions Models/items.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const mongoose = require ('mongoose')
const Schema = mongoose.Schema

var itemSchema = new Schema({
name: String,
picture: String,
stock: Number,
category: String,
price: Number,
description: String
})

var Item = mongoose.model('Item',itemSchema)

module.exports = Item
12 changes: 12 additions & 0 deletions Models/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const mongoose = require ('mongoose')
const Schema = mongoose.Schema

var userSchema = new Schema({
username: String,
password: String,
email: String
})

var User = mongoose.model('User',userSchema)

module.exports = User
28 changes: 28 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
var express = require('express');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var index = require('./routes/index');
var cors = require ('cors')
const mongoose = require('mongoose')
const uri = 'mongodb://medieval:medieval@ds157641.mlab.com:57641/ecommerce'
mongoose.connect(uri)
var db = mongoose.createConnection(uri)

var app = express();

// view engine setup

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(cors())

app.use('/', index);

// catch 404 and forward to error handler
module.exports = app;
90 changes: 90 additions & 0 deletions bin/www
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#!/usr/bin/env node

/**
* Module dependencies.
*/

var app = require('../app');
var debug = require('debug')('ecommerce:server');
var http = require('http');

/**
* Get port from environment and store in Express.
*/

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
* Create HTTP server.
*/

var server = http.createServer(app);

/**
* Listen on provided port, on all network interfaces.
*/

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
* Normalize a port into a number, string, or false.
*/

function normalizePort(val) {
var port = parseInt(val, 10);

if (isNaN(port)) {
// named pipe
return val;
}

if (port >= 0) {
// port number
return port;
}

return false;
}

/**
* Event listener for HTTP server "error" event.
*/

function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}

var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;

// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}

/**
* Event listener for HTTP server "listening" event.
*/

function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
3 changes: 3 additions & 0 deletions db.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"myKey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1OTJmYWNlMzM3YTA3NTE1ZDI1YzUwY2IiLCJ1c2VybmFtZSI6InN0ZWR5IiwiZW1haWwiOiJzdGVkeUBnbWFpbC5jb20iLCJpYXQiOjE0OTY0NjQ4MzB9.ypmLLXApaq4XtxWD5ptA6nH8LkFvjUvlkG9pcmB3ZKs"
}
37 changes: 37 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"name": "ecommerce",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "nodemon ./bin/www"
},
"dependencies": {
"bcrypt": "^1.0.2",
"body-parser": "~1.17.1",
"cookie-parser": "~1.4.3",
"cors": "^2.8.3",
"debug": "~2.6.3",
"dom-storage": "^2.0.2",
"dotenv": "^4.0.0",
"express": "^4.15.3",
"express-generator": "^4.15.0",
"jade": "~1.11.0",
"jsonwebtoken": "^7.4.1",
"mongoose": "^4.10.4",
"morgan": "~1.8.1",
"multer": "^1.3.0",
"serve-favicon": "~2.4.2"
},
"description": "",
"main": "app.js",
"repository": {
"type": "git",
"url": "git+https://github.com/stedyyulius/ecommerce.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/stedyyulius/ecommerce/issues"
},
"homepage": "https://github.com/stedyyulius/ecommerce#readme"
}
8 changes: 8 additions & 0 deletions public/stylesheets/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}

a {
color: #00B7FF;
}
28 changes: 28 additions & 0 deletions routes/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
var express = require('express');
var router = express.Router();
const ItemsController = require('../Controllers/items-controller.js')
const UsersController = require('../Controllers/users-controller.js')

router.get('/', UsersController.UserList)
router.post('/signup', UsersController.signup)
router.post('/login', UsersController.login)
router.put('/editUser/:id', UsersController.editUser)
router.delete('/deleteUser/:id', UsersController.deleteUser)

router.get('/items', ItemsController.list)
router.get('/search/:category', ItemsController.searchCategory)
router.get('/getItem/:id', ItemsController.getItem)
router.post('/createItem', ItemsController.createItem)
router.post('/editItem/:id', ItemsController.editItem)
router.delete('/deleteItem/:id', ItemsController.deleteItem)


module.exports = router;

// module.exports = {
// list,searchCategory,deleteItem,editItem
// }
//
// module.exports = {
// signup,login,editUser,deleteUser,UserList
// }
6 changes: 6 additions & 0 deletions views/error.jade
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
extends layout

block content
h1= message
h2= error.status
pre #{error.stack}
5 changes: 5 additions & 0 deletions views/index.jade
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
extends layout

block content
h1= title
p Welcome to #{title}
Loading