Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
100.00% |
36 / 36 |
|
100.00% |
1 / 1 |
CRAP | |
100.00% |
1 / 1 |
| FlyMsgUserDailyUsage | |
100.00% |
36 / 36 |
|
100.00% |
1 / 1 |
3 | |
100.00% |
1 / 1 |
| GenerateNewRecord | |
100.00% |
36 / 36 |
|
100.00% |
1 / 1 |
3 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace App\Http\Models; |
| 4 | |
| 5 | use App\Http\Models\Admin\CompanyGroup; |
| 6 | use App\Http\Models\Auth\User; |
| 7 | use App\Observers\FlyMsgUserDailyUsageObserver; |
| 8 | use Carbon\Carbon; |
| 9 | use Illuminate\Database\Eloquent\Attributes\ObservedBy; |
| 10 | use Illuminate\Notifications\Notifiable; |
| 11 | |
| 12 | /** |
| 13 | * @property string $user_id |
| 14 | * @property string|null $hubspot_id |
| 15 | * @property int|null $year |
| 16 | * @property int|null $month |
| 17 | * @property int|null $day |
| 18 | * @property string|null $date |
| 19 | * @property string|null $company_id |
| 20 | * @property string|null $email_domain |
| 21 | * @property string|null $user_status |
| 22 | * @property string|null $group_id |
| 23 | * @property string|null $subgroup_id |
| 24 | * @property string|null $category |
| 25 | * @property float|null $time_saved |
| 26 | * @property float|null $cost_savings |
| 27 | * @property int|null $characters_typed |
| 28 | * @property int|null $flycuts_created |
| 29 | * @property int|null $flyplates_added |
| 30 | * @property int|null $flyengage_count |
| 31 | * @property int|null $sentence_rewrite_count |
| 32 | * @property int|null $paragraph_rewrite_count |
| 33 | * @property int|null $flypost_count |
| 34 | * @property int|null $flycut_count |
| 35 | * @property int|null $fly_grammar_actions |
| 36 | * @property int|null $fly_grammar_accepted |
| 37 | * @property int|null $fly_grammar_autocorrect |
| 38 | * @property int|null $fly_grammar_autocomplete |
| 39 | * @property int|null $roleplay_personas_created |
| 40 | * @property int|null $roleplay_sessions_practiced |
| 41 | * @property int|null $roleplay_time_practiced |
| 42 | * @property float|null $roleplay_daily_avg_score |
| 43 | */ |
| 44 | #[ObservedBy([FlyMsgUserDailyUsageObserver::class])] |
| 45 | class FlyMsgUserDailyUsage extends Moloquent |
| 46 | { |
| 47 | use Notifiable; |
| 48 | |
| 49 | protected $table = 'fly_msg_user_daily_usage'; |
| 50 | |
| 51 | protected $fillable = [ |
| 52 | 'user_id', |
| 53 | 'hubspot_id', |
| 54 | 'year', |
| 55 | 'month', |
| 56 | 'day', |
| 57 | 'date', |
| 58 | 'company_id', |
| 59 | 'email_domain', |
| 60 | 'user_status', |
| 61 | 'group_id', |
| 62 | 'subgroup_id', |
| 63 | 'category', |
| 64 | 'time_saved', |
| 65 | 'cost_savings', |
| 66 | 'characters_typed', |
| 67 | 'flycuts_created', |
| 68 | 'flyplates_added', |
| 69 | 'flyengage_count', |
| 70 | 'sentence_rewrite_count', |
| 71 | 'paragraph_rewrite_count', |
| 72 | 'flypost_count', |
| 73 | 'flycut_count', |
| 74 | 'fly_grammar_actions', |
| 75 | 'fly_grammar_accepted', |
| 76 | 'fly_grammar_autocorrect', |
| 77 | 'fly_grammar_autocomplete', |
| 78 | 'roleplay_personas_created', |
| 79 | 'roleplay_sessions_practiced', |
| 80 | 'roleplay_time_practiced', |
| 81 | 'roleplay_daily_avg_score', |
| 82 | 'updated_at', |
| 83 | 'created_at', |
| 84 | ]; |
| 85 | |
| 86 | public static function GenerateNewRecord( |
| 87 | int $year, |
| 88 | int $month, |
| 89 | int $day, |
| 90 | string $user_id, |
| 91 | float $time_saved, |
| 92 | float $cost_savings, |
| 93 | int $characters_typed, |
| 94 | int $flycuts_created, |
| 95 | int $flyplates_added, |
| 96 | int $flyengage_count, |
| 97 | int $sentence_rewrite_count, |
| 98 | int $paragraph_rewrite_count, |
| 99 | int $flypost_count, |
| 100 | int $flycut_count, |
| 101 | int $fly_grammar_actions, |
| 102 | int $fly_grammar_accepted, |
| 103 | int $fly_grammar_autocorrect, |
| 104 | int $fly_grammar_autocomplete, |
| 105 | int $roleplay_personas_created = 0, |
| 106 | int $roleplay_sessions_practiced = 0, |
| 107 | int $roleplay_time_practiced = 0, |
| 108 | float $roleplay_daily_avg_score = 0.0, |
| 109 | ) { |
| 110 | $user = User::find($user_id); |
| 111 | $findByDate = new FlyMsgUserDailyUsage; |
| 112 | $findByDate->user_id = $user_id; |
| 113 | $findByDate->hubspot_id = $user->hubspot_id; |
| 114 | $findByDate->year = $year; |
| 115 | $findByDate->month = $month; |
| 116 | $findByDate->day = $day; |
| 117 | $findByDate->date = new \MongoDB\BSON\UTCDateTime(Carbon::create($year, $month, $day)->timestamp * 1000); |
| 118 | $findByDate->email_domain = strrchr($user->email, '@'); |
| 119 | $findByDate->user_status = $user->status ?? 'Active'; |
| 120 | $findByDate->company_id = $user->company_id; |
| 121 | |
| 122 | $group = CompanyGroup::find($user->company_group_id); |
| 123 | if (! empty($group?->parent_id)) { |
| 124 | $findByDate->subgroup_id = $user->company_group_id; |
| 125 | $findByDate->group_id = $group->parent_id; |
| 126 | } else { |
| 127 | $findByDate->group_id = $user->company_group_id; |
| 128 | } |
| 129 | |
| 130 | $findByDate->category = $user->company_id ? 'corporate' : 'individual'; |
| 131 | $findByDate->time_saved = $time_saved; |
| 132 | $findByDate->cost_savings = $cost_savings; |
| 133 | $findByDate->characters_typed = $characters_typed; |
| 134 | $findByDate->flycuts_created = $flycuts_created; |
| 135 | $findByDate->flyplates_added = $flyplates_added; |
| 136 | $findByDate->flyengage_count = $flyengage_count; |
| 137 | $findByDate->sentence_rewrite_count = $sentence_rewrite_count; |
| 138 | $findByDate->paragraph_rewrite_count = $paragraph_rewrite_count; |
| 139 | $findByDate->flypost_count = $flypost_count; |
| 140 | $findByDate->flycut_count = $flycut_count; |
| 141 | $findByDate->fly_grammar_actions = $fly_grammar_actions; |
| 142 | $findByDate->fly_grammar_accepted = $fly_grammar_accepted; |
| 143 | $findByDate->fly_grammar_autocorrect = $fly_grammar_autocorrect; |
| 144 | $findByDate->fly_grammar_autocomplete = $fly_grammar_autocomplete; |
| 145 | $findByDate->roleplay_personas_created = $roleplay_personas_created; |
| 146 | $findByDate->roleplay_sessions_practiced = $roleplay_sessions_practiced; |
| 147 | $findByDate->roleplay_time_practiced = $roleplay_time_practiced; |
| 148 | $findByDate->roleplay_daily_avg_score = $roleplay_daily_avg_score; |
| 149 | $findByDate->save(); |
| 150 | } |
| 151 | } |