Skip to content

Commit

Permalink
feat: add benefit api
Browse files Browse the repository at this point in the history
  • Loading branch information
ast21 committed Jul 19, 2024
1 parent d28b243 commit 56a7f4c
Show file tree
Hide file tree
Showing 7 changed files with 107 additions and 8 deletions.
7 changes: 7 additions & 0 deletions src/BenefitsServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use AdminKit\Benefits\Commands\InstallCommand;
use AdminKit\Benefits\Providers\RouteServiceProvider;
use AdminKit\Benefits\UI\API\Repositories\BenefitRepositoryInterface;
use AdminKit\Benefits\UI\API\Repositories\CachedBenefitRepository;
use Spatie\LaravelPackageTools\Package;
use Spatie\LaravelPackageTools\PackageServiceProvider;

Expand All @@ -29,4 +31,9 @@ public function registeringPackage()
{
$this->app->register(RouteServiceProvider::class);
}

public function bootingPackage()
{
$this->app->bind(BenefitRepositoryInterface::class, CachedBenefitRepository::class);
}
}
21 changes: 14 additions & 7 deletions src/UI/API/Controllers/BenefitController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,24 @@

namespace AdminKit\Benefits\UI\API\Controllers;

use AdminKit\Benefits\Models\Benefit;
use AdminKit\Benefits\UI\API\Data\BenefitData;
use AdminKit\Benefits\UI\API\Repositories\BenefitRepository;
use Spatie\LaravelData\DataCollection;

/**
* @tags Преимущества
*/
class BenefitController extends Controller
{
public function index()
{
return Benefit::all();
}
public function __construct(
private readonly BenefitRepository $repository,
) {}

public function show(int $id)
/**
* Получить список преимуществ
*/
public function index()
{
return Benefit::findOrFail($id);
return BenefitData::collect($this->repository->getApiList(), DataCollection::class);
}
}
15 changes: 15 additions & 0 deletions src/UI/API/Data/BenefitData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace AdminKit\Benefits\UI\API\Data;

use Spatie\LaravelData\Data;

class BenefitData extends Data
{
public function __construct(
public int $id,
public string $title,
public ?string $description,
public string $icon,
) {}
}
38 changes: 38 additions & 0 deletions src/UI/API/Repositories/BenefitRepository.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

namespace AdminKit\Benefits\UI\API\Repositories;

use AdminKit\Benefits\Models\Benefit;
use AdminKit\Core\Abstracts\Repositories\AbstractRepository;

/**
* @method Benefit model()
*/
class BenefitRepository extends AbstractRepository implements BenefitRepositoryInterface
{
public function getModelClass(): string
{
return Benefit::class;
}

public function getApiList(): array
{
$locale = app()->getLocale();

return $this->model()
->selectRaw("id, title->'$locale' as title, description->'$locale' as description")
->with(['media' => function ($query) {
$query
->select([
'id', 'model_id', 'model_type', 'collection_name', 'file_name', 'disk',
])
->where('collection_name', 'icon');
}])
->orderBy('sort')
->get()
->append('icon')
->toArray();
}
}
10 changes: 10 additions & 0 deletions src/UI/API/Repositories/BenefitRepositoryInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

declare(strict_types=1);

namespace AdminKit\Benefits\UI\API\Repositories;

interface BenefitRepositoryInterface
{
public function getApiList(): array;
}
23 changes: 23 additions & 0 deletions src/UI/API/Repositories/CachedBenefitRepository.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

declare(strict_types=1);

namespace AdminKit\Benefits\UI\API\Repositories;

use Illuminate\Support\Facades\Cache;

class CachedBenefitRepository implements BenefitRepositoryInterface
{
public function __construct(
private readonly BenefitRepository $repository
) {}

public function getApiList(): array
{
$locale = app()->getLocale();

return Cache::remember("ak_benefit_$locale", config('admin-kit.cache.ttl'), function () use ($locale) {

Check failure on line 19 in src/UI/API/Repositories/CachedBenefitRepository.php

View workflow job for this annotation

GitHub Actions / phpstan

Anonymous function has an unused use $locale.
return $this->repository->getApiList();
});
}
}
1 change: 0 additions & 1 deletion src/UI/API/Routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,3 @@
use Illuminate\Support\Facades\Route;

Route::get('/benefits', [BenefitController::class, 'index']);
Route::get('/benefits/{id}', [BenefitController::class, 'show']);

0 comments on commit 56a7f4c

Please sign in to comment.