2014-04-07 15:25:16 +02:00
|
|
|
<?php
|
2020-03-10 11:13:12 +01:00
|
|
|
|
2021-04-20 01:18:17 +02:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
2014-04-07 15:25:16 +02:00
|
|
|
namespace DigiComp\Sequence\Command;
|
|
|
|
|
2021-09-22 11:34:34 +02:00
|
|
|
use DigiComp\Sequence\Domain\Model\SequenceEntry;
|
|
|
|
use DigiComp\Sequence\Service\Exception\InvalidSourceException;
|
2017-03-13 16:59:04 +01:00
|
|
|
use DigiComp\Sequence\Service\SequenceGenerator;
|
2021-09-21 10:39:03 +02:00
|
|
|
use Doctrine\DBAL\Driver\Exception as DoctrineDBALDriverException;
|
|
|
|
use Doctrine\DBAL\Exception as DoctrineDBALException;
|
2021-06-29 14:23:25 +02:00
|
|
|
use Doctrine\ORM\EntityManagerInterface;
|
2017-03-13 16:59:04 +01:00
|
|
|
use Neos\Flow\Annotations as Flow;
|
|
|
|
use Neos\Flow\Cli\CommandController;
|
2014-04-07 15:25:16 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @Flow\Scope("singleton")
|
|
|
|
*/
|
2016-06-24 20:35:59 +02:00
|
|
|
class SequenceCommandController extends CommandController
|
2016-06-24 19:40:43 +02:00
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @Flow\Inject
|
2021-08-26 10:50:00 +02:00
|
|
|
* @var SequenceGenerator
|
2016-06-24 19:40:43 +02:00
|
|
|
*/
|
|
|
|
protected $sequenceGenerator;
|
2014-04-07 15:25:16 +02:00
|
|
|
|
2021-06-29 14:23:25 +02:00
|
|
|
/**
|
|
|
|
* @Flow\Inject
|
|
|
|
* @var EntityManagerInterface
|
|
|
|
*/
|
|
|
|
protected $entityManager;
|
|
|
|
|
2016-06-24 19:40:43 +02:00
|
|
|
/**
|
2021-09-22 11:34:34 +02:00
|
|
|
* Set last number for sequence generator.
|
2016-06-24 19:40:43 +02:00
|
|
|
*
|
|
|
|
* @param string $type
|
2021-09-22 11:34:34 +02:00
|
|
|
* @param int $number
|
|
|
|
* @throws DoctrineDBALDriverException
|
|
|
|
* @throws DoctrineDBALException
|
|
|
|
* @throws InvalidSourceException
|
2016-06-24 19:40:43 +02:00
|
|
|
*/
|
2021-09-22 11:34:34 +02:00
|
|
|
public function setLastNumberForCommand(string $type, int $number): void
|
2016-06-24 19:40:43 +02:00
|
|
|
{
|
2021-09-22 11:34:34 +02:00
|
|
|
if ($this->sequenceGenerator->setLastNumberFor($type, $number)) {
|
|
|
|
$this->outputLine('Last number successfully set.');
|
|
|
|
} else {
|
|
|
|
$this->outputLine('Failed to set last number.');
|
|
|
|
}
|
2016-06-24 19:40:43 +02:00
|
|
|
}
|
2016-06-24 20:35:59 +02:00
|
|
|
|
2021-06-29 14:23:25 +02:00
|
|
|
/**
|
2021-09-22 11:34:34 +02:00
|
|
|
* Clean up sequence table.
|
|
|
|
*
|
|
|
|
* @param string[] $types
|
2021-09-21 10:39:03 +02:00
|
|
|
* @throws DoctrineDBALDriverException
|
|
|
|
* @throws DoctrineDBALException
|
2021-09-22 11:34:34 +02:00
|
|
|
* @throws InvalidSourceException
|
2021-06-29 14:23:25 +02:00
|
|
|
*/
|
2021-09-22 11:34:34 +02:00
|
|
|
public function cleanUpCommand(array $types = []): void
|
2021-06-29 14:23:25 +02:00
|
|
|
{
|
2021-09-22 11:34:34 +02:00
|
|
|
if ($types === []) {
|
|
|
|
foreach (
|
|
|
|
$this
|
|
|
|
->entityManager
|
|
|
|
->createQuery('SELECT DISTINCT(se.type) type FROM ' . SequenceEntry::class . ' se')
|
|
|
|
->execute()
|
|
|
|
as $result
|
|
|
|
) {
|
|
|
|
$types[] = $result['type'];
|
2021-06-29 14:23:25 +02:00
|
|
|
}
|
|
|
|
}
|
2021-09-22 11:34:34 +02:00
|
|
|
|
|
|
|
foreach ($types as $type) {
|
|
|
|
$rowCount = $this
|
|
|
|
->entityManager
|
|
|
|
->createQuery('DELETE FROM ' . SequenceEntry::class . ' se WHERE se.type = ?0 AND se.number < ?1')
|
|
|
|
->execute([$type, $this->sequenceGenerator->getLastNumberFor($type)]);
|
|
|
|
|
|
|
|
$this->outputLine('Deleted ' . $rowCount . ' row(s) for type "' . $type . '".');
|
2021-06-29 14:23:25 +02:00
|
|
|
}
|
|
|
|
}
|
2014-04-07 15:25:16 +02:00
|
|
|
}
|