140 lines
4.0 KiB
PHP
140 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace App\Services\ParameterMapper;
|
|
|
|
/**
|
|
* 파라미터 매퍼 기본 추상 클래스
|
|
* 네이버 API 응답을 데이터베이스 파라미터로 변환하는 로직을 정의
|
|
*/
|
|
abstract class BaseParameterMapper
|
|
{
|
|
protected $db;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->db = \Config\Database::connect();
|
|
helper('log');
|
|
}
|
|
|
|
/**
|
|
* 추상 메서드: 매핑 로직 구현
|
|
*/
|
|
abstract public function map(string $articleNumber, array $rawData, array $payload): array;
|
|
|
|
/**
|
|
* 소유자 타입 코드 변환
|
|
*/
|
|
protected function mapOwnerTypeCode(?string $ownerTypeCodeRaw): ?int
|
|
{
|
|
return match($ownerTypeCodeRaw) {
|
|
"INDIV" => 0,
|
|
"CORP" => 1,
|
|
"FRGNR" => 2,
|
|
"DELEG" => 3,
|
|
default => null,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 거래 유형 변환
|
|
*/
|
|
protected function mapTradeType(?string $tradeType): ?string
|
|
{
|
|
return match(trim($tradeType ?? '')) {
|
|
'매매' => 'A1',
|
|
'전세' => 'B1',
|
|
'월세' => 'B2',
|
|
'단기임대' => 'B3',
|
|
default => null,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 파일 배열 추출 (save_yn 플래그 포함)
|
|
*/
|
|
public function extractFilesByType(array $files): array
|
|
{
|
|
$certRegister = [];
|
|
$confirmDocImgUrl = [];
|
|
$referenceFileUrl = [];
|
|
|
|
foreach ($files as $file) {
|
|
$fileTypeCode = $file['fileTypeCode'] ?? '';
|
|
$fileUrl = $file['originalFileUrl'] ?? '';
|
|
|
|
switch ($fileTypeCode) {
|
|
case 'RCDOC':
|
|
$certRegister[] = $fileUrl;
|
|
break;
|
|
case 'ADDOC':
|
|
$confirmDocImgUrl[] = $fileUrl;
|
|
break;
|
|
case 'REFER':
|
|
$referenceFileUrl[] = $fileUrl;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return [
|
|
'certRegister' => $certRegister,
|
|
'confirmDocImgUrl' => $confirmDocImgUrl,
|
|
'referenceFileUrl' => $referenceFileUrl,
|
|
'cert_register_save_yn' => !empty($certRegister) ? 'Y' : 'N',
|
|
'confirm_doc_img_url_save_yn' => !empty($confirmDocImgUrl) ? 'Y' : 'N',
|
|
'reference_file_url_save_yn' => !empty($referenceFileUrl) ? 'Y' : 'N',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* 파일 URL을 v2_url_img_save 테이블에 저장
|
|
* @param array $files 파일 배열
|
|
* @param string $atclNo 매물번호
|
|
* @param int $vrSq 검증요청순번
|
|
*/
|
|
protected function saveUrlImagesToDb(array $files, string $atclNo, int $vrSq): bool
|
|
{
|
|
if (empty($files)) {
|
|
return true;
|
|
}
|
|
|
|
$urlImgModel = new \App\Models\Entities\V2urlimgsaveModel();
|
|
|
|
foreach ($files as $file) {
|
|
$fileTypeCode = $file['fileTypeCode'] ?? '';
|
|
$fileUrl = $file['originalFileUrl'] ?? '';
|
|
|
|
if (empty($fileUrl)) {
|
|
continue;
|
|
}
|
|
|
|
// type 매핑: RCDOC, ADDOC = 2(등기), REFER = 1(홍보)
|
|
$type = in_array($fileTypeCode, ['RCDOC', 'ADDOC']) ? '2' : '1';
|
|
|
|
$data = [
|
|
'url' => $fileUrl,
|
|
'type' => $type,
|
|
'atcl_no' => $atclNo,
|
|
'vr_sq' => $vrSq,
|
|
'status' => 'save',
|
|
'try_cnt' => 0,
|
|
'server_nm' => gethostname(),
|
|
];
|
|
|
|
if (!$urlImgModel->insert($data)) {
|
|
write_custom_log("URL 이미지 저장 실패: " . json_encode($data), 'ERROR', 'service');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* 필수 필드 안전하게 로드
|
|
*/
|
|
protected function getSafeData(array $data, string $key, $default = null)
|
|
{
|
|
return $data[$key] ?? $default;
|
|
}
|
|
}
|