Files
vkv/app/Http/Controllers/QsoOverrideController.php
Zdeněk Burda 41e3ce6f25 Initial commit
2026-01-09 21:26:40 +01:00

127 lines
3.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers;
use App\Models\QsoOverride;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class QsoOverrideController extends BaseController
{
use AuthorizesRequests, ValidatesRequests;
public function __construct()
{
// zápisové operace jen pro přihlášené
$this->middleware('auth:sanctum')->only(['store', 'update', 'destroy']);
}
/**
* Seznam override záznamů lze filtrovat podle evaluation_run_id/log_qso_id.
*/
public function index(Request $request): JsonResponse
{
$perPage = (int) $request->get('per_page', 100);
$query = QsoOverride::query()
->with(['evaluationRun', 'logQso', 'forcedMatchedLogQso', 'createdByUser']);
if ($request->filled('evaluation_run_id')) {
$query->where('evaluation_run_id', (int) $request->get('evaluation_run_id'));
}
if ($request->filled('log_qso_id')) {
$query->where('log_qso_id', (int) $request->get('log_qso_id'));
}
$items = $query->orderByDesc('id')->paginate($perPage);
return response()->json($items);
}
/**
* Vytvoření override záznamu.
*/
public function store(Request $request): JsonResponse
{
$this->authorize('create', QsoOverride::class);
$data = $this->validateData($request);
if (! isset($data['created_by_user_id']) && $request->user()) {
$data['created_by_user_id'] = $request->user()->id;
}
$item = QsoOverride::create($data);
$item->load(['evaluationRun', 'logQso', 'forcedMatchedLogQso', 'createdByUser']);
return response()->json($item, 201);
}
/**
* Detail override záznamu.
*/
public function show(QsoOverride $qsoOverride): JsonResponse
{
$qsoOverride->load(['evaluationRun', 'logQso', 'forcedMatchedLogQso', 'createdByUser']);
return response()->json($qsoOverride);
}
/**
* Aktualizace override záznamu.
*/
public function update(Request $request, QsoOverride $qsoOverride): JsonResponse
{
$this->authorize('update', $qsoOverride);
$data = $this->validateData($request, partial: true);
$qsoOverride->fill($data);
$qsoOverride->save();
$qsoOverride->load(['evaluationRun', 'logQso', 'forcedMatchedLogQso', 'createdByUser']);
return response()->json($qsoOverride);
}
/**
* Smazání override záznamu.
*/
public function destroy(QsoOverride $qsoOverride): JsonResponse
{
$this->authorize('delete', $qsoOverride);
$qsoOverride->delete();
return response()->json(null, 204);
}
protected function validateData(Request $request, bool $partial = false): array
{
$required = $partial ? 'sometimes' : 'required';
return $request->validate([
'evaluation_run_id' => [$required, 'integer', 'exists:evaluation_runs,id'],
'log_qso_id' => [$required, 'integer', 'exists:log_qsos,id'],
'forced_matched_log_qso_id' => ['sometimes', 'nullable', 'integer', 'exists:log_qsos,id'],
'forced_status' => [
'sometimes',
'string',
'in:AUTO,VALID,INVALID,NIL,DUPLICATE,BUSTED_CALL,BUSTED_EXCHANGE,OUT_OF_WINDOW',
],
'forced_points' => ['sometimes', 'nullable', 'numeric'],
'forced_penalty' => ['sometimes', 'nullable', 'numeric'],
'reason' => ['sometimes', 'nullable', 'string', 'max:500'],
'context' => ['sometimes', 'nullable', 'array'],
'created_by_user_id' => ['sometimes', 'nullable', 'integer', 'exists:users,id'],
]);
}
}