Solución
solution.tsTypeScript
interface OrderItem {
price: number;
quantity: number;
}
const MIN_ORDER_AMOUNT = 10;
const LARGE_ORDER_THRESHOLD = 100;
const GOLD_SMALL_DISCOUNT = 0.10;
const GOLD_LARGE_DISCOUNT = 0.20;
const SILVER_SMALL_DISCOUNT = 0.05;
const SILVER_LARGE_DISCOUNT = 0.10;
function calculateSubtotal(orderItems: OrderItem[]): number {
return orderItems.reduce((subtotal, item) => {
return subtotal + (item.price * item.quantity);
}, 0);
}
function getDiscountRate(
membership: string,
subtotal: number
): number {
const isLargeOrder = subtotal >= LARGE_ORDER_THRESHOLD;
if (membership === 'gold') {
return isLargeOrder
? GOLD_LARGE_DISCOUNT
: GOLD_SMALL_DISCOUNT;
}
if (membership === 'silver') {
return isLargeOrder
? SILVER_LARGE_DISCOUNT
: SILVER_SMALL_DISCOUNT;
}
return 0;
}
export function calculateOrderDiscount(
order: OrderItem[],
membership: string
): number {
const subtotal = calculateSubtotal(order);
if (subtotal < MIN_ORDER_AMOUNT) {
return -1;
}
const discountRate = getDiscountRate(
membership,
subtotal
);
const discountAmount = subtotal * discountRate;
return subtotal - discountAmount;
}0respuestas