Skip to content

Commit

Permalink
feat: Add new Base class for Inertia
Browse files Browse the repository at this point in the history
  • Loading branch information
ramaID committed Jun 22, 2024
1 parent a607091 commit 097f7c3
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 0 deletions.
81 changes: 81 additions & 0 deletions src/Bases/Inertia/BaseController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<?php

namespace RapidKit\LaravelRestify\Bases\Inertia;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Inertia\Response;
use Inertia\ResponseFactory;
use RapidKit\LaravelRestify\Bases\BaseModel;
use RapidKit\LaravelRestify\Bases\BaseService;
use Spatie\QueryBuilder\QueryBuilder;

class BaseController extends Controller

Check failure on line 13 in src/Bases/Inertia/BaseController.php

View workflow job for this annotation

GitHub Actions / phpstan

Class RapidKit\LaravelRestify\Bases\Inertia\BaseController extends unknown class App\Http\Controllers\Controller.
{
protected $perPage = 15;
protected $filterable = [];
protected $sortable = [];
protected $defaultSort = '-id';

public function __construct(
protected BaseModel $model,
protected BaseService $service,
protected string $indexRouteName = 'index',
) {
}

public function index(): ResponseFactory|Response

Check failure on line 27 in src/Bases/Inertia/BaseController.php

View workflow job for this annotation

GitHub Actions / phpstan

Method RapidKit\LaravelRestify\Bases\Inertia\BaseController::index() has invalid return type Inertia\Response.
{
return inertia($this->service->getIndexPage(), [
'items' => QueryBuilder::for($this->model->query())
->allowedFilters($this->model->filterable ?? [])
->allowedSorts($this->model->sortable ?? [])
->defaultSort($this->model->defaultSort ?? '-id')
->paginate(request()->get('limit', $this->perPage)),
]);
}

public function store(BaseStoreRequest $request)
{
$message = $this->service->storing($request->toDto());

return to_route($this->indexRouteName)->with('flashMessage', $message);
}

public function update(BaseUpdateRequest $request, int|string $id)
{
$page = $request->input('page', 1);
$sort = $request->input('sort', '-id');
$limit = $request->input('limit', 15);
$modelInstance = $this->model->query()->findOrFail($id);
$message = $this->service->updating($request->toDto(), $modelInstance);

return to_route($this->indexRouteName, compact('page', 'sort', 'limit'))->with('flashMessage', $message);
}

public function destroy(Request $request, string|int $id)
{
$modelInstance = $this->model->query()->findOrFail($id);
$message = $this->service->deleting($modelInstance);

return $this->getRedirector($request)->with('flashMessage', $message);
}

protected function getRedirector(Request $request)
{
$previousURL = $request->session()->get('_previous.url');
parse_str(parse_url($previousURL, PHP_URL_QUERY), $params);

$page = (int) ($params['page'] ?? $request->get('page') ?? '1');
$limit = (int) ($params['limit'] ?? '15');
$recordCount = $this->model->query()->count() - 1;
$maxPage = (int) ceil($recordCount / $limit);
$redirector = redirect()->back();

if ($maxPage < $page) {
$redirector = redirect()->route($this->indexRouteName, ['page' => $maxPage]);
}

return $redirector;
}
}
20 changes: 20 additions & 0 deletions src/Bases/Inertia/BaseStoreRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace RapidKit\LaravelRestify\Bases\Inertia;

use Illuminate\Foundation\Http\FormRequest;

abstract class BaseStoreRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
abstract public function rules(): array;

/**
* Convert the request to a DTO.
*/
abstract public function toDto();
}
13 changes: 13 additions & 0 deletions src/Bases/Inertia/BaseUpdateRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace RapidKit\LaravelRestify\Bases\Inertia;

abstract class BaseUpdateRequest extends BaseStoreRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
abstract public function rules(): array;
}

0 comments on commit 097f7c3

Please sign in to comment.