Passed
Branch dev_2x (3e8772)
by Adrian
01:42
created

SoftDelete   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 83
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 10
eloc 22
c 0
b 0
f 0
dl 0
loc 83
rs 10
1
<?php
2
declare(strict_types=1);
3
4
namespace Sirius\Orm\Blueprint\Behaviour;
5
6
use Sirius\Orm\Blueprint\Behaviour;
7
use Sirius\Orm\Blueprint\Column;
8
use Sirius\Orm\Blueprint\Mapper;
9
use Sirius\Orm\Blueprint\MapperAwareTrait;
10
use Sirius\Orm\CodeGenerator\Observer\Behaviour\SoftDeleteObserver;
11
12
class SoftDelete extends Behaviour
13
{
14
    use MapperAwareTrait;
15
16
    protected $deletedAtColumn = 'deleted_at';
17
18
    /**
19
     * @var SoftDeleteObserver
20
     */
21
    protected $observer;
22
23
    public static function make($deletedAtColumn = 'deleted_at')
24
    {
25
        return (new static)->setDeletedAtColumn($deletedAtColumn);
26
    }
27
28
    public function getName(): string
29
    {
30
        return 'soft_delete';
31
    }
32
33
    public function getObservers(): array
34
    {
35
        $observer = $this->getObserver()->with($this);
36
37
        return [
38
            $this->mapper->getName() . '_base_mapper' => [$observer],
39
            $this->mapper->getName() . '_base_query'  => [$observer]
40
        ];
41
    }
42
43
    /**
44
     * @return string
45
     */
46
    public function getDeletedAtColumn(): string
47
    {
48
        return $this->deletedAtColumn;
49
    }
50
51
    /**
52
     * @param string $deletedAtColumn
53
     *
54
     * @return SoftDelete
55
     */
56
    public function setDeletedAtColumn(string $deletedAtColumn): SoftDelete
57
    {
58
        $this->deletedAtColumn = $deletedAtColumn;
59
60
        return $this;
61
    }
62
63
    public function setMapper(Mapper $mapper): self
64
    {
65
        $this->mapper = $mapper;
66
67
        $columns = $mapper->getColumns();
68
69
        if ($this->deletedAtColumn && ! array_key_exists($this->deletedAtColumn, $columns)) {
70
            $mapper->addColumn(Column::datetime($this->deletedAtColumn)
71
                                     ->setNullable(true));
72
        }
73
74
        return $this;
75
    }
76
77
    /**
78
     * @return SoftDeleteObserver
79
     */
80
    public function getObserver(): SoftDeleteObserver
81
    {
82
        return $this->observer ?? new SoftDeleteObserver();
83
    }
84
85
    /**
86
     * @param SoftDeleteObserver $observer
87
     *
88
     * @return SoftDelete
89
     */
90
    public function setObserver(SoftDeleteObserver $observer): SoftDelete
91
    {
92
        $this->observer = $observer;
93
94
        return $this;
95
    }
96
}
97