80 lines
3.0 KiB
PHP
80 lines
3.0 KiB
PHP
<?php
|
|
|
|
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()
|
|
{
|
|
// 1. 요청 방식에 따라 데이터 파싱
|
|
if ( $this->request->is('post') ) {
|
|
// POST 방식: JSON Body에서 데이터 가져오기
|
|
$data = $this->request->getJSON(true);
|
|
} else if ( $this->request->is('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.']);
|
|
}
|
|
|
|
// 2. 필수 항목 검증
|
|
$requiredKeys = ['articleNumber', 'requestType', 'requestDatetime'];
|
|
|
|
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 연결 및 예외 처리
|
|
// 3. Redis 연결 및 직접 푸시
|
|
try {
|
|
$redis = new \Redis();
|
|
// Docker 환경이므로 host를 'redis'로 설정
|
|
$success = $redis->connect('redis', 6379);
|
|
|
|
if (!$success) {
|
|
throw new \Exception('Redis connection failed');
|
|
}
|
|
|
|
$redis->select(10); // 10번 DB 선택
|
|
|
|
// 데이터 준비
|
|
$data['retry_count'] = 0;
|
|
|
|
// 리스트에 데이터 삽입 (이 명령어가 실행되어야 monitor에 LPUSH가 뜹니다)
|
|
$redis->lPush('naver:queue', json_encode($data));
|
|
|
|
} catch (\Exception $e) {
|
|
log_message('error', 'Redis Push Error: ' . $e->getMessage());
|
|
return $this->response->setStatusCode(500)->setJSON([
|
|
'resultCode' => 'E999',
|
|
'resultMessage' => 'Redis Connection Error'
|
|
]);
|
|
}
|
|
|
|
// 4. 성공 응답
|
|
return $this->response->setStatusCode(Response::HTTP_ACCEPTED) // 202 Accepted
|
|
->setJSON([
|
|
'resultCode' => 'S000',
|
|
'resultMessage' => 'Request successfully queued for processing',
|
|
'articleNumber' => $data['articleNumber']
|
|
]);
|
|
}
|
|
} |