ElasticsearchMigration::dispatchStatus()   A
last analyzed

Complexity

Conditions 5
Paths 8

Size

Total Lines 19
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 5

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 19
ccs 15
cts 15
cp 1
rs 9.4555
c 0
b 0
f 0
cc 5
nc 8
nop 1
crap 5
1
<?php
2
namespace Triadev\EsMigration\Business\Repository;
3
4
use Illuminate\Database\Eloquent\Collection;
5
use Illuminate\Database\Eloquent\ModelNotFoundException;
6
use Triadev\EsMigration\Business\Events\MigrationDone;
7
use Triadev\EsMigration\Business\Events\MigrationError;
8
use Triadev\EsMigration\Business\Events\MigrationRunning;
9
use Triadev\EsMigration\Business\Mapper\MigrationStatus;
10
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationContract;
11
12
class ElasticsearchMigration implements ElasticsearchMigrationContract
13
{
14
    /**
15
     * @inheritdoc
16
     */
17 27
    public function createOrUpdate(
18
        string $migration,
19
        int $status = MigrationStatus::MIGRATION_STATUS_WAIT,
20
        ?string $error = null
21
    ): \Triadev\EsMigration\Models\Entity\ElasticsearchMigration {
22 27
        $dbMigration = $this->find($migration);
23
        
24 27
        if (!$dbMigration) {
25 27
            $dbMigration = new \Triadev\EsMigration\Models\Entity\ElasticsearchMigration();
26 27
            $dbMigration->migration = $migration;
27
        }
28
        
29 27
        if ((new MigrationStatus())->isMigrationStatusValid($status)) {
30 27
            $dbMigration->status = $status;
31 27
            $dbMigration->error = $error;
32
        }
33
        
34 27
        $dbMigration->saveOrFail();
35
        
36 27
        $this->dispatchStatus($dbMigration);
37
        
38 27
        return $dbMigration;
39
    }
40
    
41
    /**
42
     * @inheritdoc
43
     */
44 29
    public function find(string $migration): ?\Triadev\EsMigration\Models\Entity\ElasticsearchMigration
45
    {
46
        try {
47 29
            return \Triadev\EsMigration\Models\Entity\ElasticsearchMigration::where('migration', $migration)
48 29
                ->orderBy('created_at', 'desc')
49 29
                ->firstOrFail();
50 29
        } catch (ModelNotFoundException $e) {
51 29
            return null;
52
        }
53
    }
54
    
55
    /**
56
     * @inheritdoc
57
     */
58 18
    public function delete(string $migration)
59
    {
60 18
        if ($migration = $this->find($migration)) {
61 2
            $migration->delete();
62
        }
63 18
    }
64
    
65
    /**
66
     * @inheritdoc
67
     */
68 2
    public function all(array $columns = ['*']): Collection
69
    {
70 2
        return \Triadev\EsMigration\Models\Entity\ElasticsearchMigration::all($columns);
71
    }
72
    
73 27
    private function dispatchStatus(\Triadev\EsMigration\Models\Entity\ElasticsearchMigration $migration)
74
    {
75 27
        switch ($migration->status) {
76 27
            case MigrationStatus::MIGRATION_STATUS_RUNNING:
77 9
                $event = new MigrationRunning($migration);
78 9
                break;
79 27
            case MigrationStatus::MIGRATION_STATUS_DONE:
80 5
                $event = new MigrationDone($migration);
81 5
                break;
82 27
            case MigrationStatus::MIGRATION_STATUS_ERROR:
83 3
                $event = new MigrationError($migration);
84 3
                break;
85
            default:
86 27
                $event = null;
87 27
                break;
88
        }
89
        
90 27
        if ($event) {
91 9
            event($event);
92
        }
93 27
    }
94
}
95