Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
GetMySkillLevelsEndpoint
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 1
 handle
0.00% covered (danger)
0.00%
0 / 34
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace Olz\Apps\Quiz\Endpoints;
4
5use Olz\Api\OlzTypedEndpoint;
6use Olz\Apps\Quiz\QuizConstants;
7use Olz\Entity\Quiz\Skill;
8use 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 */
20class 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}