AzLearn

تمرين إعادة البناء

Shopping Cart Totals

أعد كتابة حساب سلة TypeScript يجمع السعر والضريبة والخصم بأرقام صحيحة.

typescript ~14 دقيقة مبتدئ
أعد بناء الكود Rebuild

هذا هو الكود. اكتبه بنفسك.

الكود المرجعي
interface CartItem {
  sku: string;
  name: string;
  unitPriceHalalas: number;
  quantity: number;
}

interface CartTotals {
  subtotalHalalas: number;
  discountHalalas: number;
  taxHalalas: number;
  totalHalalas: number;
}

function calculateCart(items: CartItem[], taxBasisPoints: number, discountBasisPoints: number): CartTotals {
  const subtotalHalalas = items.reduce((sum, item) => sum + item.unitPriceHalalas * item.quantity, 0);
  const discountHalalas = Math.round((subtotalHalalas * discountBasisPoints) / 10_000);
  const taxableHalalas = subtotalHalalas - discountHalalas;
  const taxHalalas = Math.round((taxableHalalas * taxBasisPoints) / 10_000);

  return {
    subtotalHalalas,
    discountHalalas,
    taxHalalas,
    totalHalalas: taxableHalalas + taxHalalas,
  };
}

function money(halalas: number): string {
  return `${(halalas / 100).toFixed(2)} SAR`;
}

const cart: CartItem[] = [
  { sku: "COURSE-TS", name: "TypeScript Course", unitPriceHalalas: 149_00, quantity: 1 },
  { sku: "NOTEBOOK", name: "Practice Notebook", unitPriceHalalas: 25_00, quantity: 2 },
];

const totals = calculateCart(cart, 1_500, 1_000);
console.log(`Subtotal: ${money(totals.subtotalHalalas)}`);
console.log(`Discount: ${money(totals.discountHalalas)}`);
console.log(`Tax: ${money(totals.taxHalalas)}`);
console.log(`Total: ${money(totals.totalHalalas)}`);
اكتب هنا