- GuiderailModelController/Service/Resource: 가이드레일/케이스/하단마감재 통합 CRUD - item_category 필터 (GUIDERAIL_MODEL/SHUTTERBOX_MODEL/BOTTOMBAR_MODEL) - BendingItemResource: legacy_bending_num 노출 추가 - ApiKeyMiddleware: guiderail-models, files 화이트리스트 추가 - Swagger: BendingItemApi, GuiderailModelApi 문서 (케이스/하단마감재 필드 포함) - 마이그레이션 커맨드 5개: GuiderailImportLegacy, BendingProductImportLegacy, BendingImportImages, BendingModelImportImages, BendingModelImportAssemblyImages - 데이터: GR 20건 + SB 30건 + BB 10건 + 이미지 473건 R2 업로드
90 lines
2.6 KiB
PHP
90 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\V1;
|
|
|
|
use App\Helpers\ApiResponse;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Resources\Api\V1\GuiderailModelResource;
|
|
use App\Services\GuiderailModelService;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class GuiderailModelController extends Controller
|
|
{
|
|
public function __construct(private GuiderailModelService $service) {}
|
|
|
|
private function ensureContext(Request $request): void
|
|
{
|
|
if (! app()->bound('tenant_id') || ! app('tenant_id')) {
|
|
$tenantId = (int) ($request->header('X-TENANT-ID') ?: 287);
|
|
app()->instance('tenant_id', $tenantId);
|
|
}
|
|
if (! app()->bound('api_user') || ! app('api_user')) {
|
|
app()->instance('api_user', 1);
|
|
}
|
|
}
|
|
|
|
public function index(Request $request): JsonResponse
|
|
{
|
|
$this->ensureContext($request);
|
|
|
|
return ApiResponse::handle(function () use ($request) {
|
|
$params = $request->only(['item_category', 'item_sep', 'model_UA', 'check_type', 'model_name', 'search', 'page', 'size']);
|
|
$paginator = $this->service->list($params);
|
|
$paginator->getCollection()->transform(fn ($item) => (new GuiderailModelResource($item))->resolve());
|
|
|
|
return $paginator;
|
|
}, __('message.fetched'));
|
|
}
|
|
|
|
public function filters(Request $request): JsonResponse
|
|
{
|
|
$this->ensureContext($request);
|
|
|
|
return ApiResponse::handle(
|
|
fn () => $this->service->filters(),
|
|
__('message.fetched')
|
|
);
|
|
}
|
|
|
|
public function show(Request $request, int $id): JsonResponse
|
|
{
|
|
$this->ensureContext($request);
|
|
|
|
return ApiResponse::handle(
|
|
fn () => new GuiderailModelResource($this->service->find($id)),
|
|
__('message.fetched')
|
|
);
|
|
}
|
|
|
|
public function store(Request $request): JsonResponse
|
|
{
|
|
$this->ensureContext($request);
|
|
|
|
return ApiResponse::handle(
|
|
fn () => new GuiderailModelResource($this->service->create($request->all())),
|
|
__('message.created')
|
|
);
|
|
}
|
|
|
|
public function update(Request $request, int $id): JsonResponse
|
|
{
|
|
$this->ensureContext($request);
|
|
|
|
return ApiResponse::handle(
|
|
fn () => new GuiderailModelResource($this->service->update($id, $request->all())),
|
|
__('message.updated')
|
|
);
|
|
}
|
|
|
|
public function destroy(Request $request, int $id): JsonResponse
|
|
{
|
|
$this->ensureContext($request);
|
|
|
|
return ApiResponse::handle(
|
|
fn () => $this->service->delete($id),
|
|
__('message.deleted')
|
|
);
|
|
}
|
|
}
|