From dca85a817b45308449485cae3b0a13b349b445dc Mon Sep 17 00:00:00 2001 From: "choi.jh" Date: Wed, 27 Aug 2025 19:31:14 +0900 Subject: [PATCH] dbmsv2 init...1 --- .../Admin/Equipment/ServerController.php | 75 ++++++++++++++----- app/Entities/Equipment/ServerEntity.php | 14 +++- app/Helpers/Equipment/ServerHelper.php | 19 +++-- app/Language/en/Equipment/Server.php | 2 +- app/Services/Equipment/IPService.php | 11 --- app/Services/Equipment/PartService.php | 2 +- app/Services/Equipment/ServerService.php | 16 +++- 7 files changed, 94 insertions(+), 45 deletions(-) diff --git a/app/Controllers/Admin/Equipment/ServerController.php b/app/Controllers/Admin/Equipment/ServerController.php index 110f59f..22c98f6 100644 --- a/app/Controllers/Admin/Equipment/ServerController.php +++ b/app/Controllers/Admin/Equipment/ServerController.php @@ -51,6 +51,20 @@ class ServerController extends EquipmentController parent::create_form_process(); } //추가 파트정보 생성 + private function getFormDatasForServerInfo(array $formDatas): array + { + $tempDatas = [ + "code" => $formDatas['code'], + "type" => $formDatas['type'], + "title" => $formDatas['title'], + "price" => $formDatas['price'], + "amount" => $formDatas['amount'], + "manufactur_at" => $formDatas['manufactur_at'], + "format_at" => $formDatas['format_at'], + "status" => $formDatas['status'], + ]; + return $formDatas; + } private function getFormDatasForServerPartInfo(ServerEntity $entity, string $partType): array { $formDatas = [ @@ -75,7 +89,18 @@ class ServerController extends EquipmentController ]; return $formDatas; } - private function createIpInfo(ServerEntity $entity): IPEntity + //생성 + private function createServerPartInfo(ServerEntity $entity): ServerEntity + { + foreach (SERVER['PARTTYPES'] as $partType) { + $serverPartEnty = $this->getService()->getServerPartService()->create( + $this->getFormDatasForServerPartInfo($entity, $partType) + ); + $entity->setServerPartEntity($partType, $serverPartEnty); + } + return $entity; + } + private function setIpInfo(ServerEntity $entity): ServerEntity { //기존 Entity 가져오기 $ipinfo_uid = $this->request->getPost("ipinfo_uid"); @@ -83,31 +108,47 @@ class ServerController extends EquipmentController if (!$ipEntity) { throw new \Exception("{$ipinfo_uid}에 대한 정보를 찾을수 없습니다."); } - return $this->getService()->getIPService()->modify($ipEntity, $this->getFormDatasForIPInfo($entity, $ipEntity::STATUS_OCCUPIED)); + $formDatas = $this->getFormDatasForIPInfo($entity, $ipEntity::STATUS_OCCUPIED); + $ipEntity = $this->getService()->getIPService()->modify($ipEntity, $formDatas); + $entity->addIPEntity($ipEntity); + return $entity; } protected function create_process(array $formDatas): ServerEntity { //코드 패턴체크 - $pattern = env("Server.Prefix.code.pattern", false); - if (!$pattern) { - throw new \Exception(__METHOD__ . "에서 code의 prefix[Server.Prefix.code.pattern]가 정의되지 않았습니다."); - } - if (!array_key_exists('code', $formDatas)) { - throw new \Exception("Server코드가 정의되지 않았습니다"); - } - if (!preg_match($pattern, $formDatas['code'])) { - throw new \Exception("Server코드[{$formDatas['code']}의 형식이 맞지않습니다"); - } - $entity = parent::create_process($formDatas); + $this->getService()->codeCheck($formDatas); + $entity = parent::create_process($this->getFormDatasForServerInfo($formDatas)); //ServerPart정보 생성 후 ServerEntity에 설정 + $entity = $this->createServerPartInfo($entity); + //IP정보 속성 수정후 ServerEntity에 설정 + $entity = $this->setIpInfo($entity); + return $entity; + } + + //수정 + private function modifyServerPartInfo(ServerEntity $entity): ServerEntity + { foreach (SERVER['PARTTYPES'] as $partType) { - $serverPartEnty = $this->getService()->getServerPartService()->create( - $this->getFormDatasForServerPartInfo($entity, $partType) - ); + $serverPartEnty = $entity->getServerPartEntity($partType); + if ($serverPartEnty) { + $serverPartEnty = $this->getService()->getServerPartService()->modify( + $serverPartEnty, + $this->getFormDatasForServerPartInfo($entity, $partType) + ); + } $entity->setServerPartEntity($partType, $serverPartEnty); } + return $entity; + } + protected function modify_process(mixed $entity, array $formDatas): ServerEntity + { + //코드 패턴체크 + $this->getService()->codeCheck($formDatas); + $entity = parent::modify_process($entity, $this->getFormDatasForServerInfo($formDatas)); + //ServerPart정보 생성 후 ServerEntity에 설정 + $entity = $this->modifyServerPartInfo($entity); //IP정보 속성 수정후 ServerEntity에 설정 - $entity->setIPEntities([$this->createIpInfo($entity)]); + $entity = $this->setIpInfo($entity); return $entity; } } diff --git a/app/Entities/Equipment/ServerEntity.php b/app/Entities/Equipment/ServerEntity.php index 7000d5e..8c7ca49 100644 --- a/app/Entities/Equipment/ServerEntity.php +++ b/app/Entities/Equipment/ServerEntity.php @@ -30,17 +30,23 @@ class ServerEntity extends EquipmentEntity } return $this->attributes['serverPartEntities'][$partType]; } - public function setIPEntities(array $entities): void + public function addIPEntity(IPEntity $entity): void { - $this->attributes['ipEntities'] = $entities; + if (!array_key_exists('ipEntities', $this->attributes)) { + $this->attributes['ipEntities'] = []; + } + $this->attributes['ipEntities'][] = $entity; } public function getIPEntities(): array { return $this->attributes['ipEntities'] ?? []; } - public function setCSEntities(array $entities): void + public function addCSEntity(CSEntity $entity): void { - $this->attributes['csEntities'] = $entities; + if (!array_key_exists('csEntities', $this->attributes)) { + $this->attributes['csEntities'] = []; + } + $this->attributes['csEntities'] = $entity; } public function getCSEntities(): array { diff --git a/app/Helpers/Equipment/ServerHelper.php b/app/Helpers/Equipment/ServerHelper.php index 6634b17..f21369a 100644 --- a/app/Helpers/Equipment/ServerHelper.php +++ b/app/Helpers/Equipment/ServerHelper.php @@ -21,16 +21,16 @@ class ServerHelper extends EquipmentHelper break; case 'CPU': case 'RAM': - case 'SOFTWARE': - case 'OS': - case 'serverpartinfo_DB_uid': - $form = $this->form_dropdown_custom($field, old($field) ?? (array_key_exists('entity', $viewDatas) ? $viewDatas['entity']->getServerPartEntity('CPU')->getPK() : null), $viewDatas, $extras); - $form .= " " . form_dropdown("{$field}_cnt", $viewDatas['serverpartinfo_cnt_range'], old("{$field}_cnt") ?? $viewDatas['entity']->$field ?? 1) . "개"; - break; case 'DISK': - $form = $this->form_dropdown_custom($field, old($field) ?? (array_key_exists('entity', $viewDatas) ? $viewDatas['entity']->getPartInfoUID() : null), $viewDatas, $extras); - $form .= " " . form_dropdown("{$field}_cnt", $viewDatas['serverpartinfo_cnt_range'], old("{$field}_cnt") ?? $viewDatas['entity']->$field ?? 1) . "개"; - $form .= form_dropdown("{$field}_extra", $viewDatas['serverpartinfo_extra_options'], old("{$field}_extra") ?? $viewDatas['entity']->$field ?? 1); + echo $field . ":" . $viewDatas['entity']->getServerPartEntity($field)->getPartInfoUID(); + case 'OS': + case 'SOFTWARE': + case 'DB': + $form = $this->form_dropdown_custom($field, old($field) ?? (array_key_exists('entity', $viewDatas) ? $viewDatas['entity']->getServerPartEntity($field)->getPartInfoUID() : null), $viewDatas, $extras); + $form .= " " . form_dropdown("{$field}_cnt", $viewDatas['serverpartinfo_cnt_range'], old("{$field}_cnt") ?? $viewDatas['entity']->getServerPartEntity($field)->getCnt() ?? 1) . "개"; + if (in_array($field, ['DISK'])) { + $form .= form_dropdown("{$field}_extra", $viewDatas['serverpartinfo_extra_options'], old("{$field}_extra") ?? $viewDatas['entity']->getServerPartEntity($field)->getExtra() ?? 1); + } break; case 'ipinfo_uid': case 'csinfo_uid': @@ -51,7 +51,6 @@ class ServerHelper extends EquipmentHelper $value = $value ? date("Y-m-d", strtotime($value)) : ""; break; case 'serverpartinfo': - // dd($viewDatas['entity']); $value = ""; foreach (SERVER['PARTTYPES'] as $partType) { $serverPartEntity = $viewDatas['entity']->getServerPartEntity($partType); diff --git a/app/Language/en/Equipment/Server.php b/app/Language/en/Equipment/Server.php index 40ed112..1f374e4 100644 --- a/app/Language/en/Equipment/Server.php +++ b/app/Language/en/Equipment/Server.php @@ -22,7 +22,7 @@ return [ 'RAM' => "RAM", 'DISK' => "DISK", 'OS' => "OS", - 'serverpartinfo_DB_uid' => "DB", + 'DB' => "DB", 'SOFTWARE' => "기타SW", ], "TITLE" => [ diff --git a/app/Services/Equipment/IPService.php b/app/Services/Equipment/IPService.php index 687217d..64bc90d 100644 --- a/app/Services/Equipment/IPService.php +++ b/app/Services/Equipment/IPService.php @@ -96,17 +96,6 @@ class IPService extends EquipmentService ]; return $this->create($formDatas); } - - //상태변경 - public function setStatus(int $uid, string $status): IPEntity - { - //code의 경우 사용가능/사용중으로 설정작업 - $entity = $this->getEntity($uid); - if (!$entity) { - throw new \Exception("{$uid}에 대한 IP정보를 찾을수 없습니다."); - } - return $this->getModel()->modify($entity, ['status' => $status]); - } //List 검색용 //OrderBy 처리 public function setOrderBy(mixed $field = null, mixed $value = null): void diff --git a/app/Services/Equipment/PartService.php b/app/Services/Equipment/PartService.php index 34f34af..4886582 100644 --- a/app/Services/Equipment/PartService.php +++ b/app/Services/Equipment/PartService.php @@ -52,7 +52,7 @@ class PartService extends EquipmentService //OrderBy 처리 public function setOrderBy(mixed $field = null, mixed $value = null): void { - $this->getModel()->orderBy('type ASC, title ASC'); + $this->getModel()->orderBy('type ASC'); parent::setOrderBy($field, $value); } } diff --git a/app/Services/Equipment/ServerService.php b/app/Services/Equipment/ServerService.php index e6a748c..5ef5385 100644 --- a/app/Services/Equipment/ServerService.php +++ b/app/Services/Equipment/ServerService.php @@ -158,7 +158,7 @@ class ServerService extends EquipmentService case 'OS': $options = $this->getServerPartService()->getFormFieldOption('partinfo_OS_uid'); break; - case 'serverpartinfo_DB_uid': + case 'DB': $options = $this->getServerPartService()->getFormFieldOption('partinfo_DB_uid'); break; case 'SOFTWARE': @@ -182,6 +182,20 @@ class ServerService extends EquipmentService { return $this->getModel()->getLastestCode($format, $default); } + final public function codeCheck(array $formDatas) + { + //코드 패턴체크 + $pattern = env("Server.Prefix.code.pattern", false); + if (!$pattern) { + throw new \Exception(__METHOD__ . "에서 code의 prefix[Server.Prefix.code.pattern]가 정의되지 않았습니다."); + } + if (!array_key_exists('code', $formDatas)) { + throw new \Exception("Server코드가 정의되지 않았습니다"); + } + if (!preg_match($pattern, $formDatas['code'])) { + throw new \Exception("Server코드[{$formDatas['code']}의 형식이 맞지않습니다"); + } + } //List 검색용 //OrderBy 처리 public function setOrderBy(mixed $field = null, mixed $value = null): void