first commit

This commit is contained in:
2026-02-18 19:54:52 +07:00
commit 8e070562cb
101 changed files with 13462 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
interface FilterFactoryInterface
{
public function make(string $name, array $values): FilterInterface;
}

View File

@@ -0,0 +1,13 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
use Closure;
use Illuminate\Contracts\Database\Eloquent\Builder;
interface FilterInterface
{
public function __invoke(Builder $builder, Closure $next): Builder;
}

View File

@@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Throwable;
interface QueryFilterPipelineInterface
{
/**
* @throws Throwable
*/
public function applyFilters(Builder $builder, RequestFilterInterface $filterRequest): LengthAwarePaginator;
}

View File

@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
interface RequestFilterInterface
{
/**
* Возвращает список фильтруемых полей
* @return array<string>
*/
public function filters(): array;
/**
* Возвращает значения фильтров
* @return array<string, mixed>
*/
public function values(): array;
/**
* Пагинация
* @return int|null если null, без пагинации
*/
public function perPage(): ?int;
}

View File

@@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
use App\Models\Task;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Throwable;
interface TaskServiceInterface
{
/**
* @throws Throwable
*/
public function list(RequestFilterInterface $filters): LengthAwarePaginator;
/**
* @throws Throwable
*/
public function create(array $data): Task;
public function show(Task $task): Task;
/**
* @throws Throwable
*/
public function update(Task $task, array $data): Task;
public function delete(Task $task): void;
}