112 lines
3.6 KiB
PHP
112 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Processors\Equipment;
|
|
|
|
use App\Entities\Equipment\ServerEntity;
|
|
use App\Services\Equipment\ServerPartService;
|
|
use App\Services\Equipment\ServerService;
|
|
use App\Services\MyLogService;
|
|
use App\Services\Part\IPService;
|
|
use App\Services\Part\SWITCHService;
|
|
use App\Services\PaymentService;
|
|
use CodeIgniter\Database\BaseConnection;
|
|
use RuntimeException;
|
|
|
|
class ServerV1Processor
|
|
{
|
|
public function __construct(
|
|
private BaseConnection $db,
|
|
private ServerService $service,
|
|
private ServerPartService $serverPartService,
|
|
private IPService $ipService,
|
|
private SWITCHService $switchService,
|
|
private MyLogService $logService,
|
|
) {}
|
|
|
|
public function create(array $formDatas): ServerEntity
|
|
{
|
|
$this->db->transStart();
|
|
//1) 서버정보 생성
|
|
//switch값이 없으면 null처리
|
|
if (array_key_exists('switch', $formDatas) && !$formDatas['switch']) {
|
|
$formDatas['switch'] = null;
|
|
}
|
|
//ip값이 없으면 null처리
|
|
if (array_key_exists('ip', $formDatas) && !$formDatas['ip']) {
|
|
$formDatas['ip'] = null;
|
|
}
|
|
$entity = $this->service->getModel()->create($formDatas);
|
|
//2) 서버의 Type별 서버파트정보등록(서버파트연결 자동등록용)
|
|
$this->serverPartService->attachToServer($entity);
|
|
//3) Switch가 정의되어 있으면
|
|
if ($entity->getSwitch() !== null) { //
|
|
$this->switchService->attachToServer($entity);
|
|
}
|
|
//4) //IP가 정의되어 있으면
|
|
if ($entity->getIP() !== null) {
|
|
$this->ipService->attachToServer($entity);
|
|
}
|
|
//5) Log처리
|
|
$this->logService->create([
|
|
'title' => "[{$entity->getTitle()}] 서버 추가",
|
|
'status' => $entity->getStatus()
|
|
]);
|
|
$this->db->transComplete();
|
|
if ($this->db->transStatus() === false) {
|
|
throw new RuntimeException('트랜잭션 실패');
|
|
}
|
|
return $entity;
|
|
}
|
|
public function modify(ServerEntity $entity, array $formDatas): ServerEntity
|
|
{
|
|
$this->db->transStart();
|
|
//1) 사전처리 작업
|
|
//Switch값이 정의되어 있으면
|
|
$formDatas['switch'] = null; //기본Switch 정보 유지
|
|
$isChangedSwitch = false;
|
|
if (array_key_exists('switch', $formDatas) && !$formDatas['switch']) {
|
|
//기존 Switch값과 다르면
|
|
if ($entity->getSwitch() != $formDatas['switch']) {
|
|
//기존 Switch값이 있으면 해지
|
|
if ($entity->getSwitch() != null) {
|
|
$this->switchService->detachFromServer($entity);
|
|
}
|
|
$isChangedSwitch = true;
|
|
}
|
|
}
|
|
//IP값이 정의되어 있으면
|
|
$formDatas['ip'] = null; //기본IPh 정보 유지
|
|
$isChangedIP = false;
|
|
if (array_key_exists('ip', $formDatas) && !$formDatas['ip']) {
|
|
//기존 IP값과 다르면
|
|
if ($entity->getSwitch() != $formDatas['ip']) {
|
|
//기존 IP값이 있으면 해지
|
|
if ($entity->getIP() != null) {
|
|
$this->ipService->detachFromServer($entity);
|
|
}
|
|
$isChangedIP = true;
|
|
}
|
|
}
|
|
//2) 서버정보 수정
|
|
$entity = $this->service->getModel()->modify($entity, $formDatas);
|
|
//3) Switch값이 있고 신규값인경우
|
|
if ($entity->getSwitch() && $isChangedSwitch) {
|
|
$this->switchService->attachToServer($entity);
|
|
}
|
|
//3) IP값이 있고 신규값인경우
|
|
if ($entity->getIP() && $isChangedIP) {
|
|
$this->ipService->attachToServer($entity);
|
|
}
|
|
//5) Log처리
|
|
$this->logService->create([
|
|
'title' => "[{$entity->getTitle()}] 서버 정보변경",
|
|
'status' => $entity->getStatus()
|
|
]);
|
|
$this->db->transComplete();
|
|
if ($this->db->transStatus() === false) {
|
|
throw new RuntimeException('트랜잭션 실패');
|
|
}
|
|
return $entity;
|
|
}
|
|
}
|