diff --git a/app/Http/Controllers/Api/V1/ItemsController.php b/app/Http/Controllers/Api/V1/ItemsController.php index 5f75bb2..70c7895 100644 --- a/app/Http/Controllers/Api/V1/ItemsController.php +++ b/app/Http/Controllers/Api/V1/ItemsController.php @@ -42,8 +42,9 @@ public function index(Request $request) * * @param string|null type 품목 유형 (선택적 - 없으면 ID만으로 조회) */ - public function show(Request $request, int $id) + public function show(Request $request, $id) { + $id = (int) $id; return ApiResponse::handle(function () use ($request, $id) { // item_type 선택적 (없으면 ID만으로 items 테이블에서 조회) $itemType = $request->input('type') ?? $request->input('item_type'); @@ -87,7 +88,14 @@ public function showByCode(Request $request, string $code) public function store(ItemStoreRequest $request) { return ApiResponse::handle(function () use ($request) { - return $this->service->store($request->all()); + // Request는 product_type 검증, Service는 item_type 사용 + $data = $request->all(); + if (isset($data['product_type'])) { + $data['item_type'] = $data['product_type']; + unset($data['product_type']); + } + + return $this->service->store($data); }, __('message.item.created')); } @@ -99,7 +107,14 @@ public function store(ItemStoreRequest $request) public function update(int $id, ItemUpdateRequest $request) { return ApiResponse::handle(function () use ($id, $request) { - return $this->service->update($id, $request->all()); + // Request는 product_type 검증, Service는 item_type 사용 + $data = $request->all(); + if (isset($data['product_type'])) { + $data['item_type'] = $data['product_type']; + unset($data['product_type']); + } + + return $this->service->update($id, $data); }, __('message.item.updated')); } @@ -127,8 +142,9 @@ public function stats(Request $request) * * @param string type 품목 유형 (필수 - 동적 테이블 라우팅) */ - public function destroy(Request $request, int $id) + public function destroy(Request $request, $id) { + $id = (int) $id; return ApiResponse::handle(function () use ($request, $id) { // item_type 필수 (동적 테이블 라우팅에 사용) $itemType = strtoupper($request->input('type') ?? $request->input('item_type') ?? ''); diff --git a/app/Services/ItemService.php b/app/Services/ItemService.php index f55ddca..7a3bca2 100644 --- a/app/Services/ItemService.php +++ b/app/Services/ItemService.php @@ -403,9 +403,9 @@ public function index(array $params): LengthAwarePaginator $query->where('is_active', (bool) $active); } - $paginator = $query->orderBy('id')->paginate($size); + $paginator = $query->orderBy('id', 'desc')->paginate($size); - // 날짜 형식 변환, files 그룹화, options 펼침 + // 날짜 형식 변환, files 그룹화, options 펼침, code → item_code $paginator->setCollection( $paginator->getCollection()->transform(function ($item) { $arr = $item->toArray(); @@ -419,6 +419,12 @@ public function index(array $params): LengthAwarePaginator // options를 최상위 레벨로 펼침 (동적 필드) $arr = $this->flattenOptionsToResponse($arr); + // 'code' 키를 'item_code'로 변경 (ApiResponse::handle의 HTTP 상태 코드 충돌 방지) + if (isset($arr['code'])) { + $arr['item_code'] = $arr['code']; + unset($arr['code']); + } + return $arr; }) ); @@ -553,6 +559,12 @@ private function formatItemResponse(Model $item): array // options를 최상위 레벨로 펼침 (동적 필드) $arr = $this->flattenOptionsToResponse($arr); + // 'code' 키를 'item_code'로 변경 (ApiResponse::handle의 HTTP 상태 코드 충돌 방지) + if (isset($arr['code'])) { + $arr['item_code'] = $arr['code']; + unset($arr['code']); + } + return $arr; }