service->index($request->all()); }, __('message.contract.fetched')); } /** * 계약 상세 조회 */ public function show(int $id) { return ApiResponse::handle(function () use ($id) { return $this->service->show($id); }, __('message.contract.fetched')); } /** * 계약 등록 */ public function store(ContractStoreRequest $request) { return ApiResponse::handle(function () use ($request) { return $this->service->store($request->validated()); }, __('message.contract.created')); } /** * 계약 수정 */ public function update(ContractUpdateRequest $request, int $id) { return ApiResponse::handle(function () use ($request, $id) { return $this->service->update($id, $request->validated()); }, __('message.contract.updated')); } /** * 계약 삭제 */ public function destroy(int $id) { return ApiResponse::handle(function () use ($id) { $this->service->destroy($id); return 'success'; }, __('message.contract.deleted')); } /** * 계약 일괄 삭제 */ public function bulkDestroy(Request $request) { return ApiResponse::handle(function () use ($request) { $this->service->bulkDestroy($request->input('ids', [])); return 'success'; }, __('message.contract.deleted')); } /** * 계약 통계 조회 */ public function stats(Request $request) { return ApiResponse::handle(function () use ($request) { return $this->service->stats($request->all()); }, __('message.contract.fetched')); } /** * 계약 단계별 카운트 조회 */ public function stageCounts(Request $request) { return ApiResponse::handle(function () use ($request) { return $this->service->stageCounts($request->all()); }, __('message.contract.fetched')); } }