From 3c608cbc6b8aa34e62a5f13605383f4f51e81f49 Mon Sep 17 00:00:00 2001 From: Babichev Maxim Date: Sat, 25 May 2019 00:34:04 +0300 Subject: [PATCH] add cart in docs --- docs/_sidebar.md | 1 + docs/cart.md | 94 +++++++++++++++++++++++++++++++++++++++++++++ docs/ru/_sidebar.md | 1 + docs/ru/cart.md | 94 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 docs/cart.md create mode 100644 docs/ru/cart.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 4bbe29f4c..508265cca 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -16,6 +16,7 @@ - Purchases - [Payment](payment) + - [Cart](cart) - [Payment Free](pay-free) - [Refund](refund) diff --git a/docs/cart.md b/docs/cart.md new file mode 100644 index 000000000..0e86562b4 --- /dev/null +++ b/docs/cart.md @@ -0,0 +1,94 @@ +## User Model + +Add the `CanPay` trait and `Customer` interface to your User model. + +```php +use Bavix\Wallet\Traits\CanPay; +use Bavix\Wallet\Interfaces\Customer; + +class User extends Model implements Customer +{ + use CanPay; +} +``` + +## Item Model + +Add the `HasWallet` trait and `Product` interface to Item model. + +```php +use Bavix\Wallet\Traits\HasWallet; +use Bavix\Wallet\Interfaces\Product; +use Bavix\Wallet\Interfaces\Customer; + +class Item extends Model implements Product +{ + use HasWallet; + + public function canBuy(Customer $customer, int $quantity = 1, bool $force = null): bool + { + /** + * If the service can be purchased once, then + * return !$customer->paid($this); + */ + return true; + } + + public function getAmountProduct(): int + { + return round($this->price * 100); + } + + public function getMetaProduct(): ?array + { + return [ + 'title' => $this->title, + 'description' => 'Purchase of Product #' . $this->getUniqueId(), + 'price' => $this->getAmountProduct(), + ]; + } + + public function getUniqueId(): string + { + return (string)$this->getKey(); + } +} +``` + +## Fill the cart + +Find the user and check the balance. + +```php +$user = User::first(); +$user->balance; // int(0) +``` + +Let's start shopping. + +```php +use Bavix\Wallet\Objects\Cart; + +$list = [ + 'potato' => 3, + 'carrot' => 10, +]; + +$products = Item::query() + ->whereIn('slug', ['potato', 'carrot']) + ->get(); + +$cart = Cart::make(); +foreach ($products as $product) { + // add product's + $cart->addItem($product, $list[$product->slug]); +} + +$user->deposit($cart->getTotal()); +$user->balanceFloat; // float(151.27) + +(bool)$user->payCart($cart); // true +$user->balanceFloat; // float(0) +``` + +It worked! diff --git a/docs/ru/_sidebar.md b/docs/ru/_sidebar.md index b7804ae5e..bfbe91621 100644 --- a/docs/ru/_sidebar.md +++ b/docs/ru/_sidebar.md @@ -16,6 +16,7 @@ - Покупки - [Платеж](payment) + - [Корзина](cart) - [Купить бесплатно](pay-free) - [Возврат](refund) diff --git a/docs/ru/cart.md b/docs/ru/cart.md new file mode 100644 index 000000000..6e20dd13b --- /dev/null +++ b/docs/ru/cart.md @@ -0,0 +1,94 @@ +## Пользователь + +Добавим `CanPay` trait и `Customer` interface в модель User. + +```php +use Bavix\Wallet\Traits\CanPay; +use Bavix\Wallet\Interfaces\Customer; + +class User extends Model implements Customer +{ + use CanPay; +} +``` + +## Товар + +Добавим `HasWallet` trait и `Product` interface в модель Item. + +```php +use Bavix\Wallet\Traits\HasWallet; +use Bavix\Wallet\Interfaces\Product; +use Bavix\Wallet\Interfaces\Customer; + +class Item extends Model implements Product +{ + use HasWallet; + + public function canBuy(Customer $customer, int $quantity = 1, bool $force = null): bool + { + /** + * If the service can be purchased once, then + * return !$customer->paid($this); + */ + return true; + } + + public function getAmountProduct(): int + { + return round($this->price * 100); + } + + public function getMetaProduct(): ?array + { + return [ + 'title' => $this->title, + 'description' => 'Purchase of Product #' . $this->getUniqueId(), + 'price' => $this->getAmountProduct(), + ]; + } + + public function getUniqueId(): string + { + return (string)$this->getKey(); + } +} +``` + +## Как заполнить корзину + +Найдем пользователя и проверим его баланс. + +```php +$user = User::first(); +$user->balance; // int(0) +``` + +Приступим к покупкам. + +```php +use Bavix\Wallet\Objects\Cart; + +$list = [ + 'potato' => 3, + 'carrot' => 10, +]; + +$products = Item::query() + ->whereIn('slug', ['potato', 'carrot']) + ->get(); + +$cart = Cart::make(); +foreach ($products as $product) { + // add product's + $cart->addItem($product, $list[$product->slug]); +} + +$user->deposit($cart->getTotal()); +$user->balanceFloat; // float(151.27) + +(bool)$user->payCart($cart); // true +$user->balanceFloat; // float(0) +``` + +Это работает!