Proje: Okul Platform · Hub: Okul Platform — Conventions

DB Transaction Pattern

Kritik operasyonlarda DB::transaction() kullanılıyor. Özellikle Checkout controller’da yaygın:

// Closure ile
$checkout = DB::transaction(function () use ($dto) {
    return $this->checkoutService->create($dto);
});
 
// Arrow function ile
DB::transaction(fn () => $this->checkoutService->delete($checkout));

Exception + Transaction Birlikte Kullanım

try {
    $checkout = DB::transaction(
        fn () => $this->checkoutService->update($checkout, $dto)
    );
} catch (CheckoutCannotBeModifiedException $e) {
    return JsonResponse::unprocessable($e->getMessage());
}

Transaction fail olursa rollback, exception yakalanırsa hata response.

DatabaseTransactions Test Trait

Test ortamında DatabaseTransactions kullanılıyor → Her test sonrası otomatik rollback. Bu sayede DB::transaction içindeki kodlar da test sonrası geri alınır.

Neden Transaction?

  • Checkout oluşturma: birden fazla tablo güncelleme
  • Medya taşıma (media/move)
  • Ödeme onayı: checkout + payment kaydı