Lines 61.53% 8 / 13
Functions and Methods 25.00% 1 / 4
Classes and Traits 0.00% 0 / 1
Name Lines Functions and Methods CRAP Classes and Traits
ServiceList 61.53% 8 / 13 25.00% 1 / 4 11.64 0.00% 0 / 1
 __construct 57.14% 4 / 7 0.00% 0 / 1 5.26
 ensureValid 50.00% 1 / 2 0.00% 0 / 1 2.50
 toArray 100.00% 3 / 3 100.00% 1 / 1 1
 jsonSerialize 0.00% 0 / 1 0.00% 0 / 1 2
1<?php
2
3declare(strict_types=1);
4
5namespace BO\Zmscitizenapi\Models\Collections;
6
7use BO\Zmscitizenapi\Models\Service;
8use BO\Zmsentities\Schema\Entity;
9use InvalidArgumentException;
10use JsonSerializable;
11
12class ServiceList extends Entity implements JsonSerializable
13{
14    public static $schema = "citizenapi/collections/serviceList.json";
15    public array $services = [];
16    public function __construct(array $services = [])
17    {
18        foreach ($services as $service) {
19            try {
20                if (!$service instanceof Service) {
21                    throw new InvalidArgumentException("Element is not an instance of Service.");
22                }
23                $this->services[] = $service;
24            } catch (\Exception $e) {
25                \App::$log->warning('Invalid Service skipped', ['exception' => $e->getMessage()]);
26            }
27        }
28
29        $this->ensureValid();
30    }
31
32    /**
33     * @return void
34     */
35    private function ensureValid()
36    {
37        if (!$this->testValid()) {
38            throw new InvalidArgumentException("The provided data is invalid according to the schema.");
39        }
40    }
41
42    public function toArray(): array
43    {
44        return [
45            "services" => array_map(fn(Service $service) => $service->toArray(), $this->services)
46        ];
47    }
48
49    #[\Override]
50    public function jsonSerialize(): mixed
51    {
52        return $this->toArray();
53    }
54}