RollbackCommand   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 20
dl 0
loc 53
rs 10
c 0
b 0
f 0
wmc 9

3 Methods

Rating   Name   Duplication   Size   Complexity  
B execute() 0 30 7
A defineDescription() 0 3 1
A defineOption() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of Biurad opensource projects.
7
 *
8
 * PHP version 7.2 and above required
9
 *
10
 * @author    Divine Niiquaye Ibok <[email protected]>
11
 * @copyright 2019 Biurad Group (https://biurad.com/)
12
 * @license   https://opensource.org/licenses/BSD-3-Clause License
13
 *
14
 * For the full copyright and license information, please view the LICENSE
15
 * file that was distributed with this source code.
16
 */
17
18
namespace Biurad\Cycle\Commands\Migrations;
19
20
use Symfony\Component\Console\Input\InputInterface;
21
use Symfony\Component\Console\Input\InputOption;
22
use Symfony\Component\Console\Output\OutputInterface;
23
use Symfony\Component\Console\Style\SymfonyStyle;
24
25
final class RollbackCommand extends AbstractCommand
26
{
27
    protected static $defaultName = 'migrations:rollback';
28
29
    /**
30
     * {@inheritdoc}
31
     */
32
    protected function defineDescription(): string
33
    {
34
        return 'Rollback one (default) or multiple migrations';
35
    }
36
37
    /**
38
     * {@inheritdoc}
39
     */
40
    protected function defineOption(): array
41
    {
42
        return [new InputOption('all', 'a', InputOption::VALUE_NONE, 'Rollback all executed migrations')];
43
    }
44
45
    /**
46
     * {@inheritdoc}
47
     */
48
    protected function execute(InputInterface $input, OutputInterface $output): int
49
    {
50
        $io = new SymfonyStyle($input, $output);
51
52
        if (!$this->verifyConfigured($output) || !$this->verifyEnvironment($input, $io)) {
53
            //Making sure we can safely migrate in this environment
54
            return 1;
55
        }
56
57
        $found = false;
58
        $count = !$input->getOption('all') ? 1 : \PHP_INT_MAX;
59
60
        while ($count > 0 && ($migration = $this->migrator->rollback())) {
61
            $found = true;
62
            $count--;
63
64
            $io->newLine();
65
            $output->write(
66
                \sprintf(
67
                    "<info>Migration <comment>%s</comment> was successfully rolled back.</info>\n",
68
                    $migration->getState()->getName()
69
                )
70
            );
71
        }
72
73
        if (!$found) {
74
            $io->error('No executed migrations were found.');
75
        }
76
77
        return 0;
78
    }
79
}
80