34 lines
870 B
PHP
34 lines
870 B
PHP
<?php
|
|
|
|
namespace App\Services\Concerns;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Validation\ValidationException;
|
|
|
|
trait RunsInTransaction
|
|
{
|
|
/**
|
|
* @template TReturn
|
|
*
|
|
* @param callable(): TReturn $callback
|
|
* @return TReturn
|
|
*/
|
|
protected function runInTransaction(callable $callback, string $context)
|
|
{
|
|
try {
|
|
return DB::transaction($callback);
|
|
} catch (ValidationException $e) {
|
|
throw $e;
|
|
} catch (\Throwable $e) {
|
|
Log::error("{$context}: {$e->getMessage()}", [
|
|
'trace' => $e->getTraceAsString(),
|
|
]);
|
|
|
|
throw ValidationException::withMessages([
|
|
'system' => 'Terjadi kesalahan pada server. Silakan laporkan masalah ini ke pihak terkait.',
|
|
]);
|
|
}
|
|
}
|
|
}
|