diff --git a/.idea/osm_rewrite.iml b/.idea/osm_rewrite.iml index 7d22bbad4..fed8ab103 100644 --- a/.idea/osm_rewrite.iml +++ b/.idea/osm_rewrite.iml @@ -86,6 +86,7 @@ + diff --git a/.idea/php.xml b/.idea/php.xml index edeb4dabe..201f1f385 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -112,6 +112,7 @@ + diff --git a/app/Http/Controllers/Api/ApiController.php b/app/Http/Controllers/Api/ApiController.php new file mode 100644 index 000000000..aaf32b3f5 --- /dev/null +++ b/app/Http/Controllers/Api/ApiController.php @@ -0,0 +1,85 @@ +respondWithSuccess(new $this->resource($this->model::all())); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request): JsonResponse + { + $instance = new $this->model(); + $instance->fill($request->all()); + + $created = $instance->save(); + + return $created ? $this->respondCreated(new $this->resource($instance)) : $this->respondError(); + } + + /** + * Display the specified resource. + */ + public function show(int $id): JsonResponse + { + $instance = $this->model::find($id); + + if (!assert($instance instanceof Model)) { + return $this->respondNotFound(__('Risorsa non trovata.')); + } + + return $this->respondWithSuccess(new $this->resource($this->model::find($id))); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, int $id): JsonResponse + { + $instance = $this->model::find($id); + if (!assert($instance instanceof Model)) { + return $this->respondNotFound(__('Risorsa non trovata.')); + } + + $instance->fill($request->all()); + $updated = $instance->save(); + + return $updated ? $this->respondWithSuccess($instance) : $this->respondError(); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(int $id): JsonResponse + { + $instance = $this->model::find($id); + + if (!assert($instance instanceof Model)) { + return $this->respondNotFound(__('Risorsa non trovata.')); + } + + $deleted = $instance->delete(); + + return $deleted ? $this->respondNoContent() : $this->respondError(); + } +} diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php index 4544af9f2..a282c085b 100644 --- a/app/Http/Controllers/Api/UserController.php +++ b/app/Http/Controllers/Api/UserController.php @@ -2,60 +2,10 @@ namespace App\Http\Controllers\Api; -use App\Http\Controllers\Controller; -use App\Http\Resources\UserResource; use App\Models\User; -use Illuminate\Http\Request; -use Illuminate\Http\Resources\Json\JsonResource; +use Illuminate\Database\Eloquent\Model; -class UserController extends Controller +class UserController extends ApiController { - /** - * Display a listing of the resource. - * - * @return \Illuminate\Http\Response - */ - public function index() - { - return new UserResource(User::all()); - } - - /** - * Store a newly created resource in storage. - * - * @return \Illuminate\Http\Response - */ - public function store(Request $request) - { - } - - /** - * Display the specified resource. - */ - public function show(int $id): JsonResource - { - return new UserResource(User::find($id)); - } - - /** - * Update the specified resource in storage. - * - * @param int $id - * - * @return \Illuminate\Http\Response - */ - public function update(Request $request, $id) - { - } - - /** - * Remove the specified resource from storage. - * - * @param int $id - * - * @return \Illuminate\Http\Response - */ - public function destroy($id) - { - } + protected string|Model $model = User::class; } diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/ApiResource.php similarity index 91% rename from app/Http/Resources/UserResource.php rename to app/Http/Resources/ApiResource.php index a24b00412..6f9df9670 100644 --- a/app/Http/Resources/UserResource.php +++ b/app/Http/Resources/ApiResource.php @@ -7,7 +7,7 @@ use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; use JsonSerializable; -class UserResource extends JsonResource +class ApiResource extends JsonResource { /** * Transform the resource into an array. diff --git a/composer.json b/composer.json index 34c2fe059..717b711e4 100644 --- a/composer.json +++ b/composer.json @@ -31,6 +31,7 @@ "require": { "php": "^8", "ext-pdo": "*", + "f9webltd/laravel-api-response-helpers": "^1.4", "fideloper/proxy": "^4", "fruitcake/laravel-cors": "^2", "guzzlehttp/guzzle": "^7", diff --git a/routes/api.php b/routes/api.php index 4a4f3282c..01529f18e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -3,7 +3,6 @@ /** @noinspection UnusedFunctionResultInspection */ use App\Http\Controllers\Api\UserController; -use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; /*