graymatterlabs / pingtree
Ping Tree 是一个过程,其中实时地向多个买家提供一个线索,并将其出售给出价最高者。
v0.2.0.2
2023-02-28 19:01 UTC
Requires
- php: ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpunit/phpunit: ^9.5
- psr/simple-cache: ^3.0
Suggests
- psr/simple-cache: ^3.0
This package is auto-updated.
Last update: 2024-09-08 09:53:42 UTC
README
Ping Tree 是一个过程,其中实时地向多个买家提供一个线索,并将其出售给出价最高者。
安装
您可以通过 composer 安装此包。
composer require graymatterlabs/pingtree:^0.3.0
使用方法
$tree = new Tree($strategy, $offers); $response = $tree->ping($lead);
响应
ping tree 将返回第一个由报价提供的成功响应。响应必须实现 GrayMatterLabs\PingTree\Contracts\Response
接口,但应在此基础上进行定制。
$tree = new Tree($strategy, $offers); $response = $tree->ping($lead); if ($response instanceof RedirectResponse) { return redirect($response->url()); }
报价
报价实例负责与报价通信并管理报价的状态,如健康和资格规则。
<?php namespace App\Offers; use App\Http; use App\Leads\AutoLead; use GrayMatterLabs\PingTree\Contracts\Offer; use GrayMatterLabs\PingTree\Contracts\Lead; use GrayMatterLabs\PingTree\Contracts\Response; class Example implements Offer { private string $url = 'https://example.com'; public function __construct(private Http $http, private string $key) { } public function getIdentifier(): string|int { return 'example'; } public function ping(AutoLead $lead): int { $response = $this->http ->withHeader('Authorization', $this->key) ->post($this->url . '/value', [ // ... ]); return (int) $response->json('value'); } public function send(AutoLead $lead): Response { $response = $this->http ->withHeader('Authorization', $this->key) ->post($this->url . '/send', [ // ... ]); return new RedirectResponse(!$response->ok(), $response->json('accepted'), $response->json('url')); } public function isEligible(AutoLead $lead): bool { return $lead->validate(); } public function isHealthy(): bool { return $this->http->get($this->url . '/health')->ok(); } }
事件
此包会触发事件,并提供注册每个事件的监听器的功能。监听器可用于执行任何自定义逻辑。监听器是同步执行的,以确保处理任何潜在异常。
您可以使用 listen
方法将监听器注册到处理所有事件的 Tree 类,如下所示
$tree = new Tree($strategy, $offers); // listen for any events $tree->listen($event, $callable); $tree->listen($event, $other_callable); $response = $tree->ping($lead);
以下是所有触发的事件、它们的描述以及传递给任何已注册监听器的参数列表。
策略
此包提供了一种名为 "策略" 的概念,用于决定将线索发送给哪个报价。提供了一组默认策略。提供自己的策略的要求是它们实现 GrayMatterLabs\PingTree\Contracts\Strategy
接口。
测试
composer test
变更日志
有关最近更改的更多信息,请参阅发行说明。
致谢
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅许可文件。