Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
"ext-simplexml": "*",
"ext-xsl": "*",
"ext-zip": "*",
"api-platform/laravel": "^4.1",
"api-platform/laravel": "^4.2.14",
"cuyz/valinor": "^2.3",
"davidepastore/codice-fiscale": "^0.10.0",
"devcode-it/ical-easy-reader": "dev-main",
"devcode-it/sdd_ita": "dev-master",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace Modules\Impostazioni\API\Controllers;

use API\Controllers\BaseController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Models\Setting;
use Modules\Impostazioni\API\ImpostazioneResource;

final class GetImpostazioneController extends BaseController
{
public function __invoke(Request $request): JsonResponse
{
$setting = Setting::find($request->route('id'));
if (!$setting) {
return null;
}

$response = ImpostazioneResource::fromModel($setting);

return new JsonResponse($response);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,25 @@

namespace Modules\Impostazioni\API\Controllers;

use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ParameterNotFound;
use ApiPlatform\State\ProviderInterface;
use API\Controllers\BaseController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Models\Setting;
use Modules\Impostazioni\API\ImpostazioneResource;

final class ListImpostazioniProvider implements ProviderInterface
final class ListImpostazioniController extends BaseController
{
public function provide(Operation $operation, array $uriVariables = [], array $context = []): ?array
public function __invoke(Request $request): JsonResponse
{
$sezione = $operation->getParameters()->get('sezione')->getValue();
$search = $operation->getParameters()->get('ricerca')->getValue();
$sezione = $request->query('sezione');
$search = $request->query('ricerca');

// Trova le impostazioni che corrispondono alla ricerca
if (!$search instanceof ParameterNotFound) {
if (!empty($search)) {
$impostazioni = Setting::where('nome', 'like', '%'.$search.'%')
->orWhere('sezione', 'like', '%'.$search.'%')
->get();
} elseif (!$sezione instanceof ParameterNotFound) {
} elseif (!empty($sezione)) {
$impostazioni = Setting::where('sezione', $sezione)->get();
} else {
$impostazioni = Setting::all();
Expand All @@ -31,6 +31,6 @@ public function provide(Operation $operation, array $uriVariables = [], array $c
$results[] = ImpostazioneResource::fromModel($impostazione);
}

return $results;
return new JsonResponse($results);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@

namespace Modules\Impostazioni\API\Controllers;

use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProviderInterface;
use API\Controllers\BaseController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Models\Setting;
use Modules\Impostazioni\API\Models\ListSezioniImpostazioniResponse;

final class ListSezioniImpostazioniProvider implements ProviderInterface
final class ListSezioniImpostazioniController extends BaseController
{
public function provide(Operation $operation, array $uriVariables = [], array $context = []): ?ListSezioniImpostazioniResponse
public function __invoke(Request $request): JsonResponse
{
$gruppi = Setting::selectRaw('sezione AS nome, COUNT(id) AS numero')
->groupBy(['sezione'])
Expand All @@ -23,6 +24,6 @@ public function provide(Operation $operation, array $uriVariables = [], array $c
$response->sezioni[$gruppo->nome] = $gruppo->numero;
}

return $response;
return new JsonResponse($response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace Modules\Impostazioni\API\Controllers;

use API\Controllers\BaseController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Models\Setting;
use Modules\Impostazioni\API\Models\UpdateImpostazioneRequest;
use Modules\Impostazioni\API\Models\UpdateImpostazioneResponse;

final class UpdateImpostazioneController extends BaseController
{
public function __invoke(Request $request): JsonResponse
{
$data = $this->_cast($request, UpdateImpostazioneRequest::class);

$id = $request->route('id');
$response = new UpdateImpostazioneResponse();

$impostazione = Setting::find($id);
if (!$impostazione->editable) {
$response->edited = true;

return new JsonResponse($response);
}

$response->edited = \Settings::setValue($impostazione->id, $data->valore);

return new JsonResponse($response);
}
}

This file was deleted.

17 changes: 8 additions & 9 deletions modules/impostazioni/src/API/ImpostazioneResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
use ApiPlatform\Metadata\Put;
use ApiPlatform\Metadata\QueryParameter;
use Models\Setting;
use Modules\Impostazioni\API\Controllers\GetImpostazioneProvider;
use Modules\Impostazioni\API\Controllers\ListImpostazioniProvider;
use Modules\Impostazioni\API\Controllers\ListSezioniImpostazioniProvider;
use Modules\Impostazioni\API\Controllers\UpdateImpostazioneProcessor;
use Modules\Impostazioni\API\Controllers\GetImpostazioneController;
use Modules\Impostazioni\API\Controllers\ListImpostazioniController;
use Modules\Impostazioni\API\Controllers\ListSezioniImpostazioniController;
use Modules\Impostazioni\API\Controllers\UpdateImpostazioneController;
use Modules\Impostazioni\API\Models\ListSezioniImpostazioniResponse;
use Modules\Impostazioni\API\Models\UpdateImpostazioneRequest;
use Modules\Impostazioni\API\Models\UpdateImpostazioneResponse;
Expand All @@ -21,12 +21,12 @@
operations: [
new Get(
uriTemplate: '/impostazioni/sezioni',
provider: ListSezioniImpostazioniProvider::class,
controller: ListSezioniImpostazioniController::class,
output: ListSezioniImpostazioniResponse::class,
),
new GetCollection(
uriTemplate: '/impostazioni',
provider: ListImpostazioniProvider::class,
controller: ListImpostazioniController::class,
paginationEnabled: false,
parameters: [
'ricerca' => new QueryParameter(property: 'hydra:freetextQuery', required: false),
Expand All @@ -35,12 +35,11 @@
),
new Get(
uriTemplate: '/impostazione/{id}',
provider: GetImpostazioneProvider::class,
controller: GetImpostazioneController::class,
),
new Put(
uriTemplate: '/impostazione/{id}',
provider: GetImpostazioneProvider::class,
processor: UpdateImpostazioneProcessor::class,
controller: UpdateImpostazioneController::class,
input: UpdateImpostazioneRequest::class,
output: UpdateImpostazioneResponse::class,
),
Expand Down
56 changes: 56 additions & 0 deletions src/API/Controllers/BaseController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

namespace API\Controllers;

use ApiPlatform\Metadata\Operation;
use ApiPlatform\Metadata\Post;
use ApiPlatform\State\ProcessorInterface;
use DTO\DataTablesLoadRequest\Column;
use DTO\DataTablesLoadRequest\DataTablesLoadRequest;
use DTO\DataTablesLoadResponse\DataTablesLoadResponse;
use Models\Module;
use Util\Query;

use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

use Exception;

class InvalidInputException extends Exception {
public function __construct(\CuyZ\Valinor\Mapper\MappingError $error) {
$messages = $error->messages();

$formatted = [];
foreach ($messages as $message) {
$formatted[] = str_replace(". for", " for", $message->withBody('{original_message} for parameter "{node_path}"')->toString());
}

parent::__construct("Invalid input: ".implode("\n", $formatted));
}
}

abstract class BaseController extends Controller
{
/**
* @template T
* @param class-string<T> $class_reference
* @return T
*/
public function _cast(Request $request, string $class_reference): mixed
{
try {
return (new \CuyZ\Valinor\MapperBuilder())
->allowUndefinedValues()
->allowSuperfluousKeys()
->allowScalarValueCasting()
->mapper()
->map(
$class_reference,
[...$request->route()->parameters(), ...$request->all()]
);
} catch (\CuyZ\Valinor\Mapper\MappingError $error) {
throw new InvalidInputException($error);
}
}
}
Loading
Loading