<?php

namespace {{apiControllerNamespace}};

use {{modelNamespace}}\{{modelName}};
use Illuminate\Http\Request;
use {{requestNamespace}}\{{modelName}}Request;
use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use {{controllerNamespace}}\Controller;
use {{resourceNamespace}}\{{modelName}}Resource;

class {{modelName}}Controller extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(Request $request)
    {
        ${{modelNamePluralLowerCase}} = {{modelName}}::paginate();

        return {{modelName}}Resource::collection(${{modelNamePluralLowerCase}});
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store({{modelName}}Request $request): JsonResponse
    {
        ${{modelNameLowerCase}} = {{modelName}}::create($request->validated());

        return response()->json(new {{modelName}}Resource(${{modelNameLowerCase}}));
    }

    /**
     * Display the specified resource.
     */
    public function show({{modelName}} ${{modelNameLowerCase}}): JsonResponse
    {
        return response()->json(new {{modelName}}Resource(${{modelNameLowerCase}}));
    }

    /**
     * Update the specified resource in storage.
     */
    public function update({{modelName}}Request $request, {{modelName}} ${{modelNameLowerCase}}): JsonResponse
    {
        ${{modelNameLowerCase}}->update($request->validated());

        return response()->json(new {{modelName}}Resource(${{modelNameLowerCase}}));
    }

    /**
     * Delete the specified resource.
     */
    public function destroy({{modelName}} ${{modelNameLowerCase}}): Response
    {
        ${{modelNameLowerCase}}->delete();

        return response()->noContent();
    }
}
