diff --git a/app/Services/CommonService.php b/app/Services/CommonService.php index 5f59b01..b7cdc16 100644 --- a/app/Services/CommonService.php +++ b/app/Services/CommonService.php @@ -9,7 +9,6 @@ use App\Models\CommonModel; use CodeIgniter\Database\Exceptions\DatabaseException; use CodeIgniter\Validation\Exceptions\ValidationException; use RuntimeException; -use SebastianBergmann\Type\ObjectType; /** * @template TEntity of CommonEntity @@ -131,7 +130,6 @@ abstract class CommonService //CURD 결과처리용 protected function handle_save_result(mixed $result, int|string $uid): int|string { - log_message('debug', $this->model->getLastQuery()); if ($result === false) { $errors = $this->model->errors(); $errorMsg = is_array($errors) ? implode(", ", $errors) : "DB 저장 작업이 실패했습니다."; @@ -164,6 +162,7 @@ abstract class CommonService // INSERT 시 Entity의 PK는 0 또는 NULL이어야 함 (DB가 ID를 생성하도록) $initialPK = $entity->getPK(); $result = $this->model->save($entity); + log_message('debug', $this->model->getLastQuery()); // 최종적으로 DB에 반영된 PK를 반환받습니다. (UPDATE이면 기존 PK, INSERT이면 새 PK) $entity->{$this->model->getPKField()} = $this->handle_save_result($result, $initialPK); // handle_save_result에서 확인된 최종 PK를 사용하여 DB에서 최신 엔티티를 가져옴 @@ -221,21 +220,24 @@ abstract class CommonService //수정용 protected function modify_process($entity, array $formDatas): object { - //FormData 검증 + // 검증 if (!$this->getFormService()->validate($formDatas)) { - throw new ValidationException(implode("\n", service('validation')->getErrors())); + throw new ValidationException( + implode("\n", service('validation')->getErrors()) + ); } - //관리자 정보추가용 + // 관리자 정보 추가 $formDatas['user_uid'] = $this->getAuthContext()->getUID(); - // DTO 데이터에서 PK 필드가 있다면 제거하여, fill()에서 기존 PK를 덮어쓰지 않도록 합니다. + //PK 추가 $pkField = $this->model->getPKField(); - if (isset($formDatas[$pkField])) { - unset($formDatas[$pkField]); + if (!isset($formDatas[$pkField]) && !empty($entity->getPK())) { + // original에 있는 PK 값을 attributes에 명시적으로 복사합니다. + $formDatas[$pkField] = $entity->getPK(); } - $entity->merge($formDatas); - dd($entity); + $entity->fill($formDatas); return $this->save_process($entity); } + final public function modify(string|int $uid, object $dto): CommonEntity { $db = \Config\Database::connect(); diff --git a/app/Services/Part/PartService.php b/app/Services/Part/PartService.php index 3c0d995..661ebc7 100644 --- a/app/Services/Part/PartService.php +++ b/app/Services/Part/PartService.php @@ -16,16 +16,12 @@ abstract class PartService extends CommonService } abstract public function attachToServerPart(ServerPartEntity $serverPartEntity, array $formDatas = []): PartEntity; abstract public function detachFromServerPart(ServerPartEntity $serverPartEntity, array $formDatas = []): PartEntity; - final protected function updatePart($entity, array $formDatas): PartEntity + + protected function modify_process($entity, array $formDatas): object { - $updateResult = $this->model->update($entity->getPK(), $formDatas); - if ($updateResult === false || $updateResult === 0) { - // 업데이트 실패 시 예외 처리 - $errors = $this->model->errors(); - $errorMsg = is_array($errors) ? implode(", ", $errors) : "DB 업데이트 실패 또는 변경된 행 없음."; - throw new \Exception(__METHOD__ . ": " . $errorMsg); - } - $entity->merge($formDatas); - return $entity; + $fields = array_keys($formDatas); + $this->getFormService()->setFormFields($fields); + $this->getFormService()->setFormRules('modify', $fields); + return parent::modify_process($entity, $formDatas); } } diff --git a/app/Services/Part/PartType1Service.php b/app/Services/Part/PartType1Service.php index 9f14c9b..2791ca3 100644 --- a/app/Services/Part/PartType1Service.php +++ b/app/Services/Part/PartType1Service.php @@ -25,7 +25,7 @@ abstract class PartType1Service extends PartService throw new \Exception("현재 사용가능 갯수[{$entity->getAvailable()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); } $formDatas['used'] = $entity->getUsed() + $serverPartEntity->getCnt(); - return $this->updatePart($entity, $formDatas); + return parent::modify_process($entity, $formDatas); } public function detachFromServerPart(ServerPartEntity $serverPartEntity, array $formDatas = []): PartEntity { @@ -37,6 +37,6 @@ abstract class PartType1Service extends PartService throw new \Exception("현재 사용된 갯수[{$entity->getUsed()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); } $formDatas['used'] = $entity->getUsed() - $serverPartEntity->getCnt(); - return $this->updatePart($entity, $formDatas); + return parent::modify_process($entity, $formDatas); } } diff --git a/app/Services/Part/PartType2Service.php b/app/Services/Part/PartType2Service.php index ccca07a..62d9d32 100644 --- a/app/Services/Part/PartType2Service.php +++ b/app/Services/Part/PartType2Service.php @@ -27,7 +27,7 @@ abstract class PartType2Service extends PartService throw new \Exception(__METHOD__ . ":에서 오류발생: {$entity->getTitle()}는 사용중입니다."); } //파트정보 수정 - return $this->updatePart($entity, $formDatas); + return parent::modify_process($entity, $formDatas); } public function detachFromServerPart(ServerPartEntity $serverPartEntity, array $formDatas = []): PartEntity { @@ -38,6 +38,6 @@ abstract class PartType2Service extends PartService //파트정보가져오기 $entity = $this->getPartEntityByServerPart($serverPartEntity); //파트정보 수정 - return $this->updatePart($entity, $formDatas); + return parent::modify_process($entity, $formDatas); } } diff --git a/app/Services/Part/PartType3Service.php b/app/Services/Part/PartType3Service.php index 8836361..593d5f9 100644 --- a/app/Services/Part/PartType3Service.php +++ b/app/Services/Part/PartType3Service.php @@ -26,7 +26,7 @@ abstract class PartType3Service extends PartType2Service throw new \Exception(__METHOD__ . ":에서 오류발생: {$entity->getTitle()}는 사용중입니다."); } //파트정보 수정 - return $this->updatePart($entity, $formDatas); + return parent::modify_process($entity, $formDatas); } public function detachFromServer(ServerEntity $serverEntity, array $formDatas = []): PartEntity @@ -38,6 +38,6 @@ abstract class PartType3Service extends PartType2Service //파트정보가져오기 $entity = $this->getPartEntityByServer($serverEntity); //파트정보 수정 - return $this->updatePart($entity, $formDatas); + return parent::modify_process($entity, $formDatas); } }