Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 34 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 1 |
GetMySkillLevelsEndpoint | |
0.00% |
0 / 34 |
|
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 1 |
handle | |
0.00% |
0 / 34 |
|
0.00% |
0 / 1 |
20 |
1 | <?php |
2 | |
3 | namespace Olz\Apps\Quiz\Endpoints; |
4 | |
5 | use Olz\Api\OlzTypedEndpoint; |
6 | use Olz\Apps\Quiz\QuizConstants; |
7 | use Olz\Entity\Quiz\Skill; |
8 | use Olz\Entity\Quiz\SkillLevel; |
9 | |
10 | /** |
11 | * Note: `value` must be between 0.0 and 1.0. |
12 | * |
13 | * @extends OlzTypedEndpoint< |
14 | * array{skillFilter?: ?( |
15 | * array{categoryIdIn: array<non-empty-string>} |
16 | * )}, |
17 | * array<string, array{value: float}>, |
18 | * > |
19 | */ |
20 | class GetMySkillLevelsEndpoint extends OlzTypedEndpoint { |
21 | protected function handle(mixed $input): mixed { |
22 | $this->checkPermission('any'); |
23 | |
24 | $current_user_id = $this->authUtils()->getCurrentUser()?->getId(); |
25 | $this->generalUtils()->checkNotNull($current_user_id, "No current user ID"); |
26 | $skill_repo = $this->entityManager()->getRepository(Skill::class); |
27 | $skill_level_repo = $this->entityManager()->getRepository(SkillLevel::class); |
28 | |
29 | $external_category_ids = $input['skillFilter']['categoryIdIn'] ?? null; |
30 | |
31 | if ($external_category_ids === null) { |
32 | $skills = $skill_repo->findAll(); |
33 | $skill_levels = $skill_level_repo->getSkillLevelsForUserId( |
34 | $current_user_id |
35 | ); |
36 | } else { |
37 | $internal_category_ids = array_map( |
38 | function ($id) { |
39 | return $this->idUtils()->toInternalId($id, 'SkillCategory'); |
40 | }, |
41 | $external_category_ids, |
42 | ); |
43 | $skills = $skill_repo->getSkillsInCategories($internal_category_ids); |
44 | $skill_levels = $skill_level_repo->getSkillLevelsForUserIdInCategories( |
45 | $current_user_id, |
46 | $internal_category_ids |
47 | ); |
48 | } |
49 | |
50 | $skill_level_by_skill_id = []; |
51 | foreach ($skills as $skill) { |
52 | $internal_skill_id = $skill->getId(); |
53 | $external_skill_id = $this->idUtils()->toExternalId($internal_skill_id ?? 0, 'Skill'); |
54 | $value = QuizConstants::INITIAL_SKILL_LEVEL_VALUE; |
55 | $skill_level_by_skill_id[$external_skill_id] = ['value' => $value]; |
56 | } |
57 | foreach ($skill_levels as $skill_level) { |
58 | $internal_skill_id = $skill_level->getSkill()?->getId(); |
59 | $external_skill_id = $this->idUtils()->toExternalId($internal_skill_id ?? 0, 'Skill'); |
60 | $value = $skill_level->getValue(); |
61 | $skill_level_by_skill_id[$external_skill_id] = ['value' => $value]; |
62 | } |
63 | |
64 | return $skill_level_by_skill_id; |
65 | } |
66 | } |