From 41a3359ee146108169dbb343d549e341df0d1186 Mon Sep 17 00:00:00 2001 From: l40964997-sudo Date: Thu, 11 Dec 2025 17:28:53 +0100 Subject: [PATCH] Update cart_item.py --- boilerplate/python/models/cart_item.py | 30 +++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/boilerplate/python/models/cart_item.py b/boilerplate/python/models/cart_item.py index c9a62a4..3fdc481 100644 --- a/boilerplate/python/models/cart_item.py +++ b/boilerplate/python/models/cart_item.py @@ -1,2 +1,30 @@ +from typing import Literal + +Kind = Literal["phone", "plan", "bundle"] + +@dataclass class CartItem: - pass + sku: str + kind: Kind + qty: int = 1 + + def prices(self, catalog: dict, plans: dict) -> tuple[float, float]: + if self.qty < 1: + raise ValueError("qty must be >= 1") + + if self.kind == "phone": + price = float(catalog[self.sku]["price"]) + return price * self.qty, 0.0 + + if self.kind == "plan": + monthly = float(plans[self.sku]["monthly"]) + return 0.0, monthly * self.qty + + if self.kind == "bundle": + phone_sku, plan_sku = self.sku.split("|", 1) + up, _ = CartItem(phone_sku, "phone", self.qty).prices(catalog, plans) + _, mo = CartItem(plan_sku, "plan", self.qty).prices(catalog, plans) + return up, mo + + raise ValueError("Unknown kind") +