Verbs

ItemState

1<?php ...
2 
3namespace Thunk\Verbs\Examples\Cart\States;
4 
5use Thunk\Verbs\State;
6 
7class ItemState extends State
8{
9 public int $quantity = 0;
10 
11 public array $holds = [];
12 
13 public function available(): int
14 {
15 return $this->quantity - $this->activeHoldCount();
16 }
17 
18 public function activeHolds(): array
19 {
20 return $this->holds = array_filter($this->holds, fn ($hold) => $hold['expires'] > now()->unix());
21 }
22 
23 protected function activeHoldCount(): mixed
24 {
25 return collect($this->activeHolds())->sum('quantity');
26 }
27}