*/ class QueueController extends AbstractStationApiCrudController { protected string $entityClass = Entity\StationQueue::class; protected string $resourceRouteName = 'api:stations:queue:record'; public function __construct( protected Entity\ApiGenerator\StationQueueApiGenerator $queueApiGenerator, protected Entity\Repository\StationQueueRepository $queueRepo, App\Doctrine\ReloadableEntityManagerInterface $em, Serializer $serializer, ValidatorInterface $validator, ) { parent::__construct($em, $serializer, $validator); } public function listAction( ServerRequest $request, Response $response ): ResponseInterface { $station = $request->getStation(); $query = $this->queueRepo->getUnplayedQuery($station); return $this->listPaginatedFromQuery( $request, $response, $query ); } /** * @param object $record * @param ServerRequest $request */ protected function viewRecord(object $record, ServerRequest $request): Entity\Api\StationQueueDetailed { if (!($record instanceof $this->entityClass)) { throw new InvalidArgumentException(sprintf('Record must be an instance of %s.', $this->entityClass)); } $router = $request->getRouter(); /** @var Entity\StationQueue $record */ $row = ($this->queueApiGenerator)($record); $row->resolveUrls($router->getBaseUrl()); $isInternal = ('true' === $request->getParam('internal', 'false')); $apiResponse = new Entity\Api\StationQueueDetailed(); $apiResponse->fromParentObject($row); $apiResponse->sent_to_autodj = $record->getSentToAutodj(); $apiResponse->is_played = $record->getIsPlayed(); $apiResponse->autodj_custom_uri = $record->getAutodjCustomUri(); $apiResponse->log = $record->getLog(); $apiResponse->links = [ 'self' => (string)$router->fromHere($this->resourceRouteName, ['id' => $record->getId()], [], !$isInternal), ]; return $apiResponse; } public function clearAction(ServerRequest $request, Response $response): ResponseInterface { $station = $request->getStation(); $this->queueRepo->clearUpcomingQueue($station); return $response->withJson(Entity\Api\Status::deleted()); } }