UuidAsPrimary   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
dl 0
loc 47
ccs 0
cts 23
cp 0
rs 10
c 0
b 0
f 0
wmc 8
lcom 1
cbo 2

4 Methods

Rating   Name   Duplication   Size   Complexity  
A generateUuid() 0 18 3
A getIncrementing() 0 4 1
A getKeyType() 0 4 1
A bootUuidAsPrimary() 0 15 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Longman\LaravelLodash\Eloquent;
6
7
use Ramsey\Uuid\Uuid;
8
9
/**
10
 * @mixin \Illuminate\Database\Eloquent\Model
11
 */
12
trait UuidAsPrimary
13
{
14
    public static function generateUuid(int $version = Uuid::UUID_TYPE_RANDOM): string
15
    {
16
        switch ($version) {
17
            case 1:
18
                $uuid = Uuid::uuid1()->toString();
19
                break;
20
21
            case 3:
22
                $uuid = Uuid::uuid3()->toString();
23
                break;
24
25
            default:
26
                $uuid = Uuid::uuid4()->toString();
27
                break;
28
        }
29
30
        return $uuid;
31
    }
32
33
    public function getIncrementing(): bool
34
    {
35
        return false;
36
    }
37
38
    public function getKeyType(): string
39
    {
40
        return 'string';
41
    }
42
43
    protected static function bootUuidAsPrimary(): void
44
    {
45
        /** @var \Illuminate\Database\Eloquent\Model $model */
46
        static::creating(static function ($model) {
47
            $keyName = $model->getKeyName();
48
49
            if (! empty($model->{$keyName})) {
50
                return;
51
            }
52
53
            $uuidVersion = ! empty($model->uuidVersion) ? $model->uuidVersion : Uuid::UUID_TYPE_RANDOM;
54
55
            $model->attributes[$keyName] = self::generateUuid($uuidVersion);
56
        });
57
    }
58
}
59