only([ 'search', 'item_type', 'item_category', 'status', 'location', 'sort_by', 'sort_dir', 'per_page', 'page', 'start_date', 'end_date', ]); $stocks = $this->service->index($params); return ApiResponse::success($stocks, __('message.fetched')); } /** * 재고 통계 조회 */ public function stats(): JsonResponse { $stats = $this->service->stats(); return ApiResponse::success($stats, __('message.fetched')); } /** * 재고 상세 조회 (LOT 포함) */ public function show(int $id): JsonResponse { try { $stock = $this->service->show($id); return ApiResponse::success($stock, __('message.fetched')); } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) { return ApiResponse::error(__('error.stock.not_found'), 404); } } /** * 품목유형별 통계 조회 */ public function statsByItemType(): JsonResponse { $stats = $this->service->statsByItemType(); return ApiResponse::success($stats, __('message.fetched')); } /** * 재고 수정 (안전재고, 최대재고, 사용상태) */ public function update(int $id, Request $request): JsonResponse { try { $data = $request->validate([ 'safety_stock' => 'nullable|numeric|min:0', 'max_stock' => 'nullable|numeric|min:0', 'is_active' => 'nullable|boolean', ]); // 최대재고가 설정된 경우 안전재고 이상이어야 함 if (isset($data['max_stock']) && $data['max_stock'] > 0 && isset($data['safety_stock']) && $data['safety_stock'] > $data['max_stock']) { return ApiResponse::error('최대재고는 안전재고 이상이어야 합니다.', 422); } $stock = $this->service->updateStock($id, $data); return ApiResponse::success($stock, __('message.updated')); } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) { return ApiResponse::error(__('error.stock.not_found'), 404); } } /** * 재고 조정 이력 조회 */ public function adjustments(int $id): JsonResponse { try { $adjustments = $this->service->adjustments($id); return ApiResponse::success($adjustments, __('message.fetched')); } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) { return ApiResponse::error(__('error.stock.not_found'), 404); } } /** * 재고 조정 등록 */ public function storeAdjustment(int $id, StoreStockAdjustmentRequest $request): JsonResponse { try { $result = $this->service->createAdjustment($id, $request->validated()); return ApiResponse::success($result, __('message.created')); } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) { return ApiResponse::error(__('error.stock.not_found'), 404); } } }