PHPackages                             avangero/deal-cmd-package - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. avangero/deal-cmd-package

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

avangero/deal-cmd-package
=========================

PHP пакет для обработки текстовых команд пользователя в CRM-системе

1.0.1(7mo ago)02MITPHPPHP ^8.1

Since Sep 22Pushed 7mo agoCompare

[ Source](https://github.com/Avangero/deal-cmd-package)[ Packagist](https://packagist.org/packages/avangero/deal-cmd-package)[ RSS](/packages/avangero-deal-cmd-package/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (7)Versions (3)Used By (0)

Deal Command Package
====================

[](#deal-command-package)

PHP-пакет для обработки текстовых команд пользователя в контексте сделки (CRM). Независим от фреймворка, с готовой интеграцией в Laravel.

Возможности
-----------

[](#возможности)

- Парсинг текстовых команд вида `/команда аргументы`
- Паттерн Chain of Responsibility для обработки
- Изолированная доменная логика (чистый PHP)
- Логирование результатов выполнения
- Простая расширяемость новыми командами

Реализованные команды:

- `/принято 500 офис` → устанавливает свойства сделки (сумма и тип)
- `/контакт` → отправляет служебное сообщение с контактом клиента
- `/причина_закрытия удалена транзакция` → устанавливает причину закрытия
- `/причина` → отправляет служебное сообщение с причиной закрытия

Установка
---------

[](#установка)

```
composer require avangero/deal-cmd-package
```

Минимальные требования: PHP 8.1+

Быстрый старт (фреймворк-независимо)
------------------------------------

[](#быстрый-старт-фреймворк-независимо)

```
use Avangero\DealCmdPackage\Application\Services\CommandProcessor;
use Avangero\DealCmdPackage\Domain\Services\CommandParser;
use Avangero\DealCmdPackage\Domain\ValueObjects\DealId;

// Реализуйте интерфейсы доменного слоя под вашу систему:
// - DealRepositoryInterface
// - MessageSenderInterface
// - LoggerInterface (можно адаптировать PSR-3)
// - CommandConfigurationInterface
// - CommandMapperInterface
// - MessageProviderInterface

// Затем создайте CommandProcessor, передав зависимости и список команд
$processor = new CommandProcessor(
    parser: new CommandParser($messageProvider),
    logger: $logger,
    messageProvider: $messageProvider,
    commandMapper: $commandMapper,
    commands: [
        $acceptedCommand,
        $contactCommand,
        $closeReasonCommand,
        $reasonCommand,
    ]
);

$result = $processor->process('/принято 500 офис', new DealId(123));
```

Интеграция с Laravel
--------------------

[](#интеграция-с-laravel)

Пакет включает провайдер `DealCmdServiceProvider` и автоматически регистрируется через `extra.laravel.providers`.

1. Опубликуйте конфиги:

```
php artisan vendor:publish --provider="Avangero\\DealCmdPackage\\Infrastructure\\Laravel\\DealCmdServiceProvider"
```

Будут созданы файлы:

- `config/deal-cmd.php` — конфигурация команд
- `config/deal-cmd-messages.php` — сообщения
- `config/deal-cmd-mapping.php` — маппинг пользовательских команд

2. Зарегистрируйте адаптеры под вашу CRM в `AppServiceProvider`:

```
use Avangero\\DealCmdPackage\\Domain\\Ports\\DealRepositoryInterface;
use Avangero\\DealCmdPackage\\Domain\\Ports\\MessageSenderInterface;
use App\\Services\\CrmDealRepository;
use App\\Services\\CrmMessageSender;

public function register(): void
{
    $this->app->bind(DealRepositoryInterface::class, CrmDealRepository::class);
    $this->app->bind(MessageSenderInterface::class, CrmMessageSender::class);
}
```

3. Использование (например, в контроллере):

```
use Avangero\\DealCmdPackage\\Application\\Services\\CommandProcessor;
use Avangero\\DealCmdPackage\\Domain\\ValueObjects\\DealId;

public function processCommand(Request $request, CommandProcessor $processor)
{
    $result = $processor->process($request->string('command'), new DealId((int) $request->input('deal_id')));

    return response()->json([
        'success' => $result->isSuccess(),
        'message' => $result->isSuccess() ? $result->getMessage() : $result->getErrorMessage(),
    ]);
}
```

Конфигурация
------------

[](#конфигурация)

`config/deal-cmd.php` (ID свойств):

```
return [
    'accepted' => [
        'amount_property' => 14,
        'type_property' => 15,
    ],
    'close_reason' => [
        'close_reason_property' => 222,
    ],
    'reason' => [
        'close_reason_property' => 222,
    ],
    'contact' => [],
];
```

`config/deal-cmd-mapping.php` (маппинг пользовательских команд):

```
return [
    'принято' => 'accepted',
    'контакт' => 'contact',
    'причина_закрытия' => 'close_reason',
    'причина' => 'reason',
];
```

`config/deal-cmd-messages.php` (тексты сообщений): содержит шаблоны и ошибки, параметры вида `{name}`.

Расширение: добавление новой команды
------------------------------------

[](#расширение-добавление-новой-команды)

1. Реализуйте `CommandInterface` или унаследуйтесь от `AbstractConfigurableCommand`.
2. Зарегистрируйте команду в Laravel провайдере или передайте в список при создании `CommandProcessor`.
3. Добавьте маппинг в `deal-cmd-mapping.php` и при необходимости конфигурацию/сообщения.

Контракты (главные интерфейсы)
------------------------------

[](#контракты-главные-интерфейсы)

- `DealRepositoryInterface`: работа со свойствами сделки и контактом клиента
- `MessageSenderInterface`: отправка служебных сообщений в сделку
- `LoggerInterface`: логирование выполнения команд
- `CommandConfigurationInterface`: доступ к конфигам команд
- `CommandMapperInterface`: преобразование пользовательских команд в системные
- `MessageProviderInterface`: шаблоны и тексты сообщений

Тестирование
------------

[](#тестирование)

```
composer test
```

В проекте есть юнит- и интеграционные тесты (PHPUnit 10).

Качество кода
-------------

[](#качество-кода)

```
composer phpcs    # проверка кодстайла (PSR-12)
composer phpstan  # статический анализ
```

###  Health Score

32

—

LowBetter than 71% of packages

Maintenance66

Regular maintenance activity

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

229d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/bde7b81feeed7ea19a7ba27bf2b3e5f4cbbf90774d9f0822f074a09523ab47a7?d=identicon)[avangero](/maintainers/avangero)

---

Top Contributors

[![Avangero](https://avatars.githubusercontent.com/u/71272405?v=4)](https://github.com/Avangero "Avangero (6 commits)")

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/avangero-deal-cmd-package/health.svg)

```
[![Health](https://phpackages.com/badges/avangero-deal-cmd-package/health.svg)](https://phpackages.com/packages/avangero-deal-cmd-package)
```

###  Alternatives

[ecotone/ecotone

Supporting you in building DDD, CQRS, Event Sourcing applications with ease.

558549.8k17](/packages/ecotone-ecotone)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

728272.9k17](/packages/civicrm-civicrm-core)[jaxon-php/jaxon-core

Jaxon is an open source PHP library for easily creating Ajax web applications

73142.3k25](/packages/jaxon-php-jaxon-core)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

255.2k](/packages/aedart-athenaeum)[llm/mcp-server

PHP SDK for building MCP servers

431.1k](/packages/llm-mcp-server)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
