added base examples and drills
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# shipping original
|
||||
|
||||
Messy shipping logic mixing eligibility, cost calculation, randomness, time, logging, and file I/O.
|
||||
@@ -0,0 +1,37 @@
|
||||
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 };
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"orders": [
|
||||
{
|
||||
"id": "ord-1",
|
||||
"status": "paid",
|
||||
"weightKg": 12,
|
||||
"shippingCost": 0,
|
||||
"trackingNumber": null,
|
||||
"shippedAt": null
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user