store/app/Services/Concerns/RunsInTransaction.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.',
]);
}
}
}