새로운 api
This commit is contained in:
139
app/Services/ParameterMapper/BaseParameterMapper.php
Normal file
139
app/Services/ParameterMapper/BaseParameterMapper.php
Normal file
@@ -0,0 +1,139 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user