graymatterlabs/pingtree

Ping Tree 是一个过程,其中实时地向多个买家提供一个线索,并将其出售给出价最高者。

v0.2.0.2 2023-02-28 19:01 UTC

README

Latest Version on Packagist Tests Total Downloads

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)。有关更多信息,请参阅许可文件