feat: include optional time in transportation service

addresses #86996x46z
This commit is contained in:
Björn Fromme
2025-06-02 14:58:48 +02:00
parent 2e602b85b2
commit 7bfa5f5ed7
5 changed files with 70 additions and 1 deletions
+1 -1
View File
@@ -49,7 +49,7 @@ Accept: application/json
Authorization: Bearer {{$auth.token("oauth2_api")}}
### API travel
GET {{base_url}}/api/travels/DPWBSP030229
GET {{base_url}}/api/travels/DWWWE211125
Accept: application/json
Authorization: Bearer {{$auth.token("oauth2_api")}}
+6
View File
@@ -43,6 +43,12 @@ class Service
#[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]
public ?\DateTimeImmutable $dateFrom = null;
#[Groups(['api:single', 'api:list'])]
public ?string $timeFrom = null;
#[Groups(['api:single', 'api:list'])]
public ?string $dayTime = null;
#[Groups(['api:single', 'api:list'])]
#[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]
public ?\DateTimeImmutable $dateTo = null;
+25
View File
@@ -0,0 +1,25 @@
<?php
namespace App\BusProNet\Utility;
class DayTimeUtility
{
public function mapTime(?string $time): ?string
{
if (null === $time) {
return null;
} elseif ($time >= '00:00' && $time <= '05:59') {
return 'nachts';
} elseif ($time >= '06:00' && $time <= '11:59') {
return 'morgens';
} elseif ($time >= '12:00' && $time <= '14:59') {
return 'mittags';
} elseif ($time >= '15:00' && $time <= '19:59') {
return 'abends';
} elseif ($time >= '20:00' && $time <= '23:59') {
return 'nachts';
} else {
return null;
}
}
}
+6
View File
@@ -11,6 +11,7 @@ use App\BusProNet\Model\Pickup;
use App\BusProNet\Model\Room;
use App\BusProNet\Model\Service;
use App\BusProNet\Model\Travel;
use App\BusProNet\Utility\DayTimeUtility;
use App\BusProNet\Utility\TravelCodeUtility;
use League\Flysystem\FilesystemOperator;
use League\Flysystem\StorageAttributes;
@@ -245,6 +246,11 @@ class TravelLoader extends AbstractLoader
$service->direction = $this->getStringOrNullValue($serviceNode->filterXPath('//richtung'));
$service->status = $this->getStringOrNullValue($serviceNode->filterXPath('//status'));
if (null !== $timeFrom = $serviceNode->attr('uhrzeit_von')) {
$service->timeFrom = $timeFrom;
$service->dayTime = (new DayTimeUtility())->mapTime($timeFrom);
}
$transportationServices[$serviceId] = $service;
});
@@ -0,0 +1,32 @@
<?php
namespace App\Tests\BusProNet\Utility;
use App\BusProNet\Utility\DayTimeUtility;
use PHPUnit\Framework\TestCase;
class DayTimeUtilityTest extends TestCase
{
/**
* @dataProvider dayTimeProvider
*/
public function testMapTime(?string $time, ?string $dayTime): void
{
$utility = new DayTimeUtility();
$result = $utility->mapTime($time);
$this->assertEquals($dayTime, $result);
}
public function dayTimeProvider(): array
{
return [
[null, null],
['06:00', 'morgens'],
['11:30', 'morgens'],
['14:00', 'mittags'],
['19:30', 'abends'],
['04:30', 'nachts'],
];
}
}