Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
AvailableDaysListService
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
4 / 4
8
100.00% covered (success)
100.00%
1 / 1
 getAvailableDaysList
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 extractClientData
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
4
 validateClientData
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getAvailableDays
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace BO\Zmscitizenapi\Services\Availability;
6
7use BO\Zmscitizenapi\Models\AvailableDays;
8use BO\Zmscitizenapi\Services\Core\ValidationService;
9use BO\Zmscitizenapi\Services\Core\ZmsApiFacadeService;
10
11class AvailableDaysListService
12{
13    public function getAvailableDaysList(array $queryParams): AvailableDays|array
14    {
15        $clientData = $this->extractClientData($queryParams);
16        $errors = $this->validateClientData($clientData);
17        if (!empty($errors['errors'])) {
18            return $errors;
19        }
20
21        return $this->getAvailableDays($clientData);
22    }
23
24    private function extractClientData(array $queryParams): object
25    {
26        $queryParams['officeId'] = isset($queryParams['officeId']) ? (string) $queryParams['officeId'] : '';
27        $queryParams['serviceId'] = isset($queryParams['serviceId']) ? (string) $queryParams['serviceId'] : '';
28        $serviceCount = $queryParams['serviceCount'] ?? '';
29        $serviceCounts = !empty($serviceCount)
30            ? array_map('trim', explode(',', (string) $serviceCount))
31            : [];
32        return (object) [
33            'officeIds' => array_map('trim', explode(',', $queryParams['officeId'])),
34            'serviceIds' => array_map('trim', explode(',', $queryParams['serviceId'])),
35            'serviceCounts' => $serviceCounts,
36            'startDate' => $queryParams['startDate'] ?? null,
37            'endDate' => $queryParams['endDate'] ?? null
38        ];
39    }
40
41    private function validateClientData(object $data): array
42    {
43        return ValidationService::validateGetBookableFreeDays($data->officeIds, $data->serviceIds, $data->startDate, $data->endDate, $data->serviceCounts);
44    }
45
46    private function getAvailableDays(object $data): AvailableDays|array
47    {
48        return ZmsApiFacadeService::getBookableFreeDays($data->officeIds, $data->serviceIds, $data->serviceCounts, $data->startDate, $data->endDate);
49    }
50}