네이버 매물 정보받기
This commit is contained in:
@@ -2,28 +2,81 @@
|
||||
|
||||
namespace App\Controllers;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\Response;
|
||||
|
||||
class KisoController extends BaseController
|
||||
{
|
||||
/** @var RequestInterface */
|
||||
protected $request;
|
||||
|
||||
/** @var ResponseInterface */
|
||||
protected $response;
|
||||
|
||||
public function vrfcReq()
|
||||
{
|
||||
$data = $this->request->getJSON(true);
|
||||
|
||||
$articleNum = $data['articleNumbr'] ?? null;
|
||||
$requestType = $data['reqeustType'] ?? null;
|
||||
|
||||
if (!$articleNum || !$requestType) {
|
||||
return $this->response->setStatusCode(ResponseInterface::HTTP_BAD_REQUEST)
|
||||
->setJSON(['error' => 'Invalid request']);
|
||||
// 1. 요청 방식에 따라 데이터 파싱
|
||||
if ($this->request->getMethod() === 'post') {
|
||||
// POST 방식: JSON Body에서 데이터 가져오기
|
||||
$data = $this->request->getJSON(true);
|
||||
} elseif ($this->request->getMethod() === 'get') {
|
||||
// GET 방식: Query Parameter에서 데이터 가져오기
|
||||
$data = $this->request->getGet();
|
||||
} else {
|
||||
// 지원하지 않는 메소드 처리 (예: PUT, DELETE 등)
|
||||
return $this->response->setStatusCode(Response::HTTP_METHOD_NOT_ALLOWED)
|
||||
->setJSON(['resultCode' => 'E005', 'resultMessage' => 'Method not allowed. Use GET or POST.']);
|
||||
}
|
||||
|
||||
// Redis 연결
|
||||
$redis = new \Redis();
|
||||
$redis->connect('redis', 6379);
|
||||
// 2. 필수 항목 검증
|
||||
$requiredKeys = ['articleNumbr', 'reqeustType', 'requestDatetime'];
|
||||
|
||||
// 큐에 push
|
||||
$redis->lPush('naver:queue', json_encode($data));
|
||||
foreach ($requiredKeys as $key) {
|
||||
// 파싱된 데이터($data) 내에 키가 없거나 값이 비어있는지 확인
|
||||
if (empty($data[$key])) {
|
||||
return $this->response->setStatusCode(Response::HTTP_BAD_REQUEST)
|
||||
->setJSON([
|
||||
'resultCode' => 'E001',
|
||||
'resultMessage' => "Missing required parameter: {$key}"
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Redis 연결 및 예외 처리
|
||||
try {
|
||||
// CI4 Cache Service 인스턴스를 가져옴. 기본 핸들러가 Redis여야 함.
|
||||
// (또는 Services::cache('redis')를 사용해 RedisHandler를 명시적으로 요청)
|
||||
$redis = \Config\Services::cache();
|
||||
|
||||
return $this->response->setJSON(['status' => 'queued']);
|
||||
// Redis 핸들러가 맞는지 확인 (선택 사항)
|
||||
if (!($redis->getHandler() instanceof RedisHandler)) {
|
||||
throw new \Exception('Cache handler is not Redis. Check Config/Cache.php $handler setting.');
|
||||
}
|
||||
// 요청에 재시도 횟수 초기화
|
||||
$data['retry_count'] = 0;
|
||||
|
||||
// RedisHandler의 getClient()를 사용하여 원본 \Redis 객체를 가져옵니다.
|
||||
// 주의: 모든 RedisHandler가 getClient()를 제공하는 것은 아니지만, CI4 내장 RedisHandler는 제공합니다.
|
||||
$client = $redis->getHandler()->getClient();
|
||||
|
||||
// 큐에 push
|
||||
$client->lPush('naver:queue', json_encode($data));
|
||||
|
||||
} catch (\Exception $e) {
|
||||
log_message('error', 'Redis connection failed: ' . $e->getMessage());
|
||||
return $this->response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR)
|
||||
->setJSON([
|
||||
'resultCode' => 'E999',
|
||||
'resultMessage' => 'Internal server error (Queue system unavailable)'
|
||||
]);
|
||||
}
|
||||
|
||||
// 4. 성공 응답
|
||||
return $this->response->setStatusCode(Response::HTTP_ACCEPTED) // 202 Accepted
|
||||
->setJSON([
|
||||
'resultCode' => 'S000',
|
||||
'resultMessage' => 'Request successfully queued for processing',
|
||||
'articleNumbr' => $data['articleNumbr']
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user