Completed
Push — master ( 90152d...d7539f )
by Freek
01:35 queued 11s
created

CampaignSend::clicks()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Spatie\EmailCampaigns\Models;
4
5
use Illuminate\Database\Eloquent\Model;
6
use Illuminate\Database\Eloquent\Relations\HasMany;
7
use Illuminate\Database\Eloquent\Relations\HasOne;
8
use Spatie\EmailCampaigns\Enums\CampaignSendBounceSeverity;
9
use Spatie\EmailCampaigns\Models\Concerns\HasUuid;
10
use Illuminate\Database\Eloquent\Relations\BelongsTo;
11
12
class CampaignSend extends Model
13
{
14
    use HasUuid;
15
16
    public $table = 'campaign_sends';
17
18
    public $guarded = [];
19
20
    public $dates = ['sent_at'];
21
22
    public static function findByTransportMessageId(string $transportMessageId): ?Model
23
    {
24
        return static::where('transport_message_id', $transportMessageId)->first();
25
    }
26
27
    public function subscription(): BelongsTo
28
    {
29
        return $this->belongsTo(Subscription::class, 'email_list_subscription_id');
30
    }
31
32
    public function campaign(): BelongsTo
33
    {
34
        return $this->belongsTo(Campaign::class, 'email_campaign_id');
35
    }
36
37
    public function opens(): HasMany
38
    {
39
        return $this->hasMany(CampaignOpen::class, 'campaign_send_id');
40
    }
41
42
    public function clicks(): HasMany
43
    {
44
        return $this->hasMany(CampaignClick::class, 'campaign_send_id');
45
    }
46
47
    public function bounces(): HasMany
48
    {
49
        return $this->hasMany(CampaignSendBounce::class);
50
    }
51
52
    public function markAsBounced(string $severity)
53
    {
54
        $this->bounces()->create(compact('severity'));
55
56
        if ($severity === CampaignSendBounceSeverity::PERMANENT) {
57
            $this->subscription->markAsUnsubscribed();
58
        }
59
60
        return $this;
61
    }
62
63
    public function markAsSent()
64
    {
65
        $this->sent_at = now();
66
67
        $this->save();
68
69
        return $this;
70
    }
71
72
    public function wasAlreadySent(): bool
73
    {
74
        return !is_null($this->sent_at);
75
    }
76
77
    public function storeTransportMessageId(string $transportMessageId)
78
    {
79
        $this->update(['transport_message_id' => $transportMessageId]);
80
81
        return $this;
82
    }
83
}
84