Passed
Push — master ( 7bc374...cf39f3 )
by Arthur
05:05
created

SeedCommand   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Test Coverage

Coverage 82.86%

Importance

Changes 0
Metric Value
eloc 33
dl 0
loc 68
ccs 29
cts 35
cp 0.8286
rs 10
c 0
b 0
f 0
wmc 11

3 Methods

Rating   Name   Duplication   Size   Complexity  
B handle() 0 41 9
A __construct() 0 4 1
A getSeeders() 0 5 1
1
<?php
2
3
namespace Foundation\Console;
4
5
use Foundation\Exceptions\Exception;
6
use Foundation\Services\BootstrapRegistrarService;
7
use Illuminate\Database\ConnectionResolverInterface as Resolver;
8
use Illuminate\Database\Eloquent\Model;
9
10
class SeedCommand extends \Illuminate\Database\Console\Seeds\SeedCommand
11
{
12
    /**
13
     * The service that registers all module entities.
14
     *
15
     * @var BootstrapRegistrarService
16
     */
17
    protected $service;
18
19 30
    public function __construct(Resolver $resolver, BootstrapRegistrarService $service)
20
    {
21 30
        parent::__construct($resolver);
22 30
        $this->service = $service;
23 30
    }
24
25
    /**
26
     * Execute the console command.
27
     *
28
     * @return void
29
     */
30 30
    public function handle()
31
    {
32 30
        if (!$this->confirmToProceed()) {
33
            return;
34
        }
35
36 30
        $this->resolver->setDefaultConnection($this->getDatabase());
37
38
        Model::unguarded(function () {
39 30
            $seeders = $this->getSeeders();
40
41 30
            $priorities = [];
42 30
            $prioritySeeders = [];
43 30
            $nonPrioritySeeders = [];
44 30
            foreach ($seeders as $seeder) {
45 30
                $priority = get_class_property($seeder, 'priority');
46 30
                if (!is_int($priority) && $priority !== null) {
47
                    throw new Exception('Priority on seeder must be integer');
48 30
                } elseif (in_array($priority, $priorities)) {
49
                    throw new Exception("Duplicate priority on seeder $seeder with $prioritySeeders[$priority]");
50 30
                } elseif ($priority === null) {
51
                    $nonPrioritySeeders[] = $seeder;
52
                } else {
53 30
                    $priorities[] = $priority;
54 30
                    $prioritySeeders[$priority] = $seeder;
55
                }
56
            }
57 30
            ksort($prioritySeeders);
58
59 30
            foreach ($prioritySeeders as $priority => $seeder) {
60 30
                $seeder = $this->laravel->make($seeder);
61 30
                $seeder->__invoke();
62
            }
63
64 30
            foreach ($nonPrioritySeeders as $seeder) {
65
                $seeder = $this->laravel->make($seeder);
66
                $seeder->__invoke();
67
            }
68 30
        });
69
70 30
        $this->info('Database seeding completed successfully.');
71 30
    }
72
73 30
    protected function getSeeders(): array
74
    {
75 30
        $this->service = $this->laravel->make(BootstrapRegistrarService::class);
76
77 30
        return $this->service->getSeeders() ?? [];
78
    }
79
}
80