<?php

namespace {{ namespace }};

use {{ namespacedModel }};
use {{ rootNamespace }}Http\Controllers\Controller;
use {{ namespacedRequests }};
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\DB;
use App\Http\Resources\{{ model }}Resource;
use App\Support\ApiResponse;
class {{ class }} extends Controller
{
    public function index()
    {
        Gate::authorize('viewAny', {{ model }}::class);
        return {{ model }}Resource::collection({{ model }}::all());
    }

    public function store({{ storeRequest }} $request)
    {
        Gate::authorize('create', {{ model }}::class);
        try {
            DB::beginTransaction();
            DB::commit();
        } catch (\Exception $exception) {
            return ApiResponse::response(message: $exception->getMessage(), status: 419);
        }
        return new {{ model }}Resource(${{ modelVariable }});
    }

    public function show({{ model }} ${{ modelVariable }})
    {
        Gate::authorize('view', ${{ modelVariable }});
        return new {{ model }}Resource(${{ modelVariable }});
    }

    public function update({{ updateRequest }} $request, {{ model }} ${{ modelVariable }})
    {
        Gate::authorize('update', ${{ modelVariable }});
        try {
            DB::beginTransaction();
            DB::commit();
        } catch (\Exception $exception) {
            return ApiResponse::response(message: $exception->getMessage(), status: 419);
        }
        return new {{ model }}Resource(${{ modelVariable }});
    }

    public function destroy({{ model }} ${{ modelVariable }})
    {
        Gate::authorize('delete', ${{ modelVariable }});
        try {
            DB::beginTransaction();
            DB::commit();
        } catch (\Exception $exception) {
            return ApiResponse::response(message: $exception->getMessage(), status: 419);
        }
        return ApiResponse::success(message: 'با موفقیت حذف شد');
    }
}
