EmailsCleanupRecords   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Test Coverage

Coverage 95.24%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 8
eloc 19
c 1
b 0
f 1
dl 0
loc 53
ccs 20
cts 21
cp 0.9524
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A deleteByType() 0 8 3
A handle() 0 10 2
A deleteByTypeQuery() 0 14 3
1
<?php
2
3
namespace Nip\MailModule\Console\Commands;
4
5
use Nip\Database\Query\Delete;
6
use Nip\Database\Result;
7
use Nip\MailModule\Tests\Fixtures\Models\Emails\Emails;
8
use Nip\Records\AbstractModels\RecordManager;
9
10
/**
11
 * Class EmailsCleanupRecords
12
 * @package Nip\MailModule\Console\Commands
13
 */
14
class EmailsCleanupRecords extends EmailsAbstract
15
{
16
    /**
17 1
     * @return bool|int
18
     */
19
    public function handle()
20 1
    {
21
        $emailsManager = $this->emailsManager();
22 1
23 1
        $types = $emailsManager::reduceEmailsByType();
24 1
        $records = 0;
25 1
        foreach ($types as $type => $days) {
26
            $records += $this->deleteByType($emailsManager, $type, $days);
27 1
        }
28
        return $records;
29
    }
30
31
    /**
32
     * @param RecordManager $emailsManager
33
     * @param string $type
34
     * @param int $days
35
     * @return bool|int
36 1
     */
37
    protected function deleteByType(RecordManager $emailsManager, string $type, $days)
38 1
    {
39 1
        $query = $this->deleteByTypeQuery($emailsManager, $type, $days);
40 1
        $result = $query->execute();
41
        if ($result instanceof Result && $result->isValid()) {
42
            return $result->numRows();
43 1
        }
44
        return 0;
45
    }
46
47
    /**
48
     * @param RecordManager $emailsManager
49
     * @param string $type
50
     * @param int $days
51
     * @return Delete
52 1
     */
53
    protected function deleteByTypeQuery($emailsManager, $type, $days)
54 1
    {
55 1
        /** @var Emails $emailsManager */
56 1
        $query = $emailsManager->newDeleteQuery();
57
        if (is_string($type) && strlen($type) > 1) {
58 1
            $query->where('`type` = ?', $type);
0 ignored issues
show
Bug introduced by
$type of type string is incompatible with the type array expected by parameter $values of Nip\Database\Query\AbstractQuery::where(). ( Ignorable by Annotation )

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

58
            $query->where('`type` = ?', /** @scrutinizer ignore-type */ $type);
Loading history...
59 1
        }
60
        $query->where(
61
            '`' . $emailsManager::getSentDateField() . '` <= DATE_SUB(CURRENT_DATE(), INTERVAL ' . $days . ' DAY)'
62 1
        );
63
64 1
        $query->limit(500);
65
66
        return $query;
67
    }
68
}
69