Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 28 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 2 |
CoachLevels | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
CoachLevelHelper | |
0.00% |
0 / 27 |
|
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 1 |
categorizeCharacterUsage | |
0.00% |
0 / 27 |
|
0.00% |
0 / 1 |
12 |
1 | <?php |
2 | |
3 | namespace App\Helpers; |
4 | |
5 | class CoachLevels |
6 | { |
7 | public function __construct( |
8 | public readonly int $beginner, |
9 | public readonly int $intermediate, |
10 | public readonly int $proficient, |
11 | public readonly int $advanced, |
12 | public readonly int $expert |
13 | ) {} |
14 | } |
15 | |
16 | class CoachLevelHelper |
17 | { |
18 | public static function categorizeCharacterUsage($characterUsages, $usersCount): CoachLevels |
19 | { |
20 | $categories = [ |
21 | 'beginner' => 0, |
22 | 'intermediate' => 0, |
23 | 'proficient' => 0, |
24 | 'advanced' => 0, |
25 | 'expert' => 0, |
26 | ]; |
27 | |
28 | foreach ($characterUsages as $usage) { |
29 | $totalCharacters = $usage->characters_typed; |
30 | |
31 | $category = match (true) { |
32 | $totalCharacters < 10000 => 'beginner', |
33 | $totalCharacters < 25000 => 'intermediate', |
34 | $totalCharacters < 50000 => 'proficient', |
35 | $totalCharacters < 100000 => 'advanced', |
36 | default => 'expert', |
37 | }; |
38 | |
39 | $categories[$category]++; |
40 | } |
41 | |
42 | $diff = $usersCount - count($characterUsages); |
43 | |
44 | if ($diff > 0) { |
45 | $categories['beginner'] += $diff; |
46 | } |
47 | |
48 | return new CoachLevels( |
49 | beginner: $categories['beginner'], |
50 | intermediate: $categories['intermediate'], |
51 | proficient: $categories['proficient'], |
52 | advanced: $categories['advanced'], |
53 | expert: $categories['expert'] |
54 | ); |
55 | } |
56 | } |