Cache homepage subscribers stats
[MAILPOET-5180]
This commit is contained in:
committed by
Aschepikov
parent
d7fd11387f
commit
4cd1667146
@@ -4,10 +4,14 @@ namespace MailPoet\Subscribers;
|
||||
|
||||
use MailPoet\Cache\TransientCache;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\InvalidStateException;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\Segments\SegmentSubscribersRepository;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
use MailPoet\Tags\TagRepository;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
|
||||
class SubscribersCountsController {
|
||||
/** @var SegmentsRepository */
|
||||
@@ -16,23 +20,33 @@ class SubscribersCountsController {
|
||||
/** @var SegmentSubscribersRepository */
|
||||
private $segmentSubscribersRepository;
|
||||
|
||||
/** @var SubscribersRepository */
|
||||
private $subscribersRepository;
|
||||
|
||||
/** @var TagRepository */
|
||||
private $tagRepository;
|
||||
|
||||
/** @var TransientCache */
|
||||
private $transientCache;
|
||||
|
||||
/** @var WPFunctions */
|
||||
private $wp;
|
||||
|
||||
public function __construct(
|
||||
SegmentsRepository $segmentsRepository,
|
||||
SegmentSubscribersRepository $segmentSubscribersRepository,
|
||||
SubscribersRepository $subscribersRepository,
|
||||
TagRepository $subscriberTagRepository,
|
||||
TransientCache $transientCache
|
||||
TransientCache $transientCache,
|
||||
WPFunctions $wp
|
||||
) {
|
||||
|
||||
$this->segmentSubscribersRepository = $segmentSubscribersRepository;
|
||||
$this->transientCache = $transientCache;
|
||||
$this->segmentsRepository = $segmentsRepository;
|
||||
$this->subscribersRepository = $subscribersRepository;
|
||||
$this->tagRepository = $subscriberTagRepository;
|
||||
$this->wp = $wp;
|
||||
}
|
||||
|
||||
public function getSubscribersWithoutSegmentStatisticsCount(): array {
|
||||
@@ -71,6 +85,14 @@ class SubscribersCountsController {
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getHomepageStatistics(): array {
|
||||
$result = $this->transientCache->getItem(TransientCache::SUBSCRIBERS_HOMEPAGE_STATISTICS_COUNT_KEY, 0) ?? [];
|
||||
if (!$result) {
|
||||
$result = $this->recalculateHomepageStatisticsCache();
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function recalculateSegmentGlobalStatusStatisticsCache(SegmentEntity $segment): array {
|
||||
$result = $this->segmentSubscribersRepository->getSubscribersGlobalStatusStatisticsCount($segment);
|
||||
$this->transientCache->setItem(
|
||||
@@ -97,6 +119,22 @@ class SubscribersCountsController {
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function recalculateHomepageStatisticsCache(): array {
|
||||
$thirtyDaysAgo = Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))->subDays(30);
|
||||
$result = [];
|
||||
$result['listsDataSubscribed'] = $this->subscribersRepository->getListLevelCountsOfSubscribedAfter($thirtyDaysAgo);
|
||||
$result['listsDataUnsubscribed'] = $this->subscribersRepository->getListLevelCountsOfUnsubscribedAfter($thirtyDaysAgo);
|
||||
$result['subscribedCount'] = $this->subscribersRepository->getCountOfLastSubscribedAfter($thirtyDaysAgo);
|
||||
$result['unsubscribedCount'] = $this->subscribersRepository->getCountOfUnsubscribedAfter($thirtyDaysAgo);
|
||||
$result['subscribedSubscribersCount'] = $this->subscribersRepository->getCountOfSubscribersForStates([SubscriberEntity::STATUS_SUBSCRIBED]);
|
||||
$this->transientCache->setItem(
|
||||
TransientCache::SUBSCRIBERS_HOMEPAGE_STATISTICS_COUNT_KEY,
|
||||
$result,
|
||||
0
|
||||
);
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function removeRedundancyFromStatisticsCache() {
|
||||
$segments = $this->segmentsRepository->findAll();
|
||||
$segmentIds = array_map(function (SegmentEntity $segment): int {
|
||||
|
Reference in New Issue
Block a user