Делаю фичу, где при отмене заказа автоматически возвращаются деньги заказчику.
Причин не делать это автоматически - не нашел.
Сейчас логика работы выглядит так:
1. Отменяем заказ, статус переводится в CANCEL.
2. Далее, так как я подписан на изменение статуса, в слушателе я вызываю метод платежной системы на возврат.
Проблема: мне нужно отлавливать ошибку платежной системы и в случае, если ДС не были возвращены, снова менять статус заказа на предыдущий.
Если я это делаю в контроллере, получается грязновато:
public function update(OrderUpdateRequest $request, Project $project, Order $order)
{
if (in_array($order->status, [Order::PAID, Order::CLOSE])) {
if ($request->get('status') === Order::CANCEL && $order->isPaid() && !$order->isReverted() && $order->isNonCashType()) {
$this->orderService->reverse($order);
}
}
$order->fill($request->validated());
$order->saveOrFail();
return $this->baseJson(message: ResponseHelper::success(__('orders.messages.update.success')));
}
Интересует 2 вопроса:
1. Отказаться от автоматического возвращения ДС и делать это по отдельному действию?
2. Если это делать автоматически, каким образом лучше - перед сменой статуса у заказа или после? (в первом случае, если не удастся вернуть деньги, то просто сработает exception и статус уже не поменяется)