Solución

@alexiis-dev·29/5/2026TypeScript
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
Respuestas

Aún no hay respuestas

¡Sé el primero en responder!

Escribir un comentario

Recuerda ser amable. Estás comentando la solución de otra persona. Comparte tu perspectiva de forma constructiva y respetuosa.

Debes iniciar sesión para publicar un comentario.