Otázka 15 / 15

Dvojnásobná radost z kávovaru

Paní Veselá zaplatila kávovar kartou jednou, ale dostala dva e-maily „Děkujeme za platbu“, sklad odepsal dva kusy a účetní systém jí vystavil dvě faktury. Banka i platební brána potvrzují jedinou platbu a paní Veselá se zdvořile ptá, jestli jí druhý kávovar přijde taky. Podle podpory se to děje hlavně v pondělí dopoledne, kdy účetní systém odpovídá pomalu. Tady je část modulu, která přijímá oznámení od platební brány. Co se děje a co bys udělal?

Ctrl/Cmd+klik na metodu, třídu nebo konstantu otevře její deklaraci, Alt+← vrátí zpět.

app › Services › Payment › PaymentWebhookHandler.php
<?php declare(strict_types=1);

namespace App\Services\Payment;

use App\Mail\PaymentReceivedMail;
use App\Repositories\OrderRepository;
use App\Services\Erp\ErpClient;
use App\Services\Stock\StockWriteOffService;
use Illuminate\Contracts\Mail\Mailer;

final class PaymentWebhookHandler
{
    public function __construct(
        private readonly OrderRepository $orderRepository,
        private readonly StockWriteOffService $stockWriteOffService,
        private readonly ErpClient $erpClient,
        private readonly Mailer $mailer,
    )
    {}

    public function handle(PaymentNotification $notification): void
    {
        if (!$notification->isPaid()) {
            return;
        }

        $order = $this->orderRepository->getByNumber($notification->orderNumber);
        $order->markAsPaid($notification->transactionId);

        $this->stockWriteOffService->writeOffItems($order);
        $this->erpClient->createInvoice($order);
        $this->mailer->to($order->email)->send(new PaymentReceivedMail($order));
    }
}