Move method for create or update Segment to repository

[MAILPOET-3167]
This commit is contained in:
Jan Lysý
2020-12-03 15:01:52 +01:00
committed by Veljko V
parent 37cef4fb34
commit 79abec8f13
2 changed files with 26 additions and 33 deletions

View File

@ -4,7 +4,6 @@ namespace MailPoet\Segments;
use InvalidArgumentException; use InvalidArgumentException;
use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SegmentEntity;
use MailPoet\NotFoundException;
class SegmentSaveController { class SegmentSaveController {
/** @var SegmentsRepository */ /** @var SegmentsRepository */
@ -19,8 +18,11 @@ class SegmentSaveController {
public function save(array $data = []): SegmentEntity { public function save(array $data = []): SegmentEntity {
$this->checkSegmenUniqueName($data['name'] ?? ''); $this->checkSegmenUniqueName($data['name'] ?? '');
$segment = $this->createOrUpdateSegment($data); $id = isset($data['id']) ? (int)$data['id'] : null;
return $segment; $name = $data['name'] ?? '';
$description = $data['description'] ?? '';
return $this->segmentsRepository->createOrUpdate($name, $description, $id);
} }
private function checkSegmenUniqueName(string $name): void { private function checkSegmenUniqueName(string $name): void {
@ -29,34 +31,4 @@ class SegmentSaveController {
throw new InvalidArgumentException("Segment with name: '{$name}' already exists."); throw new InvalidArgumentException("Segment with name: '{$name}' already exists.");
} }
} }
private function createOrUpdateSegment(array $data): SegmentEntity {
$name = $data['name'] ?? '';
$description = $data['description'] ?? '';
if (isset($data['id'])) {
$segment = $this->getSegment((int)$data['id']);
$segment->setName($name);
$segment->setDescription($description);
} else {
$segment = new SegmentEntity(
$name,
SegmentEntity::TYPE_DEFAULT,
$description
);
$this->segmentsRepository->persist($segment);
}
$this->segmentsRepository->flush();
return $segment;
}
private function getSegment(int $segmentId): SegmentEntity {
$segment = $this->segmentsRepository->findOneById($segmentId);
if (!$segment) {
throw new NotFoundException();
}
return $segment;
}
} }

View File

@ -4,6 +4,7 @@ namespace MailPoet\Segments;
use MailPoet\Doctrine\Repository; use MailPoet\Doctrine\Repository;
use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SegmentEntity;
use MailPoet\NotFoundException;
/** /**
* @extends Repository<SegmentEntity> * @extends Repository<SegmentEntity>
@ -31,4 +32,24 @@ class SegmentsRepository extends Repository {
} }
return $countMap; return $countMap;
} }
public function createOrUpdate(
string $name,
string $description = '',
?int $id = null
): SegmentEntity {
if ($id) {
$segment = $this->findOneById($id);
if (!$segment instanceof SegmentEntity) {
throw new NotFoundException("Segment with ID [{$id}] was not found.");
}
$segment->setName($name);
$segment->setDescription($description);
} else {
$segment = new SegmentEntity($name, SegmentEntity::TYPE_DEFAULT, $description);
$this->persist($segment);
}
$this->flush();
return $segment;
}
} }