Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 56
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
TrackFlyMsgAIUsageEventListener
0.00% covered (danger)
0.00%
0 / 56
0.00% covered (danger)
0.00%
0 / 2
20
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 / 55
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace App\Listeners;
4
5use Carbon\Carbon;
6use App\Http\Models\FlyCutUsage;
7use Illuminate\Contracts\Queue\ShouldQueue;
8use App\Http\Models\FlyMsgAI\FlyMsgAITracking;
9use App\Http\Services\StatisticsService;
10
11class TrackFlyMsgAIUsageEventListener implements ShouldQueue
12{
13    public function __construct(protected StatisticsService $statisticsService) {}
14
15    public function handle($event)
16    {
17        $user = $event->user;
18        $prompt_response = $event->prompt_response;
19        $browser = $event->browser;
20        $button = $event->button;
21        $prompt = $event->prompt;
22        $feature = $event->feature;
23        $uniqueId = $event->uniqueId;
24        $aiResult = $event->aiResult;
25        $context = $event->context;
26
27        FlyMsgAITracking::create([
28            'user_id' => $user->id,
29            'browser' => $browser,
30            'button' => $button,
31            'prompt' => $prompt,
32            'feature' => $feature,
33            'prompt_response' => $prompt_response,
34            'unique_id' => $uniqueId,
35            'prompt_plain_response' => $aiResult['response'],
36            'prompt' => $aiResult['prompt'],
37            'context' => $context,
38        ]);
39        // Track characters generated to contribute to time saves
40        $charactersTyped = strlen(strip_tags($prompt_response));
41        $charactersSaved = $charactersTyped;
42        $timeSaved = $this->statisticsService->getTimeSaved($user, $charactersSaved);
43        $costSaved = $this->statisticsService->getCostSaved($user, $timeSaved, now());
44        $user->flycutUsage()->create([
45            'characters_typed' => $charactersTyped,
46            'characters_saved' => $charactersSaved,
47            'time_saved' => $timeSaved,
48            'cost_saved' => $costSaved,
49            'executed_at' => Carbon::now()->toDateTimeString(),
50            'feature' => $feature,
51        ]);
52
53        $monthYear = now()->format('M Y');
54        $newData = [
55            'month_year' => now()->format('M Y'),
56            'characters_typed' => $charactersTyped,
57            'characters_saved' => $charactersSaved,
58            'time_saved' => $timeSaved,
59            'cost_saved' => $costSaved,
60        ];
61
62        if ($user->charts()->exists()) {
63            $chart = $user->charts()->firstWhere('month_year', $monthYear);
64            if ($chart) {
65                $chart->update(
66                    [
67                        'month_year' => now()->format('M Y'),
68                        'characters_typed' => $charactersTyped + $chart->characters_typed,
69                        'characters_saved' => $charactersSaved + $chart->characters_saved,
70                        'time_saved' => $timeSaved + $chart->time_saved,
71                        'cost_saved' => $costSaved + $chart->cost_saved,
72                    ]
73                );
74            } else {
75                $user->charts()->create($newData);
76            }
77        } else {
78            $user->charts()->create($newData);
79        }
80    }
81}