- BendingItemController: CRUD + filters 엔드포인트 (pagination 메타 보존) - BendingItemService: items 테이블 item_category=BENDING 필터 기반 - BendingItemResource: options → 최상위 필드 노출 + 계산값(width_sum, bend_count) - FormRequest: Index/Store/Update 유효성 검증 (unique:items,code 포함) - BendingFillOptions: BD-* prefix/분류 속성 자동 보강 커맨드 - BendingImportLegacy: chandj 레거시 전개도(bendingData) 임포트 커맨드 (125/170건 매칭) - ensureContext: Bearer 토큰 없이 X-TENANT-ID 헤더로 컨텍스트 설정
96 lines
2.9 KiB
PHP
96 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\V1;
|
|
|
|
use App\Helpers\ApiResponse;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\Api\V1\BendingItemIndexRequest;
|
|
use App\Http\Requests\Api\V1\BendingItemStoreRequest;
|
|
use App\Http\Requests\Api\V1\BendingItemUpdateRequest;
|
|
use App\Http\Resources\Api\V1\BendingItemResource;
|
|
use App\Services\BendingItemService;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class BendingItemController extends Controller
|
|
{
|
|
public function __construct(private BendingItemService $service) {}
|
|
|
|
/**
|
|
* Bearer 토큰 없이 X-TENANT-ID 헤더로 컨텍스트 설정
|
|
*/
|
|
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')) {
|
|
// mng에서 Bearer 토큰 없이 호출 시 시스템 사용자(1)로 설정
|
|
app()->instance('api_user', 1);
|
|
}
|
|
}
|
|
|
|
public function index(BendingItemIndexRequest $request): JsonResponse
|
|
{
|
|
$this->ensureContext($request);
|
|
|
|
return ApiResponse::handle(function () use ($request) {
|
|
$paginator = $this->service->list($request->validated());
|
|
$paginator->getCollection()->transform(fn ($item) => (new BendingItemResource($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 BendingItemResource($this->service->find($id)),
|
|
__('message.fetched')
|
|
);
|
|
}
|
|
|
|
public function store(BendingItemStoreRequest $request): JsonResponse
|
|
{
|
|
$this->ensureContext($request);
|
|
|
|
return ApiResponse::handle(
|
|
fn () => new BendingItemResource($this->service->create($request->validated())),
|
|
__('message.created')
|
|
);
|
|
}
|
|
|
|
public function update(BendingItemUpdateRequest $request, int $id): JsonResponse
|
|
{
|
|
$this->ensureContext($request);
|
|
|
|
return ApiResponse::handle(
|
|
fn () => new BendingItemResource($this->service->update($id, $request->validated())),
|
|
__('message.updated')
|
|
);
|
|
}
|
|
|
|
public function destroy(Request $request, int $id): JsonResponse
|
|
{
|
|
$this->ensureContext($request);
|
|
|
|
return ApiResponse::handle(
|
|
fn () => $this->service->delete($id),
|
|
__('message.deleted')
|
|
);
|
|
}
|
|
}
|