Initial commit

This commit is contained in:
Zdeněk Burda
2026-01-09 21:26:40 +01:00
parent e83aec6dca
commit 41e3ce6f25
404 changed files with 61250 additions and 28 deletions

View File

@@ -0,0 +1,119 @@
<?php
namespace App\Http\Controllers;
use App\Models\ContestParameter;
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 ContestParameterController 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 contest parametrů (stránkovaně).
*/
public function index(Request $request): JsonResponse
{
$perPage = (int) $request->get('per_page', 100);
$items = ContestParameter::query()
->with('contest')
->orderBy('contest_id')
->orderBy('log_type')
->paginate($perPage);
return response()->json($items);
}
/**
* Vytvoření nových parametrů pro contest.
* Autorizace přes ContestParameterPolicy@create.
*/
public function store(Request $request): JsonResponse
{
$this->authorize('create', ContestParameter::class);
$data = $this->validateData($request);
$item = ContestParameter::create($data);
$item->load('contest');
return response()->json($item, 201);
}
/**
* Detail parametrů.
*/
public function show(ContestParameter $contest_parameter): JsonResponse
{
$contest_parameter->load('contest');
return response()->json($contest_parameter);
}
/**
* Aktualizace parametrů (partial update).
* Autorizace přes ContestParameterPolicy@update.
*/
public function update(Request $request, ContestParameter $contest_parameter): JsonResponse
{
$this->authorize('update', $contest_parameter);
$data = $this->validateData($request, partial: true);
$contest_parameter->fill($data);
$contest_parameter->save();
$contest_parameter->load('contest');
return response()->json($contest_parameter);
}
/**
* Smazání parametrů.
* Autorizace přes ContestParameterPolicy@delete.
*/
public function destroy(ContestParameter $contest_parameter): JsonResponse
{
$this->authorize('delete', $contest_parameter);
$contest_parameter->delete();
return response()->json(null, 204);
}
/**
* Validace vstupu pro store / update.
*/
protected function validateData(Request $request, bool $partial = false): array
{
$required = $partial ? 'sometimes' : 'required';
return $request->validate([
'contest_id' => [$required, 'integer', 'exists:contests,id'],
'log_type' => [$required, 'in:STANDARD,CHECK'],
'ignore_slash_part' => [$required, 'boolean'],
'ignore_third_part' => [$required, 'boolean'],
'letters_in_rst' => [$required, 'boolean'],
'discard_qso_rec_diff_call' => [$required, 'boolean'],
'discard_qso_sent_diff_call' => [$required, 'boolean'],
'discard_qso_rec_diff_rst' => [$required, 'boolean'],
'discard_qso_sent_diff_rst' => [$required, 'boolean'],
'discard_qso_rec_diff_code' => [$required, 'boolean'],
'discard_qso_sent_diff_code' => [$required, 'boolean'],
'unique_qso' => [$required, 'boolean'],
'time_tolerance' => [$required, 'integer', 'min:0'],
]);
}
}