UuidAsPrimary::getKeyType()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 4
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
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