add backend messages support

This commit is contained in:
Kacper Donat 2018-09-03 21:16:09 +02:00
parent 4111a0cfd8
commit 9c18634d63
6 changed files with 126 additions and 14 deletions

4
composer.lock generated
View File

@ -2953,7 +2953,7 @@
"source": {
"type": "git",
"url": "http://git.kadet.net/kadet/functional-php.git",
"reference": "024d97d46c183df8f3ccaf1f8b4dc73d9cb629ae"
"reference": "f8ea3de9f7f6d2f2427488434d73edd8967b6856"
},
"require": {
"php": ">=7.1"
@ -2982,7 +2982,7 @@
}
],
"description": "Functional library for PHP",
"time": "2018-08-27T16:57:36+00:00"
"time": "2018-09-02T18:26:49+00:00"
},
{
"name": "symfony/dotenv",

View File

@ -5,7 +5,7 @@
"license": "MIT",
"devDependencies": {
"webpack": "^4.17.0",
"webpack-cli": "^3.1.0"
"webpack-cli": "^3.1.0",
"@fortawesome/fontawesome-svg-core": "^1.2.4",
"@fortawesome/pro-light-svg-icons": "^5.3.1",
"@fortawesome/pro-regular-svg-icons": "^5.3.1",

View File

@ -0,0 +1,21 @@
<?php
namespace App\Controller;
use App\Provider\MessageRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
/**
* @Route("/{provider}/messages")
*/
class MessagesController extends Controller
{
/**
* @Route("/", methods={"GET"})
*/
public function all(MessageRepository $messages)
{
return $this->json($messages->getAll());
}
}

View File

@ -4,6 +4,8 @@
namespace App\Model;
use Carbon\Carbon;
class Message implements Fillable
{
use FillTrait;
@ -16,13 +18,25 @@ class Message implements Fillable
* Message content.
* @var string
*/
public $message;
private $message;
/**
* Message type, see TYPE_* constants
* @var
* @var string
*/
public $type = self::TYPE_UNKNOWN;
private $type = self::TYPE_UNKNOWN;
/**
* Message validity time span start
* @var Carbon|null
*/
private $validFrom;
/**
* Message validity time span end
* @var Carbon|null
*/
private $validTo;
/**
* @return string
@ -55,4 +69,36 @@ class Message implements Fillable
{
$this->type = $type;
}
/**
* @return Carbon|null
*/
public function getValidFrom(): ?Carbon
{
return $this->validFrom;
}
/**
* @param Carbon|null $validFrom
*/
public function setValidFrom(?Carbon $validFrom): void
{
$this->validFrom = $validFrom;
}
/**
* @return Carbon|null
*/
public function getValidTo(): ?Carbon
{
return $this->validTo;
}
/**
* @param Carbon|null $validTo
*/
public function setValidTo(?Carbon $validTo): void
{
$this->validTo = $validTo;
}
}

View File

@ -4,20 +4,59 @@
namespace App\Provider\ZtmGdansk;
use App\Model\Message;
use App\Model\Stop;
use App\Provider\MessageRepository;
use Carbon\Carbon;
use Symfony\Component\Cache\Adapter\AdapterInterface;
use Tightenco\Collect\Support\Collection;
class ZtmGdanskMessageRepository implements MessageRepository
{
const MESSAGES_URL = "http://87.98.237.99:88/displayMessages";
private $cache;
/**
* ZtmGdanskStopRepository constructor.
*/
public function __construct(AdapterInterface $cache)
{
$this->cache = $cache;
}
public function getAll(): Collection
{
return collect();
return collect($this->queryZtmApi())->unique(function ($message) {
return $message['messagePart1'] . $message['messagePart2'];
})->map(function ($message) {
return Message::createFromArray([
'message' => trim($message['messagePart1'] . $message['messagePart2']),
'type' => Message::TYPE_UNKNOWN,
'validFrom' => new Carbon($message['startDate']),
'validTo' => new Carbon($message['endDate']),
]);
});
}
public function getForStop(Stop $stop): Collection
{
return collect();
return $this->getAll();
}
private function queryZtmApi()
{
$item = $this->cache->getItem('ztm-gdansk.messages');
if (!$item->isHit()) {
$messages = json_decode(file_get_contents(static::MESSAGES_URL), true);
$item->expiresAfter(60);
$item->set($messages['displaysMsg']);
$this->cache->save($item);
}
return $item->get();
}
}

View File

@ -7,6 +7,7 @@ namespace App\Service;
use App\Exception\NonExistentServiceException;
use App\Provider\DepartureRepository;
use App\Provider\LineRepository;
use App\Provider\MessageRepository;
use App\Provider\StopRepository;
use const Kadet\Functional\_;
use function Kadet\Functional\any;
@ -54,6 +55,10 @@ class RepositoryParameterConverter implements ParamConverterInterface
$request->attributes->set($configuration->getName(), $provider->getDepartureRepository());
break;
case is_a($class, MessageRepository::class, true):
$request->attributes->set($configuration->getName(), $provider->getMessageRepository());
break;
default:
return false;
}
@ -66,12 +71,13 @@ class RepositoryParameterConverter implements ParamConverterInterface
public function supports(ParamConverter $configuration)
{
$instance = curry('is_a', 3)(_, _, true);
$supports = any(array_map(curry('is_a', 3)(_, _, true), [
StopRepository::class,
LineRepository::class,
DepartureRepository::class,
MessageRepository::class
]));
return any(
$instance(StopRepository::class),
$instance(LineRepository::class),
$instance(DepartureRepository::class)
)($configuration->getClass());
return $supports($configuration->getClass());
}
}