Files
SGF/app/Modules/Identity/Http/ModuleRecordsController.php
2026-11-02 20:29:34 +02:00

27 lines
1.4 KiB
PHP

<?php
namespace App\Modules\Identity\Http;
use App\Modules\Identity\Services\ModuleAssociationReview;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
final class ModuleRecordsController
{
public function index(Request $request, ModuleAssociationReview $review) { return response()->json($review->listing($request))->header('Cache-Control', 'no-store'); }
public function preview(Request $request, ModuleAssociationReview $review) { return $this->decision(fn () => $review->preview($request)); }
public function associate(Request $request, ModuleAssociationReview $review) { return $this->decision(fn () => $review->confirm($request)); }
private function decision(callable $operation)
{
try {
return response()->json($operation())->header('Cache-Control', 'no-store');
} catch (QueryException $e) {
// The service transaction has already rolled back. Do not retry a
// decision automatically or expose SQL/bindings in the response.
if (($e->errorInfo[0] ?? null) !== '55P03') throw $e;
return response()->json([
'code' => 'association_busy',
'message' => 'A conferência está ocupada por outra operação. Aguarde e volte a confirmar; o estado será novamente validado.',
], 423)->header('Cache-Control', 'no-store');
}
}
}