dbmsv4 init...1

This commit is contained in:
최준흠 2025-11-26 18:24:49 +09:00
parent 8cfcd91e2e
commit bb1e450b6c
12 changed files with 282 additions and 105 deletions

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"php.version": "8.3"
}

View File

@ -36,19 +36,18 @@ abstract class CommonController extends AbstractCRUDController
return array($uids, $selectedFields, $formDatas); return array($uids, $selectedFields, $formDatas);
} }
protected function batchjob_process($uid, array $formDatas): CommonEntity protected function batchjob_process(array $uids, array $formDatas): array
{ {
// Service 로직 호출 (오버라이드 포인트) // Service 로직 호출 (오버라이드 포인트)
return $this->service->batchjob($uid, $formDatas); return $this->service->batchjob($uids, $formDatas);
} }
protected function batchjob_result_process(array $uids, array $entities, array $errors): string|RedirectResponse protected function batchjob_result_process(array $uids, array $entities): string|RedirectResponse
{ {
return $this->action_redirect_process('info', sprintf( return $this->action_redirect_process('info', sprintf(
"%s에서 %s개 처리완료, %s개 오류, 총:%s개 수정이 완료되었습니다.", "%s에서 %s개 처리완료 총:%s개 수정이 완료되었습니다.",
$this->getTitle(), $this->getTitle(),
count($entities), count($entities),
count($errors),
count($uids) count($uids)
)); ));
} }
@ -62,17 +61,8 @@ abstract class CommonController extends AbstractCRUDController
$this->service->getFormService()->setFormRules($action, $selectedFields); $this->service->getFormService()->setFormRules($action, $selectedFields);
$this->service->getFormService()->setFormFilters($selectedFields); $this->service->getFormService()->setFormFilters($selectedFields);
$this->service->getFormService()->setFormOptions($action, $selectedFields); $this->service->getFormService()->setFormOptions($action, $selectedFields);
$entities = []; $entities = $this->batchjob_process($uids, $formDatas);
$errors = []; return $this->batchjob_result_process($uids, $entities);
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_process($uid, $formDatas);
} catch (\Throwable $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
}
}
return $this->batchjob_result_process($uids, $entities, $errors);
} catch (\Throwable $e) { } catch (\Throwable $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄수정 오류:" . $e->getMessage()); return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄수정 오류:" . $e->getMessage());
} }
@ -89,13 +79,12 @@ abstract class CommonController extends AbstractCRUDController
return $uids; return $uids;
} }
protected function batchjob_delete_result_process(array $uids, array $entities, array $errors): string|RedirectResponse protected function batchjob_delete_result_process(array $uids, array $entities): string|RedirectResponse
{ {
return $this->action_redirect_process('info', sprintf( return $this->action_redirect_process('info', sprintf(
"%s에서 %s개 처리완료, %s개 오류, 총:%s개 일괄삭제가 완료되었습니다.", "%s에서 %s개 처리완료, 총:%s개 일괄삭제가 완료되었습니다.",
$this->getTitle(), $this->getTitle(),
count($entities), count($entities),
count($errors),
count($uids) count($uids)
)); ));
} }
@ -103,25 +92,16 @@ abstract class CommonController extends AbstractCRUDController
/** /**
* 단일 삭제 로직을 재사용 (Override 가능) * 단일 삭제 로직을 재사용 (Override 가능)
*/ */
protected function batchjob_delete_process($uid): CommonEntity protected function batchjob_delete_process(array $uids): array
{ {
return $this->service->delete($uid); return $this->service->batchjob_delete($uids);
} }
final public function batchjob_delete(): string|RedirectResponse final public function batchjob_delete(): string|RedirectResponse
{ {
try { try {
$uids = $this->batchjob_delete_pre_process(); $uids = $this->batchjob_delete_pre_process();
$entities = []; $entities = $this->batchjob_delete_process($uids);
$errors = []; return $this->batchjob_delete_result_process($uids, $entities);
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_delete_process($uid);
} catch (\Throwable $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
}
}
return $this->batchjob_delete_result_process($uids, $entities, $errors);
} catch (\Throwable $e) { } catch (\Throwable $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄삭제 오류:" . $e->getMessage()); return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄삭제 오류:" . $e->getMessage());
} }

View File

@ -188,8 +188,12 @@ abstract class CommonForm
$entities = []; $entities = [];
switch ($field) { switch ($field) {
default: default:
if (array_key_exists($field, $formDatas)) { if (in_array($action, ['create_form', 'modify_form'])) {
$where = sprintf("status = '%s' OR %s='%s'", STATUS['AVAILABLE'], $this->getAttribute('pk_field'), $formDatas[$field]); if (array_key_exists($field, $formDatas)) {
$where = sprintf("status = '%s' OR %s='%s'", STATUS['AVAILABLE'], $this->getAttribute('pk_field'), $formDatas[$field]);
} else {
$where = sprintf("status = '%s'", STATUS['AVAILABLE']);
}
$entities = $service->getEntities([$where => null]); $entities = $service->getEntities([$where => null]);
} else { } else {
$entities = $service->getEntities(); $entities = $service->getEntities();

View File

@ -51,9 +51,13 @@ class ServerForm extends EquipmentForm
$entities = []; $entities = [];
switch ($field) { switch ($field) {
case 'ip': case 'ip':
if (array_key_exists($field, $formDatas)) { if (in_array($action, ['create_form', 'modify_form'])) {
$where = sprintf("status = '%s' OR %s='%s'", STATUS['AVAILABLE'], $field, $formDatas[$field]); if (array_key_exists($field, $formDatas)) {
$entities = $service->getEntities([$where => null]); $where = sprintf("status = '%s' OR %s='%s'", STATUS['AVAILABLE'], $field, $formDatas[$field]);
$entities = $service->getEntities([$where => null]);
} else {
$entities = parent::getFormOption_process($service, $action, $field, $formDatas);
}
} else { } else {
$entities = parent::getFormOption_process($service, $action, $field, $formDatas); $entities = parent::getFormOption_process($service, $action, $field, $formDatas);
} }

View File

@ -156,7 +156,7 @@ abstract class CommonService
// 최종적으로 DB에 반영된 PK를 반환받습니다. (UPDATE이면 기존 PK, INSERT이면 새 PK) // 최종적으로 DB에 반영된 PK를 반환받습니다. (UPDATE이면 기존 PK, INSERT이면 새 PK)
$finalPK = $this->handle_save_result($result, $initialPK); $finalPK = $this->handle_save_result($result, $initialPK);
// handle_save_result에서 확인된 최종 PK를 사용하여 DB에서 최신 엔티티를 가져옴 // handle_save_result에서 확인된 최종 PK를 사용하여 DB에서 최신 엔티티를 가져옴
return $this->getEntity($finalPK); return $entity;
} }
//생성용 //생성용
@ -172,18 +172,37 @@ abstract class CommonService
} }
final public function create(object $dto): CommonEntity final public function create(object $dto): CommonEntity
{ {
//DTO 타입 체크 로직을 일반화 $db = \Config\Database::connect();
$dtoClass = $this->getDTOClass(); try {
if (!$dto instanceof $dtoClass) { //트랜잭션 도중 DB 오류가 발생하면 DatabaseException을 던지도록 설정
throw new RuntimeException(__METHOD__ . "에서 오류발생: " . get_class($dto) . "는 사용할 수 없습니다. ({$dtoClass} 필요)"); $db->transException(true)->transStart();
//DTO 타입 체크 로직을 일반화
$dtoClass = $this->getDTOClass();
if (!$dto instanceof $dtoClass) {
throw new RuntimeException(__METHOD__ . "에서 오류발생: " . get_class($dto) . "는 사용할 수 없습니다. ({$dtoClass} 필요)");
}
$formDatas = $dto->toArray();
if (!$this->getFormService()->validate($formDatas)) {
throw new ValidationException(implode("\n", service('validation')->getErrors()));
}
// NOTE: create_process에서 엔티티를 생성할 때, 자동 증가(AUTO_INCREMENT) 필드는
// DB가 처리하도록 NULL이나 빈 값(0)으로 두는 것이 일반적입니다.
$entity = $this->create_process($formDatas);
// 트랜잭션 완료 및 커밋
$db->transComplete();
return $entity;
} catch (DatabaseException $e) {
// DatabaseException을 포착하면 자동으로 롤백 처리됨
throw new RuntimeException(sprintf(
"\n----[%s]에서 트랜잭션 실패: DB 오류----\n%s\n%s\n------------------------------\n",
__METHOD__,
$this->model->getLastQuery(),
$e->getMessage()
), $e->getCode(), $e);
} catch (\Throwable $e) {
$db->transRollback(); // 예외 발생 시 수동으로 롤백
throw new RuntimeException($e->getMessage(), 0, $e);
} }
$formDatas = $dto->toArray();
if (!$this->getFormService()->validate($formDatas)) {
throw new ValidationException(implode("\n", service('validation')->getErrors()));
}
// NOTE: create_process에서 엔티티를 생성할 때, 자동 증가(AUTO_INCREMENT) 필드는
// DB가 처리하도록 NULL이나 빈 값(0)으로 두는 것이 일반적입니다.
return $this->create_process($formDatas);
} }
//수정용 //수정용
@ -213,16 +232,35 @@ abstract class CommonService
} }
final public function modify(string|int $uid, object $dto): CommonEntity final public function modify(string|int $uid, object $dto): CommonEntity
{ {
//DTO 타입 체크 로직을 일반화 $db = \Config\Database::connect();
$dtoClass = $this->getDTOClass(); try {
if (!$dto instanceof $dtoClass) { //트랜잭션 도중 DB 오류가 발생하면 DatabaseException을 던지도록 설정
throw new RuntimeException(__METHOD__ . "에서 오류발생: " . get_class($dto) . "는 사용할 수 없습니다. ({$dtoClass} 필요)"); $db->transException(true)->transStart();
//DTO 타입 체크 로직을 일반화
$dtoClass = $this->getDTOClass();
if (!$dto instanceof $dtoClass) {
throw new RuntimeException(__METHOD__ . "에서 오류발생: " . get_class($dto) . "는 사용할 수 없습니다. ({$dtoClass} 필요)");
}
$formDatas = $dto->toArray();
if (!$this->getFormService()->validate($formDatas)) {
throw new ValidationException(implode("\n", service('validation')->getErrors()));
}
$entity = $this->modify_process($uid, $formDatas);
// 트랜잭션 완료 및 커밋
$db->transComplete();
return $entity;
} catch (DatabaseException $e) {
// DatabaseException을 포착하면 자동으로 롤백 처리됨
throw new RuntimeException(sprintf(
"\n----[%s]에서 트랜잭션 실패: DB 오류----\n%s\n%s\n------------------------------\n",
__METHOD__,
$this->model->getLastQuery(),
$e->getMessage()
), $e->getCode(), $e);
} catch (\Throwable $e) {
$db->transRollback(); // 예외 발생 시 수동으로 롤백
throw new RuntimeException($e->getMessage(), 0, $e);
} }
$formDatas = $dto->toArray();
if (!$this->getFormService()->validate($formDatas)) {
throw new ValidationException(implode("\n", service('validation')->getErrors()));
}
return $this->modify_process($uid, $formDatas);
} }
//배치 작업용 수정 //배치 작업용 수정
@ -232,19 +270,41 @@ abstract class CommonService
$entity = $this->modify_process($uid, $formDatas); $entity = $this->modify_process($uid, $formDatas);
return $entity; return $entity;
} }
final public function batchjob(string|int $uid, object $dto): CommonEntity final public function batchjob(array $uids, object $dto): array
{ {
//DTO 타입 체크 로직을 일반화 $db = \Config\Database::connect();
$dtoClass = $this->getDTOClass(); try {
if (!$dto instanceof $dtoClass) { //트랜잭션 도중 DB 오류가 발생하면 DatabaseException을 던지도록 설정
throw new RuntimeException(__METHOD__ . "에서 오류발생: " . get_class($dto) . "는 사용할 수 없습니다. ({$dtoClass} 필요)"); $db->transException(true)->transStart();
//DTO 타입 체크 로직을 일반화
$dtoClass = $this->getDTOClass();
if (!$dto instanceof $dtoClass) {
throw new RuntimeException(__METHOD__ . "에서 오류발생: " . get_class($dto) . "는 사용할 수 없습니다. ({$dtoClass} 필요)");
}
$formDatas = $dto->toArray();
if (!$this->getFormService()->validate($formDatas)) {
throw new ValidationException(implode("\n", service('validation')->getErrors()));
}
//일괄작업처리
$entities = [];
foreach ($uids as $uid) {
$entities[] = $this->batchjob_process($uid, $formDatas);
}
// 트랜잭션 완료 및 커밋
$db->transComplete();
return $entities;
} catch (DatabaseException $e) {
// DatabaseException을 포착하면 자동으로 롤백 처리됨
throw new RuntimeException(sprintf(
"\n----[%s]에서 트랜잭션 실패: DB 오류----\n%s\n%s\n------------------------------\n",
__METHOD__,
$this->model->getLastQuery(),
$e->getMessage()
), $e->getCode(), $e);
} catch (\Throwable $e) {
$db->transRollback(); // 예외 발생 시 수동으로 롤백
throw new RuntimeException($e->getMessage(), 0, $e);
} }
$formDatas = $dto->toArray();
if (!$this->getFormService()->validate($formDatas)) {
throw new ValidationException(implode("\n", service('validation')->getErrors()));
}
return $this->batchjob_process($uid, $formDatas);
} }
//삭제용 (일반) //삭제용 (일반)
@ -257,11 +317,6 @@ abstract class CommonService
if (!$entity) { if (!$entity) {
throw new \Exception(__METHOD__ . "에서 오류발생: {$uid}에 해당하는 정보을 찾을수 없습니다."); throw new \Exception(__METHOD__ . "에서 오류발생: {$uid}에 해당하는 정보을 찾을수 없습니다.");
} }
return $entity;
}
final public function delete(string|int $uid): CommonEntity
{
$entity = $this->delete_process($uid);
$result = $this->model->delete($entity->getPK()); $result = $this->model->delete($entity->getPK());
log_message('debug', $this->model->getLastQuery()); log_message('debug', $this->model->getLastQuery());
if ($result === false) { if ($result === false) {
@ -271,6 +326,29 @@ abstract class CommonService
} }
return $entity; return $entity;
} }
final public function delete(string|int $uid): CommonEntity
{
$db = \Config\Database::connect();
try {
//트랜잭션 도중 DB 오류가 발생하면 DatabaseException을 던지도록 설정
$db->transException(true)->transStart();
$entity = $this->delete_process($uid);
// 트랜잭션 완료 및 커밋
$db->transComplete();
return $entity;
} catch (DatabaseException $e) {
// DatabaseException을 포착하면 자동으로 롤백 처리됨
throw new RuntimeException(sprintf(
"\n----[%s]에서 트랜잭션 실패: DB 오류----\n%s\n%s\n------------------------------\n",
__METHOD__,
$this->model->getLastQuery(),
$e->getMessage()
), $e->getCode(), $e);
} catch (\Throwable $e) {
$db->transRollback(); // 예외 발생 시 수동으로 롤백
throw new RuntimeException($e->getMessage(), 0, $e);
}
}
//삭제용 (배치 작업) //삭제용 (배치 작업)
protected function batchjob_delete_process(string|int $uid): CommonEntity protected function batchjob_delete_process(string|int $uid): CommonEntity
@ -280,17 +358,32 @@ abstract class CommonService
return $entity; return $entity;
} }
final public function batchjob_delete(string|int $uid): CommonEntity final public function batchjob_delete(array $uids): array
{ {
$entity = $this->batchjob_delete_process($uid); $db = \Config\Database::connect();
$result = $this->model->delete($entity->getPK()); try {
log_message('debug', $this->model->getLastQuery()); //트랜잭션 도중 DB 오류가 발생하면 DatabaseException을 던지도록 설정
if ($result === false) { $db->transException(true)->transStart();
$errors = $this->model->errors(); //일괄작업처리
$errorMsg = is_array($errors) ? implode(", ", $errors) : "삭제 작업이 실패했습니다."; $entities = [];
throw new RuntimeException(__METHOD__ . "에서 오류발생: " . $errorMsg); foreach ($uids as $uid) {
$entities[] = $this->batchjob_delete_process($uid);
}
// 트랜잭션 완료 및 커밋
$db->transComplete();
return $entities;
} catch (DatabaseException $e) {
// DatabaseException을 포착하면 자동으로 롤백 처리됨
throw new RuntimeException(sprintf(
"\n----[%s]에서 트랜잭션 실패: DB 오류----\n%s\n%s\n------------------------------\n",
__METHOD__,
$this->model->getLastQuery(),
$e->getMessage()
), $e->getCode(), $e);
} catch (\Throwable $e) {
$db->transRollback(); // 예외 발생 시 수동으로 롤백
throw new RuntimeException($e->getMessage(), 0, $e);
} }
return $entity;
} }
//Index용 //Index용

View File

@ -172,7 +172,12 @@ class ServerPartService extends EquipmentService
$formDatas['amount'] = $partEntity->getPrice(); //파트 금액 $formDatas['amount'] = $partEntity->getPrice(); //파트 금액
$formDatas['cnt'] = $part["CNT"]; $formDatas['cnt'] = $part["CNT"];
$formDatas['extra'] = $part["EXTRA"]; $formDatas['extra'] = $part["EXTRA"];
$entity = $this->model->create($formDatas); //action 초기화
$this->action_init_process('create');
$entity = $this->create($this->createDTO($formDatas));
if (!$entity instanceof ServerPartEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: Return Type은 ServerPartEntity만 가능합니다.");
}
$this->getPartService($entity->getType())->attachToServerPart($entity); $this->getPartService($entity->getType())->attachToServerPart($entity);
} }
} }

View File

@ -129,7 +129,9 @@ class ServerService extends EquipmentService
throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 ServerEntity만 가능"); throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 ServerEntity만 가능");
} }
//서버추가시 서버파트 자동추가용 //서버추가시 서버파트 자동추가용
service('equipment_serverpartservice')->attachToServer($entity); service('part_ipservice')->attachToServer($entity);
service('part_switchservice')->attachToServer($entity);
// service('equipment_serverpartservice')->attachToServer($entity);
return $entity; return $entity;
} }
protected function modify_process($uid, array $formDatas): ServerEntity protected function modify_process($uid, array $formDatas): ServerEntity

View File

@ -173,7 +173,13 @@ class CSService extends PartService
if ($entity->getStatus() !== STATUS['AVAILABLE']) { if ($entity->getStatus() !== STATUS['AVAILABLE']) {
throw new \Exception(__METHOD__ . ":에서 오류발생: {$serverPartEntity->getTitle()}는 사용중입니다."); throw new \Exception(__METHOD__ . ":에서 오류발생: {$serverPartEntity->getTitle()}는 사용중입니다.");
} }
$entity = $this->model->modify($entity, $formDatas); //CS 정보 수정
//초기화
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
/** @var CSEntity $entity IDE에 entity type알려주기*/
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
} }
return $entity; return $entity;
} }
@ -192,7 +198,13 @@ class CSService extends PartService
if (!$entity instanceof CSEntity) { if (!$entity instanceof CSEntity) {
throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 CS정보를 찾을수없습니다."); throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 CS정보를 찾을수없습니다.");
} }
//CS정보 수정 //CS 정보 수정
return $this->model->modify($entity, $formDatas); //초기화
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
/** @var CSEntity $entity IDE에 entity type알려주기*/
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
return $entity;
} }
} }

View File

@ -3,6 +3,7 @@
namespace App\Services\Part; namespace App\Services\Part;
use App\DTOs\Part\DISKDTO; use App\DTOs\Part\DISKDTO;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Part\DISKEntity; use App\Entities\Part\DISKEntity;
use App\Forms\Part\DISKForm; use App\Forms\Part\DISKForm;
use App\Helpers\Part\DISKHelper; use App\Helpers\Part\DISKHelper;
@ -124,4 +125,21 @@ class DISKService extends PartService
$this->model->orderBy('title ASC'); $this->model->orderBy('title ASC');
parent::setOrderBy($field, $value); parent::setOrderBy($field, $value);
} }
//서버파트관련 작업
public function detachFromServerPart(ServerPartEntity $serverPartEntity): DiskEntity
{
/** @var DiskEntity $entity IDE에 entity type알려주기*/
$entity = parent::detachFromServerPart($serverPartEntity);
$formDatas = ['format' => $entity->getFormat() + $serverPartEntity->getCnt()];
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
if (!$entity instanceof DISKEntity) {
throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 DISKEntity만 가능");
}
return $entity;
}
} }

View File

@ -159,7 +159,14 @@ class IPService extends PartService
if ($entity->getStatus() !== STATUS['AVAILABLE']) { if ($entity->getStatus() !== STATUS['AVAILABLE']) {
throw new \Exception(__METHOD__ . ":에서 오류발생: {$serverEntity->getTitle()}는 사용중입니다."); throw new \Exception(__METHOD__ . ":에서 오류발생: {$serverEntity->getTitle()}는 사용중입니다.");
} }
return $this->model->modify($entity, $formDatas); //IP 정보 수정
//초기화
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
/** @var IPEntity $entity IDE에 entity type알려주기*/
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
return $entity;
} }
public function detachFromServer(ServerEntity $serverEntity): IPEntity public function detachFromServer(ServerEntity $serverEntity): IPEntity
{ {
@ -175,7 +182,13 @@ class IPService extends PartService
throw new \Exception("{$serverEntity->getIP()}에 해당하는 IP정보를 찾을수없습니다."); throw new \Exception("{$serverEntity->getIP()}에 해당하는 IP정보를 찾을수없습니다.");
} }
//IP정보 수정 //IP정보 수정
return $this->model->modify($entity, $formDatas); //초기화
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
/** @var IPEntity $entity IDE에 entity type알려주기*/
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
return $entity;
} }
//서버파트관련 작업 //서버파트관련 작업
@ -192,7 +205,13 @@ class IPService extends PartService
if ($entity->getStatus() !== STATUS['AVAILABLE']) { if ($entity->getStatus() !== STATUS['AVAILABLE']) {
throw new \Exception(__METHOD__ . ":에서 오류발생: {$entity->getTitle()}는 사용중입니다."); throw new \Exception(__METHOD__ . ":에서 오류발생: {$entity->getTitle()}는 사용중입니다.");
} }
$entity = $this->model->modify($entity, $formDatas); //IP 정보 수정
//초기화
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
/** @var IPEntity $entity IDE에 entity type알려주기*/
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
} }
return $entity; return $entity;
} }
@ -209,7 +228,13 @@ class IPService extends PartService
if (!$entity instanceof IPEntity) { if (!$entity instanceof IPEntity) {
throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 IP정보를 찾을수없습니다."); throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 IP정보를 찾을수없습니다.");
} }
//IP정보 수정 //IP 정보 수정
return $this->model->modify($entity, $formDatas); //초기화
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
/** @var IPEntity $entity IDE에 entity type알려주기*/
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
return $entity;
} }
} }

View File

@ -20,7 +20,7 @@ abstract class PartService extends CommonService
} }
//서버파트관련 작업 //서버파트관련 작업
public function attachToServerPart(ServerPartEntity $serverPartEntity): mixed public function attachToServerPart(ServerPartEntity $serverPartEntity): PartEntity
{ {
//부품정보가져오기 //부품정보가져오기
$entity = $this->getEntity($serverPartEntity->getPartUID()); $entity = $this->getEntity($serverPartEntity->getPartUID());
@ -31,9 +31,13 @@ abstract class PartService extends CommonService
if ($entity->getAvailable() < $serverPartEntity->getCnt()) { if ($entity->getAvailable() < $serverPartEntity->getCnt()) {
throw new \Exception("현재 사용가능 갯수[{$entity->getAvailable()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); throw new \Exception("현재 사용가능 갯수[{$entity->getAvailable()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다.");
} }
return $this->model->modify($entity, ['used' => $entity->getUsed() + $serverPartEntity->getCnt()]); $formDatas = ['used' => $entity->getUsed() + $serverPartEntity->getCnt()];
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
return $this->modify($entity->getPK(), $this->createDTO($formDatas));
} }
public function detachFromServerPart(ServerPartEntity $serverPartEntity): mixed public function detachFromServerPart(ServerPartEntity $serverPartEntity): PartEntity
{ {
//부품정보가져오기 //부품정보가져오기
$entity = $this->getEntity($serverPartEntity->getPartUID()); $entity = $this->getEntity($serverPartEntity->getPartUID());
@ -44,8 +48,10 @@ abstract class PartService extends CommonService
if ($entity->getUsed() < $serverPartEntity->getCnt()) { if ($entity->getUsed() < $serverPartEntity->getCnt()) {
throw new \Exception("현재 사용된 갯수[{$entity->getUsed()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); throw new \Exception("현재 사용된 갯수[{$entity->getUsed()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다.");
} }
$entity = $this->model->modify($entity, ['used' => $entity->getUsed() - $serverPartEntity->getCnt()]); $formDatas = ['used' => $entity->getUsed() - $serverPartEntity->getCnt()];
// dd($entity); $fields = array_keys($formDatas);
return $entity; $this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
return $this->modify($entity->getPK(), $this->createDTO($formDatas));
} }
} }

View File

@ -163,7 +163,14 @@ class SWITCHService extends PartService
if ($entity->getStatus() !== STATUS['AVAILABLE']) { if ($entity->getStatus() !== STATUS['AVAILABLE']) {
throw new \Exception(__METHOD__ . ":에서 오류발생: {$serverEntity->getTitle()}는 사용중입니다."); throw new \Exception(__METHOD__ . ":에서 오류발생: {$serverEntity->getTitle()}는 사용중입니다.");
} }
return $this->model->modify($entity, $formDatas); //SWITCH 정보 수정
//초기화
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
/** @var SWITCHEntity $entity IDE에 entity type알려주기*/
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
return $entity;
} }
public function detachFromServer(ServerEntity $serverEntity): SWITCHEntity public function detachFromServer(ServerEntity $serverEntity): SWITCHEntity
{ {
@ -181,8 +188,14 @@ class SWITCHService extends PartService
if (!$entity instanceof SWITCHEntity) { if (!$entity instanceof SWITCHEntity) {
throw new \Exception("{$serverEntity->getSwitchInfoUID()}에 해당하는 Switch정보를 찾을수없습니다."); throw new \Exception("{$serverEntity->getSwitchInfoUID()}에 해당하는 Switch정보를 찾을수없습니다.");
} }
//Switch정보 수정 //SWITCH 정보 수정
return $this->model->modify($entity, $formDatas); //초기화
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
/** @var SWITCHEntity $entity IDE에 entity type알려주기*/
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
return $entity;
} }
//서버파트관련 작업 //서버파트관련 작업
public function attachToServerPart(ServerPartEntity $serverPartEntity): SWITCHEntity public function attachToServerPart(ServerPartEntity $serverPartEntity): SWITCHEntity
@ -201,7 +214,13 @@ class SWITCHService extends PartService
if ($entity->getStatus() !== STATUS['AVAILABLE']) { if ($entity->getStatus() !== STATUS['AVAILABLE']) {
throw new \Exception(__METHOD__ . ":에서 오류발생: {$entity->getTitle()}는 사용중입니다."); throw new \Exception(__METHOD__ . ":에서 오류발생: {$entity->getTitle()}는 사용중입니다.");
} }
$entity = $this->model->modify($entity, $formDatas); //SWITCH 정보 수정
//초기화
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
/** @var SWITCHEntity $entity IDE에 entity type알려주기*/
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
} }
return $entity; return $entity;
} }
@ -221,7 +240,13 @@ class SWITCHService extends PartService
if (!$entity instanceof SWITCHEntity) { if (!$entity instanceof SWITCHEntity) {
throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 Switch정보를 찾을수없습니다."); throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 Switch정보를 찾을수없습니다.");
} }
//Switch정보 수정 //SWITCH 정보 수정
return $this->model->modify($entity, $formDatas); //초기화
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('modify', $fields);
/** @var SWITCHEntity $entity IDE에 entity type알려주기*/
$entity = $this->modify($entity->getPK(), $this->createDTO($formDatas));
return $entity;
} }
} }