DatabaseMigrationRepository::getSchemaManager()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2.0185

Importance

Changes 0
Metric Value
cc 2
eloc 6
c 0
b 0
f 0
nc 2
nop 0
dl 0
loc 12
ccs 5
cts 6
cp 0.8333
crap 2.0185
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace LaravelFreelancerNL\Aranguent\Migrations;
6
7
use ArangoClient\Exceptions\ArangoException;
8
use ArangoClient\Schema\SchemaManager;
9
use Illuminate\Database\ConnectionResolverInterface as IlluminateResolver;
10
use Illuminate\Database\Migrations\DatabaseMigrationRepository as IlluminateDatabaseMigrationRepository;
11
use Illuminate\Database\Query\Builder as IlluminateQueryBuilder;
12
use LaravelFreelancerNL\Aranguent\Connection;
13
use LaravelFreelancerNL\Aranguent\Console\Concerns\ArangoCommands;
14
use LaravelFreelancerNL\Aranguent\Exceptions\AranguentException;
15
use LaravelFreelancerNL\Aranguent\Query\Builder;
16
17
class DatabaseMigrationRepository extends IlluminateDatabaseMigrationRepository
18
{
19
    use ArangoCommands;
20
21
    /**
22
     * The name of the migration collection.
23
     *
24
     * @var string
25
     */
26
    protected $table;
27
28
    /**
29
     * Create a new database migration repository instance.
30
     */
31 11
    public function __construct(IlluminateResolver $resolver, string $table)
32
    {
33 11
        parent::__construct($resolver, $table);
34
    }
35
36 3
    protected function getSchemaManager(): SchemaManager
37
    {
38 3
        $connection = $this->getConnection();
39
        assert($connection instanceof Connection);
40
41 3
        $arangoClient = $connection->getArangoClient();
42
43 3
        if ($arangoClient === null) {
44
            throw new AranguentException('No arangodb client set.');
45
        }
46
47 3
        return $arangoClient->schema();
48
    }
49
50
    /**
51
     * Create the migration repository data store.
52
     *
53
     * @return void
54
     */
55 2
    public function createRepository()
56
    {
57 2
        if ($this->useFallback()) {
58
            parent::createRepository();
59
            return;
60
        }
61
62 2
        $schemaManager = $this->getSchemaManager();
63
64 2
        $schemaManager->createCollection($this->table);
65
    }
66
67
    /**
68
     * Get the list of migrations.
69
     *
70
     * @param  int  $steps
71
     * @return array<mixed>
72
     */
73 11
    public function getMigrations($steps)
74
    {
75 11
        if ($this->useFallback()) {
76
            return parent::getMigrations($steps);
77
        }
78
79
        //TODO: the only difference with the parent function is that type of the batch value:
80
        // 1 instead of '1'. This should probably be changed in the Laravel framework as it
81
        // seems unnecessary to use a numeric string here.
82
83 11
        $query = $this->table()
84 11
            ->where('batch', '>=', 1)
85 11
            ->orderBy('batch', 'desc')
0 ignored issues
show
Bug introduced by
'batch' of type string is incompatible with the type Closure|Illuminate\Datab...\Database\Query\Builder expected by parameter $column of Illuminate\Database\Query\Builder::orderBy(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

85
            ->orderBy(/** @scrutinizer ignore-type */ 'batch', 'desc')
Loading history...
86 11
            ->orderBy('migration', 'desc')
87 11
            ->take($steps);
88
89 11
        return $query->get()->all();
90
    }
91
92
93
    /**
94
     * Determine if the migration repository exists.
95
     *
96
     * @return bool
97
     * @throws ArangoException
98
     * @throws AranguentException
99
     */
100 3
    public function repositoryExists()
101
    {
102 3
        if ($this->useFallback()) {
103
            return parent::repositoryExists();
104
        }
105
106 3
        $schemaManager = $this->getSchemaManager();
107
108 3
        return $schemaManager->hasCollection($this->table);
109
    }
110
111
    /**
112
     * Get a query builder for the migration collection.
113
     *
114
     * @return IlluminateQueryBuilder
115
     */
116
    protected function collection()
117
    {
118
        return $this->table();
119
    }
120
}
121