service = $service; } /** * 가격 이력 목록 조회 */ public function index(Request $request) { return ApiResponse::handle(function () use ($request) { $filters = $request->only([ 'item_type_code', 'item_id', 'price_type_code', 'client_group_id', 'date', ]); $perPage = (int) ($request->input('size') ?? 15); $data = $this->service->listPrices($filters, $perPage); return ['data' => $data, 'message' => __('message.fetched')]; }); } /** * 단일 항목 가격 조회 */ public function show(Request $request) { return ApiResponse::handle(function () use ($request) { $itemType = $request->input('item_type'); // PRODUCT | MATERIAL $itemId = (int) $request->input('item_id'); $clientId = $request->input('client_id') ? (int) $request->input('client_id') : null; $date = $request->input('date') ?? null; $result = $this->service->getItemPrice($itemType, $itemId, $clientId, $date); return ['data' => $result, 'message' => __('message.fetched')]; }); } /** * 여러 항목 일괄 가격 조회 */ public function bulk(Request $request) { return ApiResponse::handle(function () use ($request) { $items = $request->input('items'); // [['item_type' => 'PRODUCT', 'item_id' => 1], ...] $clientId = $request->input('client_id') ? (int) $request->input('client_id') : null; $date = $request->input('date') ?? null; $result = $this->service->getBulkItemPrices($items, $clientId, $date); return ['data' => $result, 'message' => __('message.fetched')]; }); } /** * 가격 등록/수정 */ public function upsert(Request $request) { return ApiResponse::handle(function () use ($request) { $data = $this->service->upsertPrice($request->all()); return ['data' => $data, 'message' => __('message.created')]; }); } /** * 가격 삭제 */ public function destroy(int $id) { return ApiResponse::handle(function () use ($id) { $this->service->deletePrice($id); return ['data' => null, 'message' => __('message.deleted')]; }); } }