diff --git a/app/Controllers/AbstractWebController.php b/app/Controllers/AbstractWebController.php index a694a71..79288c5 100644 --- a/app/Controllers/AbstractWebController.php +++ b/app/Controllers/AbstractWebController.php @@ -96,6 +96,7 @@ abstract class AbstractWebController extends Controller case 'critical': case 'alert': case 'emergency': + case 'success': log_message($type, $message); $result = redirect()->back()->withInput()->with('message', $message); break; diff --git a/app/Controllers/Ajax/AjaxController.php b/app/Controllers/Ajax/AjaxController.php index 4af60ce..98f9442 100644 --- a/app/Controllers/Ajax/AjaxController.php +++ b/app/Controllers/Ajax/AjaxController.php @@ -75,4 +75,46 @@ abstract class AjaxController extends AbstractCRUDController return $this->fail('처리 중 오류가 발생했습니다.', 500); } + + public function create(): ResponseInterface + { + if (!$this->request->isAJAX()) { + return $this->response->setStatusCode(400)->setJSON([ + 'ok' => false, + 'message' => static::class . '->' . __FUNCTION__ . "에서 오류발생: AJAX요청 형식이 아닙니다." + ]); + } + try { + $formDatas = $this->request->getPost(); + // log_message('error', 'POST=' . json_encode($formDatas, JSON_UNESCAPED_UNICODE)); + $entity = $this->service->create($formDatas); + return $this->response->setStatusCode(201)->setJSON([ + 'ok' => true, + 'message' => '문의가 접수되었습니다.', + 'data' => ['pk' => $entity->getPK()], + ]); + } catch (FormValidationException $e) { + // log_message('error', 'CAUGHT FormValidationException: ' . print_r($e->getErrors(), true)); + return $this->response->setStatusCode(422)->setJSON([ + 'ok' => false, + 'message' => '입력값을 확인해 주세요.', + 'errors' => $e->getErrors(), + ]); + } catch (\Throwable $e) { + // ✅ 혹시 서비스에서 예외를 감싸버린 경우에도 에러를 최대한 복구 + $errors = service('validation')->getErrors(); + if (!empty($errors)) { + log_message('error', 'FALLBACK validation errors: ' . print_r($errors, true)); + return $this->response->setStatusCode(422)->setJSON([ + 'ok' => false, + 'message' => '입력값을 확인해 주세요.', + 'errors' => $errors, + ]); + } + return $this->response->setStatusCode(500)->setJSON([ + 'ok' => false, + 'message' => '처리 중 오류가 발생했습니다.', + ]); + } + } } diff --git a/app/Controllers/Ajax/InquiryController.php b/app/Controllers/Ajax/InquiryController.php index 35ad16e..30a5336 100644 --- a/app/Controllers/Ajax/InquiryController.php +++ b/app/Controllers/Ajax/InquiryController.php @@ -6,8 +6,6 @@ use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; -use App\Exceptions\FormValidationException; - class InquiryController extends AjaxController { public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) @@ -21,58 +19,4 @@ class InquiryController extends AjaxController //Action작업관련 //기본 함수 작업 //Custom 추가 함수 - - public function create(): ResponseInterface - { - log_message('error', 'HIT InquiryController::create'); - - if (!$this->request->isAJAX()) { - return $this->response->setStatusCode(400)->setJSON([ - 'ok' => false, - 'message' => 'Invalid request' - ]); - } - - try { - $formDatas = $this->request->getPost(); - log_message('error', 'POST=' . json_encode($formDatas, JSON_UNESCAPED_UNICODE)); - - $entity = $this->service->create($formDatas); - - return $this->response->setStatusCode(201)->setJSON([ - 'ok' => true, - 'message' => '문의가 접수되었습니다.', - 'data' => ['pk' => $entity->getPK()], - ]); - - } catch (FormValidationException $e) { - log_message('error', 'CAUGHT FormValidationException: ' . print_r($e->getErrors(), true)); - - return $this->response->setStatusCode(422)->setJSON([ - 'ok' => false, - 'message' => '입력값을 확인해 주세요.', - 'errors' => $e->getErrors(), - ]); - - } catch (\Throwable $e) { - // ✅ 혹시 서비스에서 예외를 감싸버린 경우에도 에러를 최대한 복구 - $errors = service('validation')->getErrors(); - if (!empty($errors)) { - log_message('error', 'FALLBACK validation errors: ' . print_r($errors, true)); - - return $this->response->setStatusCode(422)->setJSON([ - 'ok' => false, - 'message' => '입력값을 확인해 주세요.', - 'errors' => $errors, - ]); - } - - log_message('error', '[AJAX create] ' . $e->getMessage()); - - return $this->response->setStatusCode(500)->setJSON([ - 'ok' => false, - 'message' => '처리 중 오류가 발생했습니다.', - ]); - } - } } diff --git a/app/Services/CommonService.php b/app/Services/CommonService.php index 1bb00d9..ab6a1c0 100644 --- a/app/Services/CommonService.php +++ b/app/Services/CommonService.php @@ -217,10 +217,6 @@ abstract class CommonService $errorMsg = is_array($errors) ? implode(", ", $errors) : "DB 저장 작업이 실패했습니다."; throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: " . $errorMsg); } - // CodeIgniter 모델의 getInsertID()를 사용하여 새로 생성된 PK를 확실히 가져옵니다. - if ($this->model->useAutoIncrement()) { - $entity->{$this->getPKField()} = $this->model->getInsertID(); - } return $entity; } catch (\Throwable $e) { log_message('debug', __FUNCTION__ . ":" . var_export($entity, true)); @@ -255,7 +251,12 @@ abstract class CommonService throw new RuntimeException("Return Type은 {$entityClass}만 가능"); } $entity->fill($formDatas); - return $this->save_process($entity); + $entity = $this->save_process($entity); + //생성PK 설정 + if ($this->model->useAutoIncrement()) { + $entity->{$this->getPKField()} = $this->model->getInsertID(); + } + return $entity; } catch (FormValidationException $e) { throw $e; // ✅ 감싸지 말고 그대로 } catch (\Throwable $e) { @@ -289,7 +290,8 @@ abstract class CommonService if (!$entity->hasChanged()) { return $entity; } - return $this->save_process($entity); + $entity = $this->save_process($entity); + return $entity; } catch (FormValidationException $e) { throw $e; // ✅ 감싸지 말고 그대로 } catch (\Throwable $e) {