dbmsv4 init...2

This commit is contained in:
최준흠 2025-12-01 21:40:27 +09:00
parent 48464e565f
commit 16ad702c5e
5 changed files with 24 additions and 26 deletions

View File

@ -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();

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}