naverClient = new NaverApiClient(); $this->VrfcReqModel = model(VrfcReqModel::class); helper('log'); // 헬퍼 로드 } /** * 매물 정보를 처리하고 DB에 저장하는 메인 함수 */ public function processArticle(array $payload) { $articleNumber = $payload['articleNumber']; $requestDatetime = date('Y-m-d H:i:s', strtotime($payload['requestDatetime'] ?? 'now')); // 1. 네이버 API 호출 $response = $this->naverClient->getArticleInfo($articleNumber); if (!$response || !isset($response['data']) || $response['code'] !== 'success') { $msg = $response['message'] ?? 'No message'; throw new \Exception("네이버 API 응답 에러: $articleNumber | 메시지: $msg"); } $articleInfo = $response['data']; // 로그 기록 write_custom_log("ARTICLE_INFO | ArticleNumber: $articleNumber", 'INFO', 'service'); // 2. 파라미터 매핑 (기존의 $vrfc_params 생성 로직) $vrfcParams = $this->mapVrfcParams($articleInfo, $requestDatetime); // 3. DB 저장 if (!$this->v2ArticleModel->insert($vrfcParams)) { $errorMessages = implode(', ', $this->v2ArticleModel->errors()); throw new \Exception("V2 매물 삽입 오류: " . $errorMessages); } return $this->v2ArticleModel->getInsertID(); } /** * API 데이터를 DB 컬럼에 맞게 변환 */ private function mapVrfcParams(array $articleInfo, string $requestDatetime): array { $files = $articleInfo['files'] ?? []; $certRegister = []; $confirm_doc_img_url = []; $referenceFileUrl = []; foreach ($files as $file) { $fileTypeCode = $file['fileTypeCode']; if ($fileTypeCode == 'RCDOC') { $certRegister[] = $file['fileUrl']; } elseif ($fileTypeCode == 'ADDOC') { $confirm_doc_img_url[] = $file['fileUrl']; } elseif ($fileTypeCode == 'REFER') { $referenceFileUrl[] = $file['fileUrl']; } } return [ 'atcl_no' => $articleInfo['articleNumber'], 'cpid' => $articleInfo['cpId'], 'cp_atcl_id' => $articleInfo['cpArticleNumber'], 'trade_type' => $articleInfo['tradeTypeCode'], 'realtor_nm' => $articleInfo['realtor']['realtorName'] ?? '', 'realtor_tel_no' => $articleInfo['realtor']['representativeCellphoneNumber'] ?? '', 'seller_tel_no' => $articleInfo['seller']['sellerTelephoneNumber'] ?? '', 'vrfc_type' => $articleInfo['verificationTypeCode'], 'rgbk_confirm' => ($articleInfo['isUnregisteredVerificationRequested'] ?? false) ? 'Y' : 'N', 'rdate' => $requestDatetime, 'stat_cd' => '10', 'insert_user' => 'admin', 'insert_tm' => date('Y-m-d H:i:s'), 'rgbk_confirm_owner_nm' => $articleInfo['seller']['ownerName'] ?? null, 'confirm_doc_img_url' => json_encode($confirm_doc_img_url, JSON_UNESCAPED_UNICODE), 'certRegister' => json_encode($certRegister, JSON_UNESCAPED_UNICODE), 'referenceFileUrl' => json_encode($referenceFileUrl, JSON_UNESCAPED_UNICODE), // 필요한 나머지 컬럼들 추가... ]; } }