Skip to content

Commit ded0b04

Browse files
committed
[10.x] Implementation without changing most contracts
1 parent 228451f commit ded0b04

File tree

7 files changed

+27
-10
lines changed

7 files changed

+27
-10
lines changed

src/Internal/Dto/ItemDto.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Bavix\Wallet\Internal\Dto;
66

77
use Bavix\Wallet\Interfaces\ProductInterface;
8+
use Bavix\Wallet\Interfaces\Wallet;
89

910
/** @immutable */
1011
final class ItemDto implements ItemDtoInterface
@@ -13,6 +14,7 @@ public function __construct(
1314
private readonly ProductInterface $product,
1415
private readonly int $quantity,
1516
private readonly int|string|null $pricePerItem,
17+
private readonly ?Wallet $receiving,
1618
) {
1719
}
1820

@@ -38,4 +40,9 @@ public function count(): int
3840
{
3941
return $this->quantity;
4042
}
43+
44+
public function getReceiving(): ?Wallet
45+
{
46+
return $this->receiving;
47+
}
4148
}

src/Internal/Dto/ItemDtoInterface.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Bavix\Wallet\Internal\Dto;
66

77
use Bavix\Wallet\Interfaces\ProductInterface;
8+
use Bavix\Wallet\Interfaces\Wallet;
89
use Countable;
910

1011
interface ItemDtoInterface extends Countable
@@ -17,4 +18,6 @@ public function getItems(): array;
1718
public function getPricePerItem(): int|string|null;
1819

1920
public function getProduct(): ProductInterface;
21+
22+
public function getReceiving(): ?Wallet;
2023
}

src/Objects/Cart.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Bavix\Wallet\Interfaces\CartInterface;
88
use Bavix\Wallet\Interfaces\Customer;
99
use Bavix\Wallet\Interfaces\ProductInterface;
10+
use Bavix\Wallet\Interfaces\Wallet;
1011
use Bavix\Wallet\Internal\Dto\BasketDto;
1112
use Bavix\Wallet\Internal\Dto\BasketDtoInterface;
1213
use Bavix\Wallet\Internal\Dto\ItemDto;
@@ -58,14 +59,18 @@ public function withMeta(array $meta): self
5859
/**
5960
* @param positive-int $quantity
6061
*/
61-
public function withItem(ProductInterface $product, int $quantity = 1, int|string|null $pricePerItem = null): self
62-
{
62+
public function withItem(
63+
ProductInterface $product,
64+
int $quantity = 1,
65+
int|string|null $pricePerItem = null,
66+
?Wallet $receiving = null,
67+
): self {
6368
$self = clone $this;
6469

6570
$productId = $self->productId($product);
6671

6772
$self->items[$productId] ??= [];
68-
$self->items[$productId][] = new ItemDto($product, $quantity, $pricePerItem);
73+
$self->items[$productId][] = new ItemDto($product, $quantity, $pricePerItem, $receiving);
6974

7075
return $self;
7176
}

src/Services/EagerLoaderService.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Bavix\Wallet\Services;
66

7+
use Bavix\Wallet\Interfaces\Customer;
78
use Bavix\Wallet\Internal\Dto\BasketDtoInterface;
89
use Bavix\Wallet\Internal\Repository\WalletRepositoryInterface;
910
use Bavix\Wallet\Models\Wallet;
@@ -19,7 +20,7 @@ public function __construct(
1920
) {
2021
}
2122

22-
public function loadWalletsByBasket(BasketDtoInterface $basketDto): void
23+
public function loadWalletsByBasket(Customer $customer, BasketDtoInterface $basketDto): void
2324
{
2425
$products = [];
2526
/** @var array<array-key, array<array-key, int|string>> $productGroupIds */

src/Services/EagerLoaderServiceInterface.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Bavix\Wallet\Services;
66

7+
use Bavix\Wallet\Interfaces\Customer;
78
use Bavix\Wallet\Internal\Dto\BasketDtoInterface;
89

910
/**
@@ -13,5 +14,5 @@
1314
*/
1415
interface EagerLoaderServiceInterface
1516
{
16-
public function loadWalletsByBasket(BasketDtoInterface $basketDto): void;
17+
public function loadWalletsByBasket(Customer $customer, BasketDtoInterface $basketDto): void;
1718
}

src/Traits/CartPay.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function payFreeCart(CartInterface $cart): array
5454
$basketDto = $cart->getBasketDto();
5555
$basketService = app(BasketServiceInterface::class);
5656
$availabilityAssembler = app(AvailabilityDtoAssemblerInterface::class);
57-
app(EagerLoaderServiceInterface::class)->loadWalletsByBasket($basketDto);
57+
app(EagerLoaderServiceInterface::class)->loadWalletsByBasket($this, $basketDto);
5858
if (! $basketService->availability($availabilityAssembler->create($this, $basketDto, false))) {
5959
throw new ProductEnded(
6060
app(TranslatorServiceInterface::class)->get('wallet::errors.product_stock'),
@@ -112,7 +112,7 @@ public function payCart(CartInterface $cart, bool $force = false): array
112112
$basketDto = $cart->getBasketDto();
113113
$basketService = app(BasketServiceInterface::class);
114114
$availabilityAssembler = app(AvailabilityDtoAssemblerInterface::class);
115-
app(EagerLoaderServiceInterface::class)->loadWalletsByBasket($basketDto);
115+
app(EagerLoaderServiceInterface::class)->loadWalletsByBasket($this, $basketDto);
116116
if (! $basketService->availability($availabilityAssembler->create($this, $basketDto, $force))) {
117117
throw new ProductEnded(
118118
app(TranslatorServiceInterface::class)->get('wallet::errors.product_stock'),
@@ -190,7 +190,7 @@ public function refundCart(CartInterface $cart, bool $force = false, bool $gifts
190190
{
191191
return app(AtomicServiceInterface::class)->block($this, function () use ($cart, $force, $gifts) {
192192
$basketDto = $cart->getBasketDto();
193-
app(EagerLoaderServiceInterface::class)->loadWalletsByBasket($basketDto);
193+
app(EagerLoaderServiceInterface::class)->loadWalletsByBasket($this, $basketDto);
194194
$transfers = app(PurchaseServiceInterface::class)->already($this, $basketDto, $gifts);
195195
if (count($transfers) !== $basketDto->total()) {
196196
throw new ModelNotFoundException(

tests/Units/Domain/BasketTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ final class BasketTest extends TestCase
1818
public function testCount(): void
1919
{
2020
$item = new Item();
21-
$productDto1 = new ItemDto($item, 24, null);
22-
$productDto2 = new ItemDto($item, 26, null);
21+
$productDto1 = new ItemDto($item, 24, null, null);
22+
$productDto2 = new ItemDto($item, 26, null, null);
2323
$basket = new BasketDto([$productDto1, $productDto2], []);
2424

2525
self::assertEmpty($basket->meta());

0 commit comments

Comments
 (0)