38 lines
1002 B
JavaScript
38 lines
1002 B
JavaScript
const fs = require("fs");
|
|
|
|
function shipOrder(filePath, orderId, destinationCountry) {
|
|
const raw = fs.readFileSync(filePath, "utf8");
|
|
const state = JSON.parse(raw);
|
|
const order = state.orders.find((item) => item.id === orderId);
|
|
|
|
if (!order) {
|
|
throw new Error("Order not found");
|
|
}
|
|
|
|
if (order.status === "shipped") {
|
|
return { message: "Already shipped", trackingNumber: order.trackingNumber };
|
|
}
|
|
|
|
let shippingCost = 5;
|
|
|
|
if (destinationCountry !== "US") {
|
|
shippingCost = shippingCost + 15;
|
|
}
|
|
|
|
if (order.weightKg > 10) {
|
|
shippingCost = shippingCost + 20;
|
|
}
|
|
|
|
order.status = "shipped";
|
|
order.shippingCost = shippingCost;
|
|
order.trackingNumber = "trk-" + Math.floor(Math.random() * 100000);
|
|
order.shippedAt = new Date().toISOString();
|
|
|
|
fs.writeFileSync(filePath, JSON.stringify(state, null, 2));
|
|
console.log("Order shipped", orderId);
|
|
|
|
return { message: "Shipped", trackingNumber: order.trackingNumber, shippingCost };
|
|
}
|
|
|
|
module.exports = { shipOrder };
|