dinhdjj/laravel-auto-db-transaction-middleware

This package is abandoned and no longer maintained. No replacement package was suggested.

A laravel-middleware auto activate db-transaction on each request


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

This is where your description should go. Limit it to a paragraph or two. Consider adding a small example.

Requirements

* Laravel 9+
* php 8.1+

Installation

You can install the package via composer:

composer require dinhdjj/laravel-auto-db-transaction-middleware

Usage

Firstly you should register the middleware to group or you can use middleware in specific routes.

/**
 * The application's route middleware groups.
 *
 * @var  array
 */
protected $middlewareGroups = [
    'web' => [
        ...,
        \Dinhdjj\AutoDBTransaction\AutoDBTransactionMiddleware::class,
    ],

    'api' => [
        ...,
        \Dinhdjj\AutoDBTransaction\AutoDBTransactionMiddleware::class,
    ]

Above is all thing you need to do.

How it works

Below I will show you how it auto activate db-transaction on each request.

  1. It only activate beginTransaction on method POST, PUT, PATCH, DELETE...(not GET) methods.
  2. In all cases it will auto commit and only rollback when it encounter an unhandled exception.
  3. It will also throw exceptions in some cases.
    • When you miss commit or rollback on your own beginTransaction.
    • When you use redundant commit or rollback db-transaction.

Exception handler

When an exception is thrown, in most cases behaver of this package will rollBack the db-transaction, but if you not use default logging exception handler of laravel the package will evaluate that you handled the exception and it will continue commit db-transaction.

Below is the example of cases not use default logging exception handler of laravel

//App\Exceptions\Handler

$this->reportable(function (InvalidOrderException $e) {
    //
})->stop();

$this->reportable(function (InvalidOrderException $e) {
    return false;
});

or

namespace App\Exceptions;
 
use Exception;
 
class InvalidOrderException extends Exception
{
    /**
     * Report the exception.
     *
     * @return bool|null
     */
    public function report()
    {
        return true;
        // or
        return null;
    }
}

If you not use default logging exception handler of laravel and you want to rollBack the db-transaction, you can use this:

// 1. use your own db-transaction
DB::beginTransaction();
// your code
DB::rollBack();
// 2. You helper method to rollback the package's db-transaction
$this->reportable(function (InvalidOrderException $e) {
    \Dinhdjj\AutoDBTransaction\Facades::rollBack();
})->stop();

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.