Add endpoint to retrieve count for multiple segments

MAILPOET-5510
This commit is contained in:
John Oleksowicz
2023-08-30 15:19:51 -05:00
committed by Aschepikov
parent 6b2b35b541
commit a2d04e93c5

View File

@@ -20,6 +20,7 @@ use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
use MailPoet\Segments\SegmentListingRepository;
use MailPoet\Segments\SegmentSaveController;
use MailPoet\Segments\SegmentsRepository;
use MailPoet\Segments\SegmentSubscribersRepository;
use MailPoet\Segments\WooCommerce;
use MailPoet\Segments\WP;
use MailPoet\Subscribers\SubscribersRepository;
@@ -63,12 +64,16 @@ class Segments extends APIEndpoint {
/** @var FormsRepository */
private $formsRepository;
/** @var SegmentSubscribersRepository */
private $segmentSubscribersRepository;
public function __construct(
Listing\Handler $listingHandler,
SegmentsRepository $segmentsRepository,
SegmentListingRepository $segmentListingRepository,
SegmentsResponseBuilder $segmentsResponseBuilder,
SegmentSaveController $segmentSavecontroller,
SegmentSubscribersRepository $segmentSubscribersRepository,
SubscribersRepository $subscribersRepository,
WooCommerce $wooCommerce,
WP $wpSegment,
@@ -87,6 +92,7 @@ class Segments extends APIEndpoint {
$this->newsletterSegmentRepository = $newsletterSegmentRepository;
$this->cronWorkerScheduler = $cronWorkerScheduler;
$this->formsRepository = $formsRepository;
$this->segmentSubscribersRepository = $segmentSubscribersRepository;
}
public function get($data = []) {
@@ -294,6 +300,20 @@ class Segments extends APIEndpoint {
return $this->successResponse(null, ['count' => $count]);
}
public function subscriberCount($data = []) {
$segmentIds = $data['segmentIds'] ?? [];
if (empty($segmentIds)) {
return $this->errorResponse([
APIError::BAD_REQUEST => __('No segment IDs provided.', 'mailpoet'),
]);
}
$filterSegmentId = $data['filterSegmentId'] ?? null;
$status = $data['status'] ?? SubscriberEntity::STATUS_SUBSCRIBED;
$response['count'] = $this->segmentSubscribersRepository->getSubscribersCountBySegmentIds($segmentIds, $status, $filterSegmentId);
return $this->successResponse($response);
}
private function isTrashOrRestoreAllowed(SegmentEntity $segment): bool {
$allowedSegmentTypes = [
SegmentEntity::TYPE_DEFAULT,