Add method for returning count of dynamic subscribers
[MAILPOET-3219]
This commit is contained in:
@ -12,8 +12,10 @@ use MailPoet\Entities\SegmentEntity;
|
|||||||
use MailPoet\Listing\Handler;
|
use MailPoet\Listing\Handler;
|
||||||
use MailPoet\Segments\DynamicSegments\DynamicSegmentsListingRepository;
|
use MailPoet\Segments\DynamicSegments\DynamicSegmentsListingRepository;
|
||||||
use MailPoet\Segments\DynamicSegments\Exceptions\InvalidFilterException;
|
use MailPoet\Segments\DynamicSegments\Exceptions\InvalidFilterException;
|
||||||
|
use MailPoet\Segments\DynamicSegments\FilterDataMapper;
|
||||||
use MailPoet\Segments\DynamicSegments\SegmentSaveController;
|
use MailPoet\Segments\DynamicSegments\SegmentSaveController;
|
||||||
use MailPoet\Segments\SegmentsRepository;
|
use MailPoet\Segments\SegmentsRepository;
|
||||||
|
use MailPoet\Segments\SegmentSubscribersRepository;
|
||||||
use MailPoet\UnexpectedValueException;
|
use MailPoet\UnexpectedValueException;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
@ -38,11 +40,19 @@ class DynamicSegments extends APIEndpoint {
|
|||||||
/** @var SegmentSaveController */
|
/** @var SegmentSaveController */
|
||||||
private $saveController;
|
private $saveController;
|
||||||
|
|
||||||
|
/** @var SegmentSubscribersRepository */
|
||||||
|
private $segmentSubscribersRepository;
|
||||||
|
|
||||||
|
/** @var FilterDataMapper */
|
||||||
|
private $filterDataMapper;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
Handler $handler,
|
Handler $handler,
|
||||||
DynamicSegmentsListingRepository $dynamicSegmentsListingRepository,
|
DynamicSegmentsListingRepository $dynamicSegmentsListingRepository,
|
||||||
DynamicSegmentsResponseBuilder $segmentsResponseBuilder,
|
DynamicSegmentsResponseBuilder $segmentsResponseBuilder,
|
||||||
SegmentsRepository $segmentsRepository,
|
SegmentsRepository $segmentsRepository,
|
||||||
|
SegmentSubscribersRepository $segmentSubscribersRepository,
|
||||||
|
FilterDataMapper $filterDataMapper,
|
||||||
SegmentSaveController $saveController
|
SegmentSaveController $saveController
|
||||||
) {
|
) {
|
||||||
$this->listingHandler = $handler;
|
$this->listingHandler = $handler;
|
||||||
@ -50,6 +60,8 @@ class DynamicSegments extends APIEndpoint {
|
|||||||
$this->segmentsResponseBuilder = $segmentsResponseBuilder;
|
$this->segmentsResponseBuilder = $segmentsResponseBuilder;
|
||||||
$this->segmentsRepository = $segmentsRepository;
|
$this->segmentsRepository = $segmentsRepository;
|
||||||
$this->saveController = $saveController;
|
$this->saveController = $saveController;
|
||||||
|
$this->segmentSubscribersRepository = $segmentSubscribersRepository;
|
||||||
|
$this->filterDataMapper = $filterDataMapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get($data = []) {
|
public function get($data = []) {
|
||||||
@ -71,6 +83,20 @@ class DynamicSegments extends APIEndpoint {
|
|||||||
return $this->successResponse($this->segmentsResponseBuilder->build($segment));
|
return $this->successResponse($this->segmentsResponseBuilder->build($segment));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getCount($data = []) {
|
||||||
|
try {
|
||||||
|
$filterData = $this->filterDataMapper->map($data);
|
||||||
|
$count = $this->segmentSubscribersRepository->getDynamicSubscribersCount($filterData);
|
||||||
|
return $this->successResponse([
|
||||||
|
'count' => $count,
|
||||||
|
]);
|
||||||
|
} catch (InvalidFilterException $e) {
|
||||||
|
return $this->errorResponse([
|
||||||
|
Error::BAD_REQUEST => $this->getErrorString($e),
|
||||||
|
], [], Response::STATUS_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function save($data) {
|
public function save($data) {
|
||||||
try {
|
try {
|
||||||
$segment = $this->saveController->save($data);
|
$segment = $this->saveController->save($data);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments;
|
namespace MailPoet\Segments;
|
||||||
|
|
||||||
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Entities\SubscriberSegmentEntity;
|
use MailPoet\Entities\SubscriberSegmentEntity;
|
||||||
@ -85,6 +86,18 @@ class SegmentSubscribersRepository {
|
|||||||
return (int)$result;
|
return (int)$result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDynamicSubscribersCount(DynamicSegmentFilterData $data): int {
|
||||||
|
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||||
|
$queryBuilder = $this->entityManager->getConnection()->createQueryBuilder();
|
||||||
|
$queryBuilder
|
||||||
|
->select("COUNT(DISTINCT {$subscribersTable}.id) AS count")
|
||||||
|
->from($subscribersTable, $subscribersTable);
|
||||||
|
$queryBuilder = $this->filterHandler->apply($queryBuilder, $data);
|
||||||
|
$statement = $this->executeQuery($queryBuilder);
|
||||||
|
$result = $statement->fetchColumn();
|
||||||
|
return (int)$result;
|
||||||
|
}
|
||||||
|
|
||||||
public function getSubscribersWithoutSegmentCount(): int {
|
public function getSubscribersWithoutSegmentCount(): int {
|
||||||
$queryBuilder = $this->getSubscribersWithoutSegmentCountQuery();
|
$queryBuilder = $this->getSubscribersWithoutSegmentCountQuery();
|
||||||
return (int)$queryBuilder->getQuery()->getSingleScalarResult();
|
return (int)$queryBuilder->getQuery()->getSingleScalarResult();
|
||||||
|
Reference in New Issue
Block a user