Use cached WordPress and WooCommerce segment entities

This commit is contained in:
Jan Jakes
2024-09-04 13:53:55 +02:00
committed by Jan Jakeš
parent b512079ce2
commit a29233407f

View File

@@ -71,8 +71,18 @@ class SegmentsRepository extends Repository {
} }
public function getWPUsersSegment(): SegmentEntity { public function getWPUsersSegment(): SegmentEntity {
$segment = $this->findOneBy(['type' => SegmentEntity::TYPE_WP_USERS]); $cached = current(
array_filter(
$this->getAllFromIdentityMap(),
fn(SegmentEntity $segment) => $segment->getType() === SegmentEntity::TYPE_WP_USERS
)
);
if ($cached) {
return $cached;
}
$segment = $this->findOneBy(['type' => SegmentEntity::TYPE_WP_USERS]);
if (!$segment) { if (!$segment) {
// create the wp users segment // create the wp users segment
$segment = new SegmentEntity( $segment = new SegmentEntity(
@@ -80,15 +90,24 @@ class SegmentsRepository extends Repository {
SegmentEntity::TYPE_WP_USERS, SegmentEntity::TYPE_WP_USERS,
__('This list contains all of your WordPress users.', 'mailpoet') __('This list contains all of your WordPress users.', 'mailpoet')
); );
$this->entityManager->persist($segment); $this->entityManager->persist($segment);
$this->entityManager->flush(); $this->entityManager->flush();
} }
return $segment; return $segment;
} }
public function getWooCommerceSegment(): SegmentEntity { public function getWooCommerceSegment(): SegmentEntity {
$cached = current(
array_filter(
$this->getAllFromIdentityMap(),
fn(SegmentEntity $segment) => $segment->getType() === SegmentEntity::TYPE_WC_USERS
)
);
if ($cached) {
return $cached;
}
$segment = $this->findOneBy(['type' => SegmentEntity::TYPE_WC_USERS]); $segment = $this->findOneBy(['type' => SegmentEntity::TYPE_WC_USERS]);
if (!$segment) { if (!$segment) {
// create the WooCommerce customers segment // create the WooCommerce customers segment