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 @@
.DS_Store
node_modules
1 change: 0 additions & 1 deletion README.md

This file was deleted.

18 changes: 18 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const port = process.env.PORT || 3000

// route
const users = require('./routes/users');

app.use(bodyParser.urlencoded({extended: false}));

// use the route
app.use('/api/users', users);

app.listen(port, function() {
console.log('app listening on port 3000!');
});

module.exports = app;
13 changes: 13 additions & 0 deletions config/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"development": {
"username": "postgres",
"password": "12345",
"database": "api-basic",
"host": "127.0.0.1",
"port": 5432,
"dialect": "postgres"
},
"production": {
"use_env_variable":"DATABASE_URL"
}
}
56 changes: 56 additions & 0 deletions controllers/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
const db = require('../models');
const methods = {};

methods.getAll = (req, res) => {
db.User.findAll()
.then(users => {
res.send(users);
})
.catch(err => {
res.send(err);
})
}

methods.findId = (req, res) => {
db.User.findById(req.params.id)
.then(user => {
res.send(user);
})
.catch(err => {
res.send(err);
})
}

methods.create = (req, res) => {
db.User.create({
fullname: req.body.fullname,
email: req.body.email
})
.then(() => {
res.send(`success create new user`);
})
}

methods.delete = (req, res) => {
db.User.destroy({where: {id: req.params.id}})
.then(() => {
res.send('success delete user with id ' + req.params.id)
})
.catch(err => {
res.send(err);
})
}

methods.update = (req, res) => {
// res.send(req.body)
db.User.update({fullname: req.body.fullname, email: req.body.email}, {where: {id: req.params.id}})
.then(user => {
res.send(`success update user with id ${req.params.id}`);
})
.catch(err => {
res.send(err);
})
}


module.exports = methods;
30 changes: 30 additions & 0 deletions migrations/20170424044304-create-user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
'use strict';
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
fullname: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: function(queryInterface, Sequelize) {
return queryInterface.dropTable('Users');
}
};
36 changes: 36 additions & 0 deletions models/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
'use strict';

var fs = require('fs');
var path = require('path');
var Sequelize = require('sequelize');
var basename = path.basename(module.filename);
var env = process.env.NODE_ENV || 'development';
var config = require(__dirname + '/../config/config.json')[env];
var db = {};

if (config.use_env_variable) {
var sequelize = new Sequelize(process.env[config.use_env_variable]);
} else {
var sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(function(file) {
var model = sequelize['import'](path.join(__dirname, file));
db[model.name] = model;
});

Object.keys(db).forEach(function(modelName) {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;
14 changes: 14 additions & 0 deletions models/user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
'use strict';
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
fullname: DataTypes.STRING,
email: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
// associations can be defined here
}
}
});
return User;
};
18 changes: 18 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "api-basic",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node app.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.17.1",
"express": "^4.15.2",
"pg": "^6.1.5",
"sequelize": "^3.30.4",
"sequelize-cli": "^2.7.0"
}
}
41 changes: 41 additions & 0 deletions readme.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Demo API BASIC
A simple demonstration of REST API BASIC using Express.JS

### Installation
In folder config, create config.json file and insert this:

```javascript
{
"development": {
"username": "postgres",
"password": "12345",
"database": "api-basic",
"host": "127.0.0.1",
"port": 5432,
"dialect": "postgres"
}
}
```

Then:

```javascript
npm install
npm start
```

### REST API
Access the API from http://localhost:3000/api/users
OR
https://afternoon-forest-87920.herokuapp.com/api/users

List of users routes:

Route | HTTP | Description
----- | ---- | -----------
/api/users | GET | Get all the users
/api/users/:id | GET | Get a single user
/api/users | POST | create a user
/api/users/:id | DELETE | Delete a user
/api/users/:id | PUT | Update a user with new info

11 changes: 11 additions & 0 deletions routes/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const express = require('express');
const router = express.Router();
const User = require('../controllers/users');

router.get('/', User.getAll);
router.get('/:id', User.findId);
router.post('/', User.create);
router.delete('/:id', User.delete);
router.put('/:id', User.update);

module.exports = router;
45 changes: 45 additions & 0 deletions seeders/20170424055904-users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
'use strict';

module.exports = {
up: function (queryInterface, Sequelize) {
/*
Add altering commands here.
Return a promise to correctly handle asynchronicity.

Example:
return queryInterface.bulkInsert('Person', [{
name: 'John Doe',
isBetaMember: false
}], {});
*/
return queryInterface.bulkInsert('Users', [{
fullname: 'John Wick',
email: 'wick@mail.com',
createdAt: new Date(),
updatedAt: new Date()
},
{
fullname: 'John Doe',
email: 'doe@mail.com',
createdAt: new Date(),
updatedAt: new Date()
},
{
fullname: 'John Bro',
email: 'bro@mail.com',
createdAt: new Date(),
updatedAt: new Date()
}], {});
},

down: function (queryInterface, Sequelize) {
/*
Add reverting commands here.
Return a promise to correctly handle asynchronicity.

Example:
return queryInterface.bulkDelete('Person', null, {});
*/
return queryInterface.bulkDelete('Users', null, {});
}
};