Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
ProcessCompanyGroupAsyncJob
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 8
156
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 handle
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
12
 backoff
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 deleted
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 updated
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
12
 updateUserInfo
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 validateUpdatedFields
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 parseFields
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Jobs;
4
5use App\Http\Models\Admin\CompanyGroup;
6use Illuminate\Bus\Queueable;
7use Illuminate\Contracts\Queue\ShouldQueue;
8use Illuminate\Foundation\Bus\Dispatchable;
9use Illuminate\Queue\InteractsWithQueue;
10use Illuminate\Queue\SerializesModels;
11use App\Http\Models\UserInfo;
12use App\Traits\ObjectMapper;
13
14class ProcessCompanyGroupAsyncJob implements ShouldQueue
15{
16    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, ObjectMapper;
17
18    public $tries = 5;
19
20    public function __construct(
21        public CompanyGroup $companyGroup,
22        public string $action
23    ) {}
24
25    public function handle(): void
26    {
27        if ($this->action === 'updated') {
28            $this->updated($this->companyGroup);
29        } elseif ($this->action === 'deleted') {
30            $this->deleted($this->companyGroup);
31        }
32    }
33
34    public function backoff()
35    {
36        return [10, 30, 60, 120, 300];
37    }
38
39    private function deleted(CompanyGroup $companyGroup): void
40    {
41        $this->updateUserInfo([
42            'group_name' => '',
43        ], $companyGroup);
44    }
45
46    private function updated(CompanyGroup $companyGroup): void
47    {
48        $updated = $companyGroup->getDirty();
49
50        if (!empty($updated)) {
51            $fields = $this->validateUpdatedFields($updated);
52
53            if (!empty($fields)) {
54                $parsedFields = $this->parseFields($companyGroup);
55
56                $this->updateUserInfo($parsedFields, $companyGroup);
57            }
58        }
59    }
60
61    private function updateUserInfo(array $data, CompanyGroup $companyGroup)
62    {
63        UserInfo::where('group_id', $companyGroup->id)->update($data);
64    }
65
66    private function validateUpdatedFields(array $updated): array
67    {
68        $hubspotFields = [
69            'name',
70        ];
71
72        return array_filter($updated, fn($key) => in_array($key, $hubspotFields), ARRAY_FILTER_USE_KEY);
73    }
74
75    private function parseFields(CompanyGroup $companyGroup): array
76    {
77        return [
78            'group_name' => $companyGroup?->name ?? '',
79        ];
80    }
81}