Add getAutomationsInTimespan method to controller

[MAILPOET-5091]
This commit is contained in:
David Remer
2023-06-28 10:52:06 +03:00
committed by Aschepikov
parent 5e4631ec9d
commit 8b81016814
4 changed files with 25 additions and 22 deletions

View File

@ -8,8 +8,7 @@ use MailPoet\Automation\Integrations\MailPoet\Actions\SendEmailAction;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
class AutomationEmailController { class AutomationTimeSpanController {
/** @var AutomationStorage */ /** @var AutomationStorage */
private $automationStorage; private $automationStorage;
@ -25,13 +24,7 @@ class AutomationEmailController {
$this->newslettersRepository = $newslettersRepository; $this->newslettersRepository = $newslettersRepository;
} }
/** public function getAutomationsInTimespan(Automation $automation, \DateTimeImmutable $after, \DateTimeImmutable $before): array {
* @param Automation $automation
* @param \DateTimeImmutable $after
* @param \DateTimeImmutable $before
* @return NewsletterEntity[]
*/
public function getAutomationEmailsInTimeSpan(Automation $automation, \DateTimeImmutable $after, \DateTimeImmutable $before): array {
$automationVersions = $this->automationStorage->getAutomationVersionDates($automation->getId()); $automationVersions = $this->automationStorage->getAutomationVersionDates($automation->getId());
usort( usort(
$automationVersions, $automationVersions,
@ -55,8 +48,18 @@ class AutomationEmailController {
$versionIds[] = (int)$automationVersion['id']; $versionIds[] = (int)$automationVersion['id'];
} }
$automations = $this->automationStorage->getAutomationWithDifferentVersions($versionIds); return count($versionIds) > 0 ? $this->automationStorage->getAutomationWithDifferentVersions($versionIds) : [];
return $this->getEmailsFromAutomations($automations); }
/**
* @param Automation $automation
* @param \DateTimeImmutable $after
* @param \DateTimeImmutable $before
* @return NewsletterEntity[]
*/
public function getAutomationEmailsInTimeSpan(Automation $automation, \DateTimeImmutable $after, \DateTimeImmutable $before): array {
$automations = $this->getAutomationsInTimespan($automation, $after, $before);
return count($automations) > 0 ? $this->getEmailsFromAutomations($automations) : [];
} }
/** /**

View File

@ -21,24 +21,24 @@ class OverviewStatisticsController {
/** @var NewsletterUrl */ /** @var NewsletterUrl */
private $newsletterUrl; private $newsletterUrl;
/** @var AutomationEmailController */ /** @var AutomationTimeSpanController */
private $automationEmailController; private $automationTimeSpanController;
public function __construct( public function __construct(
NewslettersRepository $newslettersRepository, NewslettersRepository $newslettersRepository,
NewsletterStatisticsRepository $newsletterStatisticsRepository, NewsletterStatisticsRepository $newsletterStatisticsRepository,
NewsletterUrl $newsletterUrl, NewsletterUrl $newsletterUrl,
AutomationEmailController $automationEmailController AutomationTimeSpanController $automationTimeSpanController
) { ) {
$this->newslettersRepository = $newslettersRepository; $this->newslettersRepository = $newslettersRepository;
$this->newsletterStatisticsRepository = $newsletterStatisticsRepository; $this->newsletterStatisticsRepository = $newsletterStatisticsRepository;
$this->newsletterUrl = $newsletterUrl; $this->newsletterUrl = $newsletterUrl;
$this->automationEmailController = $automationEmailController; $this->automationTimeSpanController = $automationTimeSpanController;
} }
public function getStatisticsForAutomation(Automation $automation, QueryWithCompare $query): array { public function getStatisticsForAutomation(Automation $automation, QueryWithCompare $query): array {
$currentEmails = $this->automationEmailController->getAutomationEmailsInTimeSpan($automation, $query->getAfter(), $query->getBefore()); $currentEmails = $this->automationTimeSpanController->getAutomationEmailsInTimeSpan($automation, $query->getAfter(), $query->getBefore());
$previousEmails = $this->automationEmailController->getAutomationEmailsInTimeSpan($automation, $query->getCompareWithAfter(), $query->getCompareWithBefore()); $previousEmails = $this->automationTimeSpanController->getAutomationEmailsInTimeSpan($automation, $query->getCompareWithAfter(), $query->getCompareWithBefore());
$data = [ $data = [
'sent' => ['current' => 0, 'previous' => 0], 'sent' => ['current' => 0, 'previous' => 0],
'opened' => ['current' => 0, 'previous' => 0], 'opened' => ['current' => 0, 'previous' => 0],

View File

@ -199,7 +199,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Analytics::class)->setPublic(true); $container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Analytics::class)->setPublic(true);
$container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Endpoints\AutomationFlowEndpoint::class)->setPublic(true); $container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Endpoints\AutomationFlowEndpoint::class)->setPublic(true);
$container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Endpoints\OverviewEndpoint::class)->setPublic(true); $container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Endpoints\OverviewEndpoint::class)->setPublic(true);
$container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Controller\AutomationEmailController::class)->setPublic(true); $container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Controller\AutomationTimeSpanController::class)->setPublic(true);
$container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Controller\OverviewStatisticsController::class)->setPublic(true); $container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Controller\OverviewStatisticsController::class)->setPublic(true);
$container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Controller\FreeOrderController::class)->setPublic(true); $container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Controller\FreeOrderController::class)->setPublic(true);
$container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Factories\OrderControllerFactory::class)->setPublic(true); $container->autowire(\MailPoet\Automation\Integrations\MailPoet\Analytics\Factories\OrderControllerFactory::class)->setPublic(true);

View File

@ -7,13 +7,13 @@ use MailPoet\Automation\Engine\Data\NextStep;
use MailPoet\Automation\Engine\Data\Step; use MailPoet\Automation\Engine\Data\Step;
use MailPoet\Automation\Engine\Storage\AutomationStorage; use MailPoet\Automation\Engine\Storage\AutomationStorage;
use MailPoet\Automation\Integrations\MailPoet\Actions\SendEmailAction; use MailPoet\Automation\Integrations\MailPoet\Actions\SendEmailAction;
use MailPoet\Automation\Integrations\MailPoet\Analytics\Controller\AutomationEmailController; use MailPoet\Automation\Integrations\MailPoet\Analytics\Controller\AutomationTimeSpanController;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
class AutomationEmailControllerTest extends \MailPoetTest { class AutomationTimeSpanControllerTest extends \MailPoetTest {
/** @var AutomationEmailController */ /** @var AutomationTimeSpanController */
private $testee; private $testee;
/** @var NewslettersRepository */ /** @var NewslettersRepository */
@ -23,7 +23,7 @@ class AutomationEmailControllerTest extends \MailPoetTest {
private $automationStorage; private $automationStorage;
public function _before() { public function _before() {
$this->testee = $this->diContainer->get(AutomationEmailController::class); $this->testee = $this->diContainer->get(AutomationTimeSpanController::class);
$this->newsletterRepository = $this->diContainer->get(NewslettersRepository::class); $this->newsletterRepository = $this->diContainer->get(NewslettersRepository::class);
$this->automationStorage = $this->diContainer->get(AutomationStorage::class); $this->automationStorage = $this->diContainer->get(AutomationStorage::class);
} }