<?php

declare(strict_types=1);

namespace {{ tree.getFullNameSpaceOfFile(file, entity, action) }};

use App\Base\AbstractController;
use App\Base\AbstractResponse;
{% for dependency in dependencyzz %}
use {{ dependency }};{% endfor %}
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;

class {{ helper.getClassName(file, entity, action) }} extends AbstractController
{
    public function __invoke({{ action + entity.name }}Request $Request, {{ action + entity.name }} $CreateOne): JsonResponse
    {
        /** @var \App\Models\User $User */
        $User = auth()->user();

        $this->acquireLock($User->Id);

        try {

            $Item = $CreateOne->make(
                $User->Id,
    {% for column in columnzz %}
                $Request->validated('{{ column.name }}'),{% endfor %}
            );

            DB::beginTransaction();
            $CreateOne->create($Item);
            DB::commit();

            return AbstractResponse::sendModelItem($Item);

        } catch (\Throwable $Throwable) {

            DB::rollBack();

            throw $Throwable;

        } finally {
            $this->releaseLock();
        }

    }
}
