Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
1 / 1
QuestionEndpointTrait
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
5 / 5
9
100.00% covered (success)
100.00%
1 / 1
 getEntityData
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
4
 updateEntityWithData
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
1
 persistUploads
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 editUploads
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 getEntityById
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace Olz\Faq\Endpoints;
4
5use Olz\Entity\Faq\Question;
6use Olz\Entity\Faq\QuestionCategory;
7use Olz\Utils\WithUtilsTrait;
8use PhpTypeScriptApi\HttpError;
9
10/**
11 * @phpstan-type OlzQuestionId int
12 * @phpstan-type OlzQuestionData array{
13 *   ident: non-empty-string,
14 *   question: non-empty-string,
15 *   categoryId?: ?int,
16 *   positionWithinCategory?: ?int,
17 *   answer: non-empty-string,
18 *   imageIds: array<non-empty-string>,
19 *   fileIds: array<non-empty-string>,
20 * }
21 */
22trait QuestionEndpointTrait {
23    use WithUtilsTrait;
24
25    /** @return OlzQuestionData */
26    public function getEntityData(Question $entity): array {
27        return [
28            'ident' => $entity->getIdent() ? $entity->getIdent() : '-',
29            'question' => $entity->getQuestion() ? $entity->getQuestion() : '-',
30            'categoryId' => $entity->getCategory()?->getId(),
31            'positionWithinCategory' => $entity->getPositionWithinCategory(),
32            'answer' => $entity->getAnswer() ? $entity->getAnswer() : '-',
33            'imageIds' => $entity->getStoredImageUploadIds(),
34            'fileIds' => $entity->getStoredFileUploadIds(),
35        ];
36    }
37
38    /** @param OlzQuestionData $input_data */
39    public function updateEntityWithData(Question $entity, array $input_data): void {
40        $category_repo = $this->entityManager()->getRepository(QuestionCategory::class);
41        $category_id = $input_data['categoryId'] ?? null;
42        $category = $category_repo->findOneBy(['id' => $category_id]);
43
44        $entity->setIdent($input_data['ident']);
45        $entity->setQuestion($input_data['question']);
46        $entity->setCategory($category);
47        $entity->setPositionWithinCategory($input_data['positionWithinCategory'] ?? 0);
48        $entity->setAnswer($input_data['answer']);
49    }
50
51    /** @param OlzQuestionData $input_data */
52    public function persistUploads(Question $entity, array $input_data): void {
53        $this->persistOlzImages($entity, $input_data['imageIds']);
54        $this->persistOlzFiles($entity, $input_data['fileIds']);
55    }
56
57    public function editUploads(Question $entity): void {
58        $image_ids = $this->uploadUtils()->getStoredUploadIds("{$entity->getImagesPathForStorage()}img/");
59        $this->editOlzImages($entity, $image_ids);
60        $this->editOlzFiles($entity);
61    }
62
63    protected function getEntityById(int $id): Question {
64        $repo = $this->entityManager()->getRepository(Question::class);
65        $entity = $repo->findOneBy(['id' => $id]);
66        if (!$entity) {
67            throw new HttpError(404, "Nicht gefunden.");
68        }
69        return $entity;
70    }
71}