Escola 无头 LMS 购物车

维护者

详细信息

github.com/EscolaLMS/Cart

源代码

问题

安装次数: 13,573

依赖项: 13

建议者: 1

安全: 0

星标: 2

关注者: 2

分支: 0

开放问题: 0

类型:软件包

0.4.78 2024-05-07 14:40 UTC

README

swagger codecov phpunit downloads downloads downloads Maintainability Mutation testing badge

目的

此软件包允许您管理用户购物车,并定义什么是可购买的产品(以及什么是可销售的产品,即可出售的东西),然后可以添加到购物车中。此软件包还允许您的用户创建订单并购买购物车中的内容。

安装

  • composer require escolalms/cart
  • php artisan migrate
  • php artisan db:seed --class="EscolaLms\Cart\Database\Seeders\CartPermissionSeeder"

依赖项

此软件包依赖于EscolaLms/Payments软件包来创建和处理订单的支付。

使用

产品

EscolaLms\Cart\Models\Product是一个模型,表示可以添加到购物车并购买的可购买事物。产品本身除了可以被购买并分配给用户之外,没有其他附加功能。

产品由一个(单类产品)或多个(捆绑类产品)可销售产品组成——即代表在您的(LMS)应用中销售的具体事物的模型,例如课程。可销售产品必须实现可销售产品接口。

可销售产品

EscolaLms\Cart\Contracts\Productable接口定义了代表可销售事物的模型如何表现以及它们必须包含哪些方法和关系。

定义可销售产品

要创建(并销售)产品,您需要定义可销售产品。可销售产品是实现EscolaLms\Cart\Models\Contracts接口的模型(并可能使用EscolaLms\Cart\Contracts\ProductableTrait)。在将此接口添加到您的模型后,您需要在您的服务提供者中的boot方法中调用EscolaLms\Cart\Facades\Shop::registerProductableClass(Productable::class)。这将启用使用此可销售产品模型作为(产品的一部分)然后可以出售。

商店外观

商店外观封装了EscolaLms\Cart\Services\ProductService,提供了访问与注册可销售产品和管理产品相关的功能的方法。

购物车模型

EscolaLms\Cart\Models\Cart是一个表示用户购物车的模型。每个用户在给定时间内都可以有一个活跃的(存在的)购物车。

要为特定用户创建(或检索当前活动)购物车,您需要调用EscolaLms\Cart\Services\ShopService::cartForUser($user)方法。

购物车管理器

购物车及其内容使用附加到该购物车的EscolaLms\Cart\Services\CartManager类实例进行管理,而不是直接操作购物车对象。CartManagerEscolaLms\Cart\Services\ShopService(您可能不需要直接使用它,因为ShopService中的方法代表所有合理用例)使用。

商店服务

商店服务包含与购物车内容管理(添加/删除产品)和购买购物车(将购物车数据存储为订单并处理支付流程)相关的功能。

端点

所有端点都在swagger中定义。

测试

运行 ./vendor/bin/phpunit 来运行测试。查看 tests 目录,它是一个很好的起点,可以帮助理解这个包是如何工作的。特别是要注意 tests/Mocks 目录,因为它代表了 Productable 和 Productable Trait & Interface 的核心概念。

测试详情 codecov phpunit

事件

  • EscolaLms\Cart\Events\AbandonedCartEvent - 当计划任务找到24小时前非空的购物车时触发
  • EscolaLms\Cart\Events\OrderCancelled - 在支付处理被取消后触发,标记订单为已取消
  • EscolaLms\Cart\Events\OrderCreated - 当创建新订单时触发
  • EscolaLms\Cart\Events\OrderPaid - 订单支付后触发
  • EscolaLms\Cart\Events\ProductableAttached - 当 Productable 被附加到用户(例如,当包含该 Productable 的产品被附加到用户或使用管理端点管理 Productable 附加项时)后触发
  • EscolaLms\Cart\Events\ProductableDetached - 与 ProductableAttached 类似
  • EscolaLms\Cart\Events\ProductAddedToCart - 当产品被添加到购物车时触发
  • EscolaLms\Cart\Events\ProductAttached - 当产品被附加到用户(在购买它或使用管理端点添加它后)时触发
  • EscolaLms\Cart\Events\ProductBought - 用户购买产品后触发
  • EscolaLms\Cart\Events\ProductDetached - 与 ProductAttached 类似
  • EscolaLms\Cart\Events\ProductRemovedFromCart - 与 ProductAdded 类似

监听器

  • EscolaLms\Cart\Listeners\PaymentSuccessListener - 此监听器在为给定订单创建的支付被标记为已支付后,将订单标记为已支付(监听 EscolaLms\Payments\Events\PaymentSuccess 事件)

如何在前端使用此功能

管理面板

左侧菜单

Admin panel menu

产品列表

List of Products

创建/编辑产品

Creating/editing Product

订单列表

List of Orders

订单详情

Details of Order

权限

权限在 Enum 中定义,并在 Seeder 中初始化。

路线图。待办事项。故障排除

  • ???