Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 39
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
ProcessFlyGrammarActionsAsyncJob
0.00% covered (danger)
0.00%
0 / 39
0.00% covered (danger)
0.00%
0 / 6
56
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 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 backoff
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 created
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 updateDailyUserInfo
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 1
6
 parseDailyFields
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\Auth\User;
6use App\Http\Models\FlyGrammarActions;
7use App\Http\Models\FlyMsgUserDailyUsage;
8use App\Http\Models\UserInfo;
9use App\Traits\ObjectMapper;
10use App\Traits\UsageTrait;
11use Illuminate\Bus\Queueable;
12use Illuminate\Contracts\Queue\ShouldQueue;
13use Illuminate\Foundation\Bus\Dispatchable;
14use Illuminate\Queue\InteractsWithQueue;
15use Illuminate\Queue\SerializesModels;
16use MongoDB\BSON\UTCDateTime;
17
18class ProcessFlyGrammarActionsAsyncJob implements ShouldQueue
19{
20    use Dispatchable, InteractsWithQueue, ObjectMapper, Queueable, SerializesModels, UsageTrait;
21
22    public $tries = 5;
23
24    public function __construct(public FlyGrammarActions $flyGrammarAction) {}
25
26    public function handle(): void
27    {
28        $this->created($this->flyGrammarAction);
29    }
30
31    public function backoff()
32    {
33        return [10, 30, 60, 110, 300];
34    }
35
36    private function created(FlyGrammarActions $flyGrammarAction): void
37    {
38        $parsedFields = $this->parseDailyFields($flyGrammarAction);
39        $this->updateDailyUserInfo($parsedFields, $flyGrammarAction);
40        $user = User::find($flyGrammarAction->user_id);
41        $userInfo = UserInfo::where('email', $user->email)->first();
42        $userInfo->last_date_user_used_flygrammar = new UTCDateTime($flyGrammarAction->created_at->timestamp * 1000);
43        $userInfo->save();
44    }
45
46    private function updateDailyUserInfo(array $data, FlyGrammarActions $flyGrammarAction)
47    {
48        $date = $flyGrammarAction->created_at;
49        $year = $date->year;
50        $month = $date->month;
51        $day = $date->day;
52        $findByDate = FlyMsgUserDailyUsage::where('user_id', $flyGrammarAction->user_id)->where('year', $year)->where('month', $month)->where('day', $day)->first();
53
54        if ($findByDate) {
55            $findByDate->update($data);
56        } else {
57            FlyMsgUserDailyUsage::GenerateNewRecord(
58                $year,
59                $month,
60                $day,
61                $flyGrammarAction->user_id,
62                $data['time_saved'],
63                $data['cost_savings'],
64                $data['characters_typed'],
65                $data['flycuts_created'],
66                $data['flyplates_added'],
67                $data['flyengage_count'],
68                $data['sentence_rewrite_count'],
69                $data['paragraph_rewrite_count'],
70                $data['flypost_count'],
71                $data['flycut_count'],
72                $data['fly_grammar_actions'] ?? 0,
73                $data['fly_grammar_accepted'] ?? 0,
74                $data['fly_grammar_autocorrect'] ?? 0,
75                $data['fly_grammar_autocomplete'] ?? 0,
76            );
77        }
78    }
79
80    private function parseDailyFields(FlyGrammarActions $flyGrammarAction): array
81    {
82        $user_id = $flyGrammarAction->user_id;
83        $date = $flyGrammarAction->created_at;
84
85        return $this->getUsage($user_id, $date);
86    }
87}