/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Observers/OrderObserver.php
67 строк
2 KB
vivanenko
add purchase statuses
28 май 2025, 16:38
28 май 2025, 16:38
40a2754
Код
Авторство
О чём код?
<?php namespace App\Observers; use App\Models\Order; use App\Jobs\CreateUserSubscriptionJob; use Illuminate\Support\Facades\Log; /** * Observer для модели Order * Отслеживает изменения статуса заказа и запускает соответствующие процессы */ class OrderObserver { /** * Handle the Order "updated" event. */ public function updated(Order $order): void { Log::info(__METHOD__); // Проверяем, изменился ли статус заказа на "paid" if ($this->isOrderPaid($order)) { $this->handlePaidOrder($order, 'updated'); } } /** * Handle the Order "created" event. */ public function created(Order $order): void { Log::info(__METHOD__); // Если заказ сразу создается со статусом "paid" if ($this->isOrderPaid($order)) { $this->handlePaidOrder($order, 'created'); } } /** * Проверяет, был ли заказ оплачен */ private function isOrderPaid(Order $order): bool { Log::info(__METHOD__, [ 'is_dirty' => $order->isDirty('status_code'), 'status_code' => $order->status_code, ]); return $order->isDirty('status_code') && $order->status_code === 'paid'; } /** * Обрабатывает оплаченный заказ */ private function handlePaidOrder(Order $order, string $event): void { Log::info("Order {$event} with paid status", [ 'order_id' => $order->id, 'user_id' => $order->user_id, 'total_amount' => $order->total_amount, 'event' => $event, ]); // Запускаем Job pipeline для создания подписки CreateUserSubscriptionJob::dispatch($order); } }