Skip to content

Instantly share code, notes, and snippets.

@mikemix
Last active August 10, 2022 15:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikemix/48ef9bd1827c47f3eab0d58256712915 to your computer and use it in GitHub Desktop.
Save mikemix/48ef9bd1827c47f3eab0d58256712915 to your computer and use it in GitHub Desktop.
<?php
class DiscountApplier
{
private DiscountCalculator $calculator;
public function __construct(DiscountCalculator $calculator)
{
$this->calculator = $calculator;
}
public function apply(Basket $basket): void
{
if (!$basket->hasItems()) {
return;
}
$discount = 0.0;
foreach ($this->getDiscountableItems($basket) as $basketItem) {
$discount += $this->calculator->getDiscount($basketItem);
}
$basket->applyDiscount($discount);
}
/**
* @return iterable<BasketItem>
*/
private function getDiscountableItems(Basket $basket): iterable
{
foreach ($basket->getItems() as $basketItem) {
if (!$basketItem->isTaxable() || $basketItem->getPrice() === 0) {
continue;
}
yield $basketItem;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment