From 762a7c2fd5199a7f51668cb39f350c3041007716 Mon Sep 17 00:00:00 2001 From: Sean Date: Tue, 22 Aug 2017 10:51:16 -0600 Subject: [PATCH 1/2] passed first test battery --- data-and-functions-1/src/functions/getActiveUsers.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 data-and-functions-1/src/functions/getActiveUsers.js diff --git a/data-and-functions-1/src/functions/getActiveUsers.js b/data-and-functions-1/src/functions/getActiveUsers.js new file mode 100644 index 0000000..d5a21f8 --- /dev/null +++ b/data-and-functions-1/src/functions/getActiveUsers.js @@ -0,0 +1,10 @@ +import DATA from '../DATA.js' + +const getActiveUsers = (dataIn) => { + if(!dataIn || !dataIn.users){ + return null + } + return dataIn.users.filter((user) => user.accountActive) +} + +export default getActiveUsers From de13d2e2e8b8567a9f9dc8bd361f5c6b429d93dc Mon Sep 17 00:00:00 2001 From: Sean Date: Wed, 23 Aug 2017 10:58:38 -0600 Subject: [PATCH 2/2] passing all tests --- .../src/functions/getMostExpensiveProduct.js | 10 +++++ .../src/functions/getOrderInfo.js | 26 +++++++++++++ .../src/functions/getProductById.js | 10 +++++ .../src/functions/getUserById.js | 10 +++++ .../src/functions/getProductsForOrder.js | 20 ++++++++++ .../src/functions/getTotalPriceForOrder.js | 20 ++++++++++ .../src/functions/addOrder.js | 37 +++++++++++++++++++ .../src/functions/addProduct.js | 19 ++++++++++ 8 files changed, 152 insertions(+) create mode 100644 data-and-functions-1/src/functions/getMostExpensiveProduct.js create mode 100644 data-and-functions-1/src/functions/getOrderInfo.js create mode 100644 data-and-functions-1/src/functions/getProductById.js create mode 100644 data-and-functions-1/src/functions/getUserById.js create mode 100644 data-and-functions-2/src/functions/getProductsForOrder.js create mode 100644 data-and-functions-2/src/functions/getTotalPriceForOrder.js create mode 100644 data-and-functions-3/src/functions/addOrder.js create mode 100644 data-and-functions-3/src/functions/addProduct.js diff --git a/data-and-functions-1/src/functions/getMostExpensiveProduct.js b/data-and-functions-1/src/functions/getMostExpensiveProduct.js new file mode 100644 index 0000000..41ed90a --- /dev/null +++ b/data-and-functions-1/src/functions/getMostExpensiveProduct.js @@ -0,0 +1,10 @@ +import DATA from '../DATA.js' + +const getMostExpensiveProduct = (dataIn) => { + if(!dataIn || !dataIn.products){ + return null + } + return dataIn.products.reduce((maxVal, product) => (product.price > maxVal.price) ? product : maxVal ,dataIn.products[0]) +} + +export default getMostExpensiveProduct diff --git a/data-and-functions-1/src/functions/getOrderInfo.js b/data-and-functions-1/src/functions/getOrderInfo.js new file mode 100644 index 0000000..1be6583 --- /dev/null +++ b/data-and-functions-1/src/functions/getOrderInfo.js @@ -0,0 +1,26 @@ +import DATA from '../DATA.js' + +const getOrderInfo = (dataIn) => { + if(!dataIn || !dataIn.orders){ + return null + } + return dataIn.orders.map((order) => { + const orderInfo = {} + dataIn.users.forEach((user) => { + if(user.id === order.userId){ + orderInfo.userName = user.name + orderInfo.orderId = order.id + } + }) + + dataIn.products.forEach((product) => { + if(product.id === order.productId){ + orderInfo.price = product.price + } + }) + + return orderInfo + }) +} + +export default getOrderInfo diff --git a/data-and-functions-1/src/functions/getProductById.js b/data-and-functions-1/src/functions/getProductById.js new file mode 100644 index 0000000..dded3d8 --- /dev/null +++ b/data-and-functions-1/src/functions/getProductById.js @@ -0,0 +1,10 @@ +import DATA from '../DATA.js' + +const getProductById = (dataIn, id) => { + if(!dataIn || !id || !dataIn.products){ + return null + } + return dataIn.products.find((product) => product.id === id) +} + +export default getProductById diff --git a/data-and-functions-1/src/functions/getUserById.js b/data-and-functions-1/src/functions/getUserById.js new file mode 100644 index 0000000..6f8aadf --- /dev/null +++ b/data-and-functions-1/src/functions/getUserById.js @@ -0,0 +1,10 @@ +import DATA from '../DATA.js' + +const getUserById = (dataIn, user_id) => { + if(!dataIn || !dataIn.users || !user_id){ + return null + } + return dataIn.users.find((user) => user.id === user_id) +} + +export default getUserById diff --git a/data-and-functions-2/src/functions/getProductsForOrder.js b/data-and-functions-2/src/functions/getProductsForOrder.js new file mode 100644 index 0000000..4ca0c6d --- /dev/null +++ b/data-and-functions-2/src/functions/getProductsForOrder.js @@ -0,0 +1,20 @@ +import DATA from '../DATA' + +const getProductsForOrder = (dataIn,orderId) => { + if(!dataIn || !dataIn.orders || !orderId){ + const err = new Error("Error") + throw err + } + + let lookupOrder = {} + dataIn.orders.forEach((order)=> lookupOrder[order.id] = order) + + if(!lookupOrder[orderId]) return null + + let productLookup = {} + dataIn.products.forEach((product) => productLookup[product.id] = product) + + return lookupOrder[orderId].products.map((productId) => productLookup[productId]) +} + +export default getProductsForOrder diff --git a/data-and-functions-2/src/functions/getTotalPriceForOrder.js b/data-and-functions-2/src/functions/getTotalPriceForOrder.js new file mode 100644 index 0000000..6192626 --- /dev/null +++ b/data-and-functions-2/src/functions/getTotalPriceForOrder.js @@ -0,0 +1,20 @@ +import DATA from '../DATA' + +const getTotalPriceForOrder = (dataIn, orderId) => { + if(!dataIn || !dataIn.orders || !orderId){ + const err = new Error("Error") + throw err + } + + let lookupOrder = {} + dataIn.orders.forEach((order) => lookupOrder[order.id] = order) + + if(!lookupOrder[orderId]) return null + + let lookupProduct = {} + dataIn.products.forEach((product) => lookupProduct[product.id] = product) + + return lookupOrder[orderId].products.reduce((sum, productId) => sum + lookupProduct[productId].price,0) +} + +export default getTotalPriceForOrder diff --git a/data-and-functions-3/src/functions/addOrder.js b/data-and-functions-3/src/functions/addOrder.js new file mode 100644 index 0000000..ab8f2e0 --- /dev/null +++ b/data-and-functions-3/src/functions/addOrder.js @@ -0,0 +1,37 @@ +import DATA from '../DATA' + +const addOrder = (dataIn, newOrder) => { + if(!dataIn || !dataIn.orders || !newOrder){ + const err = new Error("Missing data") + throw err + } + + if(typeof newOrder !== "object" || !(newOrder.userId && newOrder.products) || newOrder.id){ + const err = new Error("Wrong data-type or wrong format") + throw err + } + + const usersLookup = {} + dataIn.users.forEach((user) => usersLookup[user.id] = user) + + if(!usersLookup[newOrder.userId]){ + const err = new Error("User invalid/not found") + throw err + } + + const productsLookup = {} + dataIn.products.forEach((product) => productsLookup[product.id] = product) + + newOrder.products.forEach((productId) =>{ + if(!productsLookup[productId]){ + const err = new Error("Invalid product id") + throw err + } + }) + + newOrder.id = dataIn.orders[dataIn.orders.length-1].id + 1 + dataIn.orders.push(newOrder) + return newOrder +} + +export default addOrder diff --git a/data-and-functions-3/src/functions/addProduct.js b/data-and-functions-3/src/functions/addProduct.js new file mode 100644 index 0000000..1c5038a --- /dev/null +++ b/data-and-functions-3/src/functions/addProduct.js @@ -0,0 +1,19 @@ +import DATA from '../DATA' + +const addProduct = (dataIn, newProduct) => { + if(!dataIn || !dataIn.products || !newProduct){ + const err = new Error("Invalid inputs/missing") + throw err + } + + if(typeof newProduct !== "object" || !(newProduct.price && newProduct.name) || newProduct.id){ + const err = new Error("Invalid data-type or format.") + throw err + } + + newProduct.id = dataIn.products[dataIn.products.length-1].id + 1 + dataIn.products.push(newProduct) + return newProduct +} + +export default addProduct