forked from admin/services_core
89 lines
3.0 KiB
PHP
89 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Nas;
|
|
|
|
use App\Http\Controllers\ApiController;
|
|
use App\Http\Requests\Nas\IndexNasResourceRequest;
|
|
use App\Http\Requests\Nas\StoreNasResourceRequest;
|
|
use App\Http\Requests\Nas\UpdateNasResourceRequest;
|
|
use App\Http\Resources\Nas\NasResource;
|
|
use App\Services\Nas\NasResourceService;
|
|
use App\Services\Nas\MikrotikHealthService;
|
|
use Illuminate\Http\Request;
|
|
|
|
class NasResourceController extends ApiController
|
|
{
|
|
public function __construct(
|
|
protected NasResourceService $service,
|
|
protected MikrotikHealthService $mikrotikHealth,
|
|
) {}
|
|
|
|
public function index(IndexNasResourceRequest $request)
|
|
{
|
|
$data = $this->service->list($this->resource($request), $request->validated(), $request->user(), $this->tenantId($request));
|
|
|
|
return $this->successPaginated($data, NasResource::class, 'Data NAS berhasil diambil');
|
|
}
|
|
|
|
public function store(StoreNasResourceRequest $request)
|
|
{
|
|
$data = $this->service->create($this->resource($request), $request->validated(), $request->user(), $this->tenantId($request));
|
|
|
|
return $this->created(new NasResource($data), 'Data NAS berhasil dibuat');
|
|
}
|
|
|
|
public function show(Request $request, int $id)
|
|
{
|
|
$data = $this->service->find($this->resource($request), $id);
|
|
$this->authorizeTenant($request, $data->tenant_id);
|
|
|
|
return $this->success(new NasResource($data), 'Detail NAS berhasil diambil');
|
|
}
|
|
|
|
public function update(UpdateNasResourceRequest $request, int $id)
|
|
{
|
|
$resource = $this->resource($request);
|
|
$model = $this->service->find($resource, $id);
|
|
$this->authorizeTenant($request, $model->tenant_id);
|
|
$data = $this->service->update($resource, $model, $request->validated(), $request->user());
|
|
|
|
return $this->updated(new NasResource($data), 'Data NAS berhasil diupdate');
|
|
}
|
|
|
|
public function destroy(Request $request, int $id)
|
|
{
|
|
$model = $this->service->find($this->resource($request), $id);
|
|
$this->authorizeTenant($request, $model->tenant_id);
|
|
$this->service->delete($model);
|
|
|
|
return $this->deleted('Data NAS berhasil dihapus');
|
|
}
|
|
|
|
public function testConnection(Request $request, int $id)
|
|
{
|
|
abort_unless($this->resource($request) === 'mikrotik', 404);
|
|
$mikrotik = $this->service->find('mikrotik', $id);
|
|
$this->authorizeTenant($request, $mikrotik->tenant_id);
|
|
|
|
return $this->success(
|
|
$this->mikrotikHealth->check($mikrotik),
|
|
'Koneksi RouterOS API berhasil'
|
|
);
|
|
}
|
|
|
|
private function resource(Request $request): string
|
|
{
|
|
return $request->route()->defaults['nas_resource'];
|
|
}
|
|
|
|
private function tenantId(Request $request): ?int
|
|
{
|
|
return $request->attributes->get('tenant_id');
|
|
}
|
|
|
|
private function authorizeTenant(Request $request, int $tenantId): void
|
|
{
|
|
abort_unless($request->user()->isMasterAdmin() || $tenantId === $this->tenantId($request), 403);
|
|
}
|
|
}
|