in orderservice/src/index.js [72:153]
async function doSubmitOrder(call, callback) {
try {
let req = call.request;
await validateOrderRequest(req);
//empty the cart
try {
await emptyCartSync({
user_id: req.user_id
});
} catch(ex) {
throw {code: 400, message: "Could not initialize order"}
}
//add order items to the cart
for (let item of req.items) {
try {
await addItemSync({
"user_id": req.user_id,
"item": {
"product_id": item.id,
"quantity": item.quantity
}
})
} catch(ex) {
throw {code: 400, message: "Could not add item to order. " + ex.message}
}
}
let orderReq = {
"user_id": req.user_id,
"user_currency": req.currency,
"email": req.email,
"address": {
"street_address": req.address.street,
"city": req.address.city,
"state": req.address.state,
"country": req.address.country,
"zip_code": req.address.zip
},
"credit_card": {
"credit_card_number": req.credit_card.number,
"credit_card_cvv": req.credit_card.cvv,
"credit_card_expiration_year": req.credit_card.exp_year,
"credit_card_expiration_month": req.credit_card.exp_month
}
};
//place the order
let orderRes = null;
try {
orderRes = await placeOrderSync(orderReq);
} catch (ex) {
throw {code: 400, message: "Could not place order. " + ex.message};
}
let res = {
id: orderRes.order.order_id,
shipping_id: orderRes.order.shipping_tracking_id,
shipping_cost: orderRes.order.shipping_cost.units + orderRes.order.shipping_cost.nanos / Math.pow(10,9) ,
shipping_address: {
street: orderRes.order.shipping_address.street_address,
city: orderRes.order.shipping_address.city,
state: orderRes.order.shipping_address.state,
zip: orderRes.order.shipping_address.zip_code
},
items: []
}
for (let item of orderRes.order.items) {
res.items.push({
id: item.item.product_id,
quantity: item.item.quantity,
cost: (item.cost.units + item.cost.nanos / Math.pow(10,9) )
})
}
callback(null, res);
} catch(ex) {
callback(ex, null);
}
}