Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
1 / 1
ParameterController
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
6 / 6
6
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 index
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 show
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 store
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 update
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 destroy
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Http\Controllers\v2\Admin;
4
5use App\Http\Controllers\Controller;
6use App\Http\Models\Parameter;
7use App\Http\Requests\v2\Parameter\DestroyParameterRequest;
8use App\Http\Requests\v2\Parameter\IndexParameterRequest;
9use App\Http\Requests\v2\Parameter\ShowParameterRequest;
10use App\Http\Requests\v2\Parameter\StoreParameterRequest;
11use App\Http\Requests\v2\Parameter\UpdateParameterRequest;
12use App\Http\Resources\v2\ParameterResource;
13use App\Http\Services\ParameterService;
14use Illuminate\Http\JsonResponse;
15use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
16
17/**
18 * Controller for managing system parameters.
19 *
20 * Only accessible by users with the VENGRESO_ADMIN role.
21 * Provides CRUD operations for the parameters collection.
22 */
23class ParameterController extends Controller
24{
25    public function __construct(
26        private ParameterService $parameterService
27    ) {}
28
29    /**
30     * Get all parameters with optional filtering and pagination.
31     *
32     * @param  IndexParameterRequest  $request  Validated request with filter, per_page, page
33     *
34     * @response 200 {
35     *   "result": {
36     *     "data": [
37     *       {"id": "...", "name": "setting_key", "value": "setting_value", "value_type": "string", "created_at": 1642521600, "updated_at": 1642521600}
38     *     ],
39     *     "meta": {
40     *       "current_page": 1,
41     *       "per_page": 15,
42     *       "total": 100,
43     *       "last_page": 7
44     *     }
45     *   }
46     * }
47     */
48    public function index(IndexParameterRequest $request): AnonymousResourceCollection
49    {
50        $parameters = $this->parameterService->getAll(
51            filter: $request->input('filter'),
52            perPage: $request->input('per_page', 15)
53        );
54
55        return ParameterResource::collection($parameters);
56    }
57
58    /**
59     * Get a single parameter by ID.
60     *
61     * @param  ShowParameterRequest  $request  Validated request (authorization only)
62     * @param  Parameter  $parameter  The parameter to retrieve (route model binding)
63     *
64     * @response 200 {
65     *   "result": {
66     *     "id": "507f1f77bcf86cd799439011",
67     *     "name": "setting_key",
68     *     "value": "setting_value",
69     *     "value_type": "string",
70     *     "created_at": 1642521600,
71     *     "updated_at": 1642521600
72     *   }
73     * }
74     */
75    public function show(ShowParameterRequest $request, Parameter $parameter): ParameterResource
76    {
77        return new ParameterResource($parameter);
78    }
79
80    /**
81     * Create a new parameter.
82     *
83     * @param  StoreParameterRequest  $request  Validated request with name and value
84     *
85     * @response 201 {
86     *   "result": {
87     *     "data": {
88     *       "id": "507f1f77bcf86cd799439011",
89     *       "name": "new_setting",
90     *       "value": {"nested": "object"},
91     *       "value_type": "object",
92     *       "created_at": 1642521600,
93     *       "updated_at": 1642521600
94     *     }
95     *   }
96     * }
97     */
98    public function store(StoreParameterRequest $request): JsonResponse
99    {
100        $parameter = $this->parameterService->create($request->validated());
101
102        return (new ParameterResource($parameter))
103            ->response()
104            ->setStatusCode(201);
105    }
106
107    /**
108     * Update an existing parameter.
109     *
110     * @param  UpdateParameterRequest  $request  Validated request with optional name and value
111     * @param  Parameter  $parameter  The parameter to update (route model binding)
112     *
113     * @response 200 {
114     *   "result": {
115     *     "id": "507f1f77bcf86cd799439011",
116     *     "name": "updated_setting",
117     *     "value": 42,
118     *     "value_type": "number",
119     *     "created_at": 1642521600,
120     *     "updated_at": 1642525200
121     *   }
122     * }
123     */
124    public function update(UpdateParameterRequest $request, Parameter $parameter): ParameterResource
125    {
126        $parameter = $this->parameterService->update($parameter, $request->validated());
127
128        return new ParameterResource($parameter);
129    }
130
131    /**
132     * Delete a parameter.
133     *
134     * @param  DestroyParameterRequest  $request  Validated request (authorization only)
135     * @param  Parameter  $parameter  The parameter to delete (route model binding)
136     *
137     * @response 204 No content
138     */
139    public function destroy(DestroyParameterRequest $request, Parameter $parameter): JsonResponse
140    {
141        $this->parameterService->delete($parameter);
142
143        return response()->json(null, 204);
144    }
145}