Created
January 22, 2026 00:52
-
-
Save bryan-txg/478c163d469070e9e93e491dd59055ba to your computer and use it in GitHub Desktop.
Code sample
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * На сайте есть форма-"калькулятор", расчитывающая стоимость доставки груза самолетом в зависимости от разных параметров. | |
| * Данные, отправляемые этой формой - это по сути созданная посетителем сайта предварительная заявка на авиа-доставку. | |
| * Метод send в классе CalcAviaController, принимает данные из этой формы и отправляет их либо в CRM Битрикс24 | |
| * в раздел "Лиды", либо в телеграм ответственного за обработку заявок с сайта менеджера, либо на его имейл. | |
| * Каждый вариант реализован в виде отдельной стратегии. Выбор текущей стратегии забинден в провайдере (класс BindingsProvider). | |
| */ | |
| class BindingsProvider extends ServiceProvider | |
| { | |
| public function register(): void | |
| { | |
| $this->app->bind(LeadSubmissionStrategyInterface::class, EmailSubmissionStrategy::class); | |
| } | |
| } | |
| interface LeadSubmissionStrategyInterface | |
| { | |
| public function submit(CalcAviaCalculation $calculation, string $text): void; | |
| } | |
| /** | |
| * Отправляет расчет из калькулятора авиаперевозок на имейл менеджера | |
| */ | |
| class EmailSubmissionStrategy implements LeadSubmissionStrategyInterface | |
| { | |
| public function submit(CalcAviaCalculation $calculation, string $text): void | |
| { | |
| SendMailJob::dispatch( | |
| 'Запрос с сайта – Калькулятор «Авиа»', | |
| $text | |
| )->onQueue('mail_queue'); | |
| } | |
| } | |
| /** | |
| * Отправляет расчет из калькулятора авиаперевозок в битрикс 24 в раздел "лиды" | |
| */ | |
| class Bitrix24SubmissionStrategy implements LeadSubmissionStrategyInterface | |
| { | |
| public function submit(CalcAviaCalculation $calculation, string $text): void | |
| { | |
| SendBitrixLeadJob::dispatch( | |
| $calculation, | |
| $text | |
| )->onQueue('bitrix24_queue'); | |
| } | |
| } | |
| /** | |
| * Отправляет расчет из калькулятора авиаперевозок в телеграм менеджера | |
| */ | |
| class TelegramSubmissionStrategy implements LeadSubmissionStrategyInterface | |
| { | |
| public function submit(CalcAviaCalculation $calculation, string $text): void | |
| { | |
| SendTelegramJob::dispatch( | |
| $calculation, | |
| $text | |
| )->onQueue('telegram_queue'); | |
| } | |
| } | |
| /** | |
| * Методы, относящиеся к калькулятору авиаперевозок | |
| */ | |
| class CalcAviaController | |
| { | |
| /** | |
| * Обработчик для Route::post('/calcs/avia/send' | |
| * Отправляет расчет калькулятора менеджерам через забинденную в провайдере стратегию | |
| */ | |
| public function send(Request $request, LeadSubmissionStrategyInterface $submissionStrategy): JsonResponse | |
| { | |
| $request->validate([ | |
| 'calculation_id' => ['required', 'exists:calc_avia_calculations,id'], | |
| ]); | |
| $data = $request->all(); | |
| $calculation = CalcAviaCalculation::findOrFail($data['calculation_id']); | |
| $calculation->update([ | |
| 'request_name' => $data['request_name'] ?? null, | |
| 'request_phone' => $data['request_phone'] ?? null, | |
| 'request_email' => $data['request_email'] ?? null, | |
| ]); | |
| $text = $this->prepareMainText($calculation); | |
| // Отправка расчета | |
| $submissionStrategy->submit($calculation, $text); | |
| return response()->json([], 200); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment