Skip to content

Commit 9b08a37

Browse files
committed
feat: snapshot cart loading shopping cart
1 parent 9f87387 commit 9b08a37

File tree

3 files changed

+17
-65
lines changed

3 files changed

+17
-65
lines changed

src/Carts/SnapshotCart.php

Lines changed: 14 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -7,77 +7,29 @@
77

88
namespace Vaened\SwiftCart\Carts;
99

10-
use Vaened\PriceEngine\AdjustmentManager;
11-
use Vaened\SwiftCart\Entities\Identifiable;
12-
use Vaened\SwiftCart\Entities\TradedCommercialTransaction;
13-
use Vaened\SwiftCart\Items\ImmutableCartItem;
10+
use Vaened\PriceEngine\Adjustments\Tax\Taxes;
11+
use Vaened\SwiftCart\Entities\RegisteredCommercialTransaction;
12+
use Vaened\SwiftCart\Items\CommerceableCartItem;
1413
use Vaened\SwiftCart\Items\ImmutableCartItems;
15-
use Vaened\SwiftCart\NotFoundItem;
16-
use Vaened\SwiftCart\Summary;
1714

18-
final class SnapshotCart extends SwiftCart
15+
final class SnapshotCart extends ShoppingCart
1916
{
20-
private readonly ImmutableCartItems $immutables;
21-
22-
private readonly ImmutableCartItems $items;
23-
24-
private readonly AdjustmentManager $charges;
25-
26-
private readonly AdjustmentManager $discounts;
27-
28-
public function __construct(TradedCommercialTransaction $transaction)
29-
{
30-
$this->immutables = $transaction->items()->toImmutables();
31-
$this->items = new ImmutableCartItems([]);
32-
$this->charges = $this->createManagerOf($transaction->charges());
33-
$this->discounts = $this->createManagerOf($transaction->discounts());
34-
}
35-
36-
public function locate(Identifiable $identifiable): ?ImmutableCartItem
37-
{
38-
return $this->staging()->locate($identifiable);
39-
}
40-
41-
public function pull(Identifiable $item): ImmutableCartItem
42-
{
43-
$immutableItem = $this->immutables->locate($item);
44-
$this->ensureValidItem($immutableItem);
45-
46-
$this->staging()->push($immutableItem);
47-
48-
return $immutableItem;
49-
}
50-
51-
public function pullAll(): void
52-
{
53-
$immutables = $this->immutables->except($this->staging());
54-
$this->staging()->combine($immutables);
55-
}
56-
57-
public function summary(): Summary
58-
{
59-
return $this->totalizer()->summary();
60-
}
61-
62-
protected function staging(): ImmutableCartItems
63-
{
64-
return $this->items;
65-
}
66-
67-
protected function globalChargesManager(): AdjustmentManager
17+
public function __construct(RegisteredCommercialTransaction $transaction, Taxes $taxes = new Taxes([]))
6818
{
69-
return $this->charges;
19+
parent::__construct($taxes);
20+
$this->pullAll($transaction->items()->toImmutables());
21+
$this->addAsGlobal(...$transaction->charges()->items());
22+
$this->applyAsGlobal(...$transaction->discounts()->items());
7023
}
7124

72-
protected function globalDiscountsManager(): AdjustmentManager
25+
private function pullAll(ImmutableCartItems $items): void
7326
{
74-
return $this->discounts;
27+
$items->toCommerceables()
28+
->each($this->attachAll());
7529
}
7630

77-
private function ensureValidItem(?ImmutableCartItem $item): void
31+
private function attachAll(): callable
7832
{
79-
if (null === $item) {
80-
throw new NotFoundItem();
81-
}
33+
return fn(CommerceableCartItem $commerceable) => $this->attach($commerceable);
8234
}
8335
}

src/Entities/TradedCommercialTransaction.php renamed to src/Entities/RegisteredCommercialTransaction.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Vaened\SwiftCart\Entities;
99

10-
interface TradedCommercialTransaction extends Discountable, Chargeable
10+
interface RegisteredCommercialTransaction extends Discountable, Chargeable
1111
{
1212
public function items(): CommercialTransactionItems;
1313
}

tests/Utils/Billing/Invoice.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
use Vaened\PriceEngine\Adjustments\Adjusters;
1111
use Vaened\PriceEngine\Adjustments\Charge;
1212
use Vaened\PriceEngine\Adjustments\Discount;
13-
use Vaened\SwiftCart\Entities\TradedCommercialTransaction;
13+
use Vaened\SwiftCart\Entities\RegisteredCommercialTransaction;
1414
use Vaened\SwiftCart\Entities\CommercialTransactionItems;
1515

1616
use function Lambdish\Phunctional\each;
1717

18-
final class Invoice implements TradedCommercialTransaction
18+
final class Invoice implements RegisteredCommercialTransaction
1919
{
2020
private readonly Adjusters $charges;
2121

0 commit comments

Comments
 (0)