only([ 'search', 'start_date', 'end_date', 'client_id', 'status', 'sort_by', 'sort_dir', 'per_page', 'page', ]); $purchases = $this->service->index($params); return ApiResponse::handle(__('message.fetched'), $purchases); } /** * 매입 등록 */ public function store(StorePurchaseRequest $request) { $purchase = $this->service->store($request->validated()); return ApiResponse::handle(__('message.created'), $purchase, 201); } /** * 매입 상세 */ public function show(int $id) { $purchase = $this->service->show($id); return ApiResponse::handle(__('message.fetched'), $purchase); } /** * 매입 수정 */ public function update(int $id, UpdatePurchaseRequest $request) { $purchase = $this->service->update($id, $request->validated()); return ApiResponse::handle(__('message.updated'), $purchase); } /** * 매입 삭제 */ public function destroy(int $id) { $this->service->destroy($id); return ApiResponse::handle(__('message.deleted')); } /** * 매입 확정 */ public function confirm(int $id) { $purchase = $this->service->confirm($id); return ApiResponse::handle(__('message.purchase.confirmed'), $purchase); } /** * 매입 요약 (기간별 합계) */ public function summary(Request $request) { $params = $request->only([ 'start_date', 'end_date', 'client_id', 'status', ]); $summary = $this->service->summary($params); return ApiResponse::handle(__('message.fetched'), $summary); } }