*/ class MountsController extends AbstractStationApiCrudController { protected string $entityClass = Entity\StationMount::class; protected string $resourceRouteName = 'api:stations:mount'; public function __construct( ReloadableEntityManagerInterface $em, Serializer $serializer, ValidatorInterface $validator, protected Entity\Repository\StationMountRepository $mountRepo ) { parent::__construct($em, $serializer, $validator); } protected function viewRecord(object $record, ServerRequest $request): mixed { /** @var Entity\StationMount $record */ $return = parent::viewRecord($record, $request); $station = $request->getStation(); $frontend = $request->getStationFrontend(); $router = $request->getRouter(); $return['links']['intro'] = (string)$router->fromHere( route_name: 'api:stations:mounts:intro', route_params: ['id' => $record->getId()], absolute: true ); $return['links']['listen'] = (string)Router::resolveUri( $router->getBaseUrl(), $frontend->getUrlForMount($station, $record), true ); return $return; } public function createAction( ServerRequest $request, Response $response ): ResponseInterface { $station = $request->getStation(); $parsedBody = (array)$request->getParsedBody(); $record = $this->editRecord( $parsedBody, new Entity\StationMount($station) ); if (!empty($parsedBody['intro_file'])) { $intro = UploadedFile::fromArray($parsedBody['intro_file'], $station->getRadioTempDir()); $this->mountRepo->setIntro($record, $intro); } return $response->withJson($this->viewRecord($record, $request)); } public function deleteAction( ServerRequest $request, Response $response, mixed $station_id, mixed $id ): ResponseInterface { $record = $this->getRecord($this->getStation($request), $id); if (null === $record) { return $response->withStatus(404) ->withJson(Entity\Api\Error::notFound()); } $this->mountRepo->destroy($record); return $response->withJson(Entity\Api\Status::deleted()); } /** * @inheritDoc */ protected function getStation(ServerRequest $request): Entity\Station { $station = parent::getStation($request); $frontend = $request->getStationFrontend(); if (!$frontend->supportsMounts()) { throw new StationUnsupportedException(); } return $station; } }