61 lines
2.5 KiB
PHP
61 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\V1;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\StoreSimulationFormDraftRequest;
|
|
use App\Models\SimulationFormDraft;
|
|
use App\Services\SimulationFormDrafts;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Str;
|
|
|
|
class SimulationFormDraftController extends Controller
|
|
{
|
|
public function store(StoreSimulationFormDraftRequest $request, SimulationFormDrafts $drafts): JsonResponse
|
|
{
|
|
$key = $request->header('Idempotency-Key');
|
|
abort_unless(is_string($key) && strlen($key) >= 16 && strlen($key) <= 128, 428, 'Idempotency-Key é obrigatório.');
|
|
$result = $drafts->create($request->validated(), $request, $key);
|
|
$draft = $result['draft'];
|
|
|
|
return response()->json(['data' => ['id' => $draft->id, 'version_no' => $draft->version_no, 'replayed' => $result['replayed']]], $result['replayed'] ? 200 : 201)
|
|
->header('ETag', $drafts->etag($draft))->header('Cache-Control', 'no-store, private');
|
|
}
|
|
|
|
public function current(Request $request, SimulationFormDrafts $drafts): JsonResponse
|
|
{
|
|
$draft = $drafts->current($request);
|
|
if (! $draft) {
|
|
return response()->json(['data' => null], 200)->header('Cache-Control', 'no-store, private');
|
|
}
|
|
|
|
return response()->json(['data' => $drafts->present($draft)])->header('ETag', $drafts->etag($draft))->header('Cache-Control', 'no-store, private');
|
|
}
|
|
|
|
public function show(Request $request, string $id, SimulationFormDrafts $drafts): JsonResponse
|
|
{
|
|
abort_unless(Str::isUuid($id), 404);
|
|
$draft = $drafts->find($id, $request);
|
|
|
|
return response()->json(['data' => $drafts->present($draft)])->header('ETag', $drafts->etag($draft))->header('Cache-Control', 'no-store, private');
|
|
}
|
|
|
|
public function update(StoreSimulationFormDraftRequest $request, string $id, SimulationFormDrafts $drafts): JsonResponse
|
|
{
|
|
abort_unless(Str::isUuid($id), 404);
|
|
$draft = $drafts->update($id, $request->validated(), $request);
|
|
|
|
return response()->json(['data' => ['id' => $draft->id, 'version_no' => $draft->version_no]])
|
|
->header('ETag', $drafts->etag($draft))->header('Cache-Control', 'no-store, private');
|
|
}
|
|
|
|
public function destroy(Request $request, string $id, SimulationFormDrafts $drafts): JsonResponse
|
|
{
|
|
abort_unless(Str::isUuid($id), 404);
|
|
$drafts->delete($id, $request);
|
|
|
|
return response()->json([], 204)->header('Cache-Control', 'no-store, private');
|
|
}
|
|
}
|