diff --git a/app/Controllers/Article/Processible.php b/app/Controllers/Article/Processible.php index a259982..7364cf6 100644 --- a/app/Controllers/Article/Processible.php +++ b/app/Controllers/Article/Processible.php @@ -107,44 +107,70 @@ class Processible extends BaseController // 지역별 수량 저장 - public function saveArea() - { - try { + public function saveArea() + { + log_message('info', '[Processible::saveArea] 진입'); + try { + $rows = $this->request->getPost('rows'); + $rows = json_decode($rows, true); - $rows = $this->request->getPost('rows'); - $rows = json_decode($rows, true); - - // dd($rows); - // exit; - - if (count($rows) > 0) { - - foreach ($rows as $row): - $this->model->saveArea($row); - endforeach; - - return $this->response->setJSON([ - 'code' => '0', - 'msg' => 'success' - ]); - - } else { + if (count($rows) > 0) { + // API 형식으로 변환 및 DB 저장을 한 번에 처리 + $syncSlotData = []; + foreach ($rows as $row) { + // DB 저장 + $this->model->saveArea($row); + // 동시에 API 데이터 구성 + $syncSlotData[] = [ + 'baseDate' => $row['sc_date'], + 'legalDivisionNumber' => $row['region_cd'], + 'slots' => [ + 'am' => [ + 'max' => (int) $row['am_cnt'], + 'reserved' => 0 + ], + 'pm' => [ + 'max' => (int) $row['pm_cnt'], + 'reserved' => 0 + ] + ] + ]; + } + log_message('info', '[Processible::saveArea] 슬롯 동기화 시작 | Count: ' . count($syncSlotData)); + $naverClient = new \App\Libraries\NaverApiClient(); + $apiResponse = $naverClient->syncSiteSlot($syncSlotData); + // API 응답 처리 + if ($apiResponse === null) { + log_message('error', '[Processible::saveArea] Naver API 슬롯 동기화 실패 | Data: ' . json_encode($syncSlotData, JSON_UNESCAPED_UNICODE)); + return $this->response->setJSON([ + 'code' => '1', + 'msg' => '저장은 완료되었으나 네이버 슬롯 동기화에 실패했습니다. 로그를 확인하세요.', + 'syncData' => $syncSlotData, + 'hint' => '로그 위치: writable/logs/ 에서 ERROR 확인' + ]); + } + log_message('info', '[Processible::saveArea] Naver API 슬롯 동기화 성공 | Response: ' . json_encode($apiResponse, JSON_UNESCAPED_UNICODE)); + return $this->response->setJSON([ + 'code' => '0', + 'msg' => 'success', + 'syncData' => $syncSlotData, + 'apiResponse' => $apiResponse + ]); + } else { + log_message('info', '[Processible::saveArea] 저장가능한 데이터가 없습니다.'); + return $this->response->setJSON([ + 'code' => '9', + 'msg' => '저장가능한 데이터가 없습니다.' + ]); + } + } catch (\Exception $e) { + log_message('error', '[Processible::saveArea] 예외: ' . $e->getMessage()); return $this->response->setJSON([ 'code' => '9', - 'msg' => '저장가능한 데이터가 없습니다.' + 'msg' => $e->getMessage(), ]); } - - - } catch (\Exception $e) { - return $this->response->setJSON([ - 'code' => '9', - 'msg' => $e->getMessage(), - ]); } - } - - // 기본 수량 저장 public function saveCount() { try { diff --git a/app/Libraries/NaverApiClient.php b/app/Libraries/NaverApiClient.php index c183343..4899e69 100644 --- a/app/Libraries/NaverApiClient.php +++ b/app/Libraries/NaverApiClient.php @@ -518,11 +518,19 @@ class NaverApiClient $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $curlError = curl_error($ch); + $curlErrno = curl_errno($ch); curl_close($ch); + // CURL 오류 체크 + if ($curlErrno !== 0) { + log_message('error', "[Naver API $method CURL ERROR] URL: $url | Error ($curlErrno): $curlError"); + return null; + } + // 결과 로그 기록 (성공/실패 모두 기록하여 추적 가능하게 함) if ($httpCode === 200 || $httpCode === 202) { - log_message('info', "[Naver API $method SUCCESS] URL: $url | Response: $response"); + log_message('info', "[Naver API $method SUCCESS] URL: $url | Code: $httpCode | Response: $response"); } else { log_message('error', "[Naver API $method FAIL] URL: $url | Code: $httpCode | Response: $response"); return null; diff --git a/app/Models/article/ProcessibleModel.php b/app/Models/article/ProcessibleModel.php index 8db44c2..be7415e 100644 --- a/app/Models/article/ProcessibleModel.php +++ b/app/Models/article/ProcessibleModel.php @@ -303,4 +303,21 @@ class ProcessibleModel extends Model 'affected_rows' => $this->db->affectedRows() ]; } + + /** + * 슬롯 동기화 + * + */ + public function getSyncSlotData($baseDate, $region_cd) + { + + $sql = "SELECT sc_date, region_cd, am_cnt, pm_cnt, day_cnt FROM service_count WHERE sc_date = ? AND region_cd IN ?"; + $datas = [ + $baseDate, + $region_cd + ]; + $query = $this->db->query($sql, $datas); + return $query->getResultArray(); + + } } \ No newline at end of file diff --git a/app/Views/pages/article/processible/datecount.php b/app/Views/pages/article/processible/datecount.php index 8ec0505..c9a78c3 100644 --- a/app/Views/pages/article/processible/datecount.php +++ b/app/Views/pages/article/processible/datecount.php @@ -87,7 +87,7 @@