Skip to content

Commit

Permalink
[Bug #160616909] Implement API feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
sudhons committed Sep 19, 2018
1 parent 29b6402 commit 440ef83
Show file tree
Hide file tree
Showing 11 changed files with 550 additions and 246 deletions.
63 changes: 38 additions & 25 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,27 +1,40 @@
{
"env": {
"es6": true,
"node": true
},
"extends": "airbnb",
"parserOptions": {
"sourceType": "module",
"ecmaVersion": 6
},
"rules": {
"indent": [
"error",
2
],
"linebreak-style": 0,
"max-len": [2, 100, 2, {"ignoreUrls": true}],
"quotes": [
"error",
"single"
],
"semi": [
"error",
"always"
]
}
"root": true,
"extends": "airbnb",
"env": {
"node": true,
"browser": true,
"es6": true,
"mocha": true,
"commonjs": true,
"jquery": true
},
"rules": {
"one-var": 0,
"one-var-declaration-per-line": 0,
"new-cap": 0,
"max-len": [1, 80, 2],
"consistent-return": 0,
"no-param-reassign": 0,
"no-useless-escape": 0,
"no-case-declarations": 0,
"linebreak-style": 0,
"comma-dangle": 0,
"curly": ["error", "multi-line"],
"import/no-unresolved": [2, { "commonjs": true }],
"no-shadow": ["error", { "allow": ["req", "res", "err"] }],
"valid-jsdoc": ["error", {
"requireReturn": true,
"requireReturnType": true,
"requireParamDescription": false,
"requireReturnDescription": true
}],
"require-jsdoc": ["error", {
"require": {
"FunctionDeclaration": true,
"MethodDefinition": true,
"ClassDeclaration": true
}
}]
}
}
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
node_modules
.nyc_output
build
build
18 changes: 4 additions & 14 deletions API/src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,13 @@ app.use(bodyParser.urlencoded({ extended: true }));

app.use('/api/v1', orders);

app.use((request, response, next) => {
const error = new Error('unknown url path');
error.status = 404;
return next(error);
});

// eslint-disable-next-line no-unused-vars
app.use((error, request, response, next) => {
const status = error.status || 400;
response.status(status);
return response.json({ status, message: error.message });
app.use((request, response) => {
response.status(404);
return response.json({ status: 404, message: 'unknown url path' });
});

const PORT = parseInt(process.env.PORT, 10) || 5000;

if (require.main === module) {
app.listen(PORT, () => console.log(`Listening on port ${PORT}`));
}
app.listen(PORT, () => console.log(`Listening on port ${PORT}`));

export default app;
50 changes: 46 additions & 4 deletions API/src/controllers/ordersController.js
Original file line number Diff line number Diff line change
@@ -1,36 +1,78 @@
import Data from '../queries/orderQueries';

/**
* Performs GET, POST and UPDATE operations on orders
*/
class Order {
/**
* @static
* @method getAllOrders
* @description Fetches all the orders
* @param {object} request - HTTP request object
* @param {object} response - HTTP response object
* @returns {object} status, message and order data
*/
static getAllOrders(request, response) {
const data = Data.getAllOrders();

response.status(200);
return response.json({ status: 200, message: 'Successful', data });
}

/**
* @static
* @method postOrder
* @description Posts a new order
* @param {object} request - HTTP Request object
* @param {object} response - HTTP Response object
* @returns {object} status, message and order data
*/
static postOrder(request, response) {
const {
recipientName,
recipientAddress,
recipientPhone,
order,
} = request.body;

const data = Data
.createNewOrder(recipientName, recipientAddress, recipientPhone, order);

return response.status(201).json({ status: 201, message: 'Successful', data });
response.status(201);
return response.json({ status: 201, message: 'Successful', data });
}

/**
* @static
* @method getOrder
* @description Fetches an order by its id
* @param {object} request - HTTP Request Object
* @param {object} response - HTTP Response object
* @returns {object} status, message and order data
*/
static getOrder(request, response) {
const data = Data.getAnOrder(Number(request.params.orderId));

return response.status(200).json({ status: 200, message: 'Sucessful', data });
response.status(200);
return response.json({ status: 200, message: 'Sucessful', data });
}

/**
* @static
* @description Updates an order's status
* @param {object} request - HTTP Request Object
* @param {object} response - HTTP Response object
* @returns {object} status, message and order data
*/
static updateOrder(request, response) {
const data = Data
.updateOrderStatus(Number(request.params.orderId), request.body.status.toLowerCase());
return response.status(200).json({ status: 200, message: 'update an order', data });
.updateOrderStatus(
Number(request.params.orderId),
request.body.status.toLowerCase()
);
response.status(200);
return response
.json({ status: 200, message: 'Status successfully updated', data });
}
}

Expand Down
65 changes: 59 additions & 6 deletions API/src/queries/orderQueries.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
import orderData from '../db/dbData';

/**
* queries data
*/
class Data {
/**
* @constructs
* @description constructs a new Data
* @param {string} customer - customer name
* @param {string} recipientName - recipient name
* @param {string} recipientAddr - recipient address
* @param {number} recipientPhone - recipient phone number
* @param {array} order - an array of meal
*/
constructor(customer, recipientName, recipientAddr, recipientPhone, order) {
Data.count = Data.count ? Data.count + 1 : 1;

Expand All @@ -14,6 +26,16 @@ class Data {
this.status = 'waiting';
}

/**
* @static
* @method createNewOrder
* @description creates a new order
* @param {string} recipientName - the recipient name
* @param {string} recipientAddr - the recipient address
* @param {number} recipientPhone - the recipient phone number
* @param {array} order - an array of meal
* @returns {object} the new order
*/
static createNewOrder(recipientName, recipientAddr, recipientPhone, order) {
const customer = 'Adeolu James';
const unitPrice = 200;
Expand All @@ -22,32 +44,63 @@ class Data {
mealOrder.unitPrice = unitPrice;
mealOrder.total = value.quantity * unitPrice;
});
const newOrder = new Data(customer, recipientName, recipientAddr, recipientPhone, order);
const newOrder = new Data(
customer,
recipientName,
recipientAddr,
recipientPhone,
order
);
orderData.push(newOrder);

return newOrder;
}

/**
* @static
* @method getAllOrders
* @description Fetches all the orders
* @returns {Array} an array of all orders
*/
static getAllOrders() {
return orderData;
}

/**
* @static
* @method getAnOrder
* @description Fetches an order by its id
* @param {integer} orderId - the order's ID
* @returns {object} an order or null if order id does not exist
*/
static getAnOrder(orderId) {
const requiredOrder = orderData.find(order => order.orderId === orderId);
return requiredOrder || null;
}

/**
* @static
* @method getAnOrder
* @description updates the status of an order
* @param {integer} orderId - the order's ID
* @param {string} status - the new status
* @returns {object} the updated order
*/
static updateOrderStatus(orderId, status) {
const requiredOrder = Data.getAnOrder(orderId);

if (requiredOrder) {
requiredOrder.status = status;
requiredOrder[`${status}Time`] = Date.now();
}
requiredOrder.status = status;
requiredOrder[`${status}Time`] = Date.now();

return requiredOrder || null;
return requiredOrder;
}

/**
* @static
* @method deleteAllOrders
* @description delete all orders
* @returns {undefined} undefined
*/
static deleteAllOrders() {
orderData.length = 0;
}
Expand Down
8 changes: 6 additions & 2 deletions API/src/routes/ordersRoute.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ router.post('/orders', Validator.validatePost, Order.postOrder);

router.get('/orders/:orderId', Validator.validateOrderId, Order.getOrder);

router
.put('/orders/:orderId', Validator.validateOrderId, Validator.validateStatus, Order.updateOrder);
router.put(
'/orders/:orderId',
Validator.validateOrderId,
Validator.validateStatus,
Order.updateOrder
);

export default router;
Loading

0 comments on commit 440ef83

Please sign in to comment.