DiscussConversationObserver::updating()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Xetaravel\Observers;
6
7
use Illuminate\Support\Facades\Auth;
8
use Xetaravel\Models\DiscussConversation;
9
use Xetaravel\Models\Repositories\DiscussConversationRepository;
10
11
class DiscussConversationObserver
12
{
13
    /**
14
     * Handle the "creating" event.
15
     */
16
    public function creating(DiscussConversation $discussConversation): void
17
    {
18
        $discussConversation->user_id = Auth::id();
19
        $discussConversation->generateSlug();
20
    }
21
22
    /**
23
     * Handle the "updating" event.
24
     */
25
    public function updating(DiscussConversation $discussConversation): void
26
    {
27
        $discussConversation->generateSlug();
28
    }
29
30
    /**
31
     * Handle the "deleting" event.
32
     */
33
    public function deleting(DiscussConversation $discussConversation): void
34
    {
35
        $category = $discussConversation->category;
36
37
        // If the conversation is the last_conversation of the category,
38
        // find the new last_conversation and update the category.
39
        if ($category->last_conversation_id === $discussConversation->getKey()) {
40
            $previousConversation = DiscussConversationRepository::findPreviousConversation($discussConversation);
41
42
            if (is_null($previousConversation)) {
43
                $category->last_conversation_id = null;
44
            } else {
45
                $category->last_conversation_id = $previousConversation->getKey();
46
            }
47
48
            $category->save();
49
        }
50
51
        // Set the foreign keys to null, else it won't delete since it delete
52
        // the posts before the conversation.
53
        $discussConversation->first_post_id = null;
54
        $discussConversation->last_post_id = null;
55
        $discussConversation->solved_post_id = null;
56
        $discussConversation->save();
57
58
        // We need to do this to refresh the countable cache `discuss_post_count` of the user.
59
        foreach ($discussConversation->posts as $post) {
60
            $post->delete();
61
        }
62
63
        // It don't delete the logs, so we need to do it manually.
64
        foreach ($discussConversation->discussLogs as $log) {
65
            $log->delete();
66
        }
67
    }
68
}
69