logger = $logger; $this->service = $service; $this->mapper = $mapper; $this->tableService = $tableService; $this->userId = $userId; } #[NoAdminRequired] #[RequirePermission(permission: Application::PERMISSION_READ, type: Application::NODE_TYPE_TABLE, idParam: 'tableId')] public function index(int $tableId): DataResponse { return $this->handleError(function () use ($tableId) { return $this->service->findAll($this->getTable($tableId), $this->userId); }); } #[NoAdminRequired] public function indexSharedWithMe(): DataResponse { return $this->handleError(function () { return $this->service->findSharedViewsWithMe($this->userId); }); } #[NoAdminRequired] #[RequirePermission(permission: Application::PERMISSION_READ, type: Application::NODE_TYPE_VIEW, idParam: 'id')] public function show(int $id): DataResponse { return $this->handleError(function () use ($id) { return $this->service->find($id); }); } #[NoAdminRequired] #[RequirePermission(permission: Application::PERMISSION_MANAGE, type: Application::NODE_TYPE_TABLE, idParam: 'tableId')] public function create(int $tableId, string $title, ?string $emoji): DataResponse { return $this->handleError(function () use ($tableId, $title, $emoji) { return $this->service->create($title, $emoji, $this->getTable($tableId, true)); }); } #[NoAdminRequired] #[RequirePermission(permission: Application::PERMISSION_MANAGE, type: Application::NODE_TYPE_VIEW, idParam: 'id')] public function update(int $id, array $data): DataResponse { return $this->handleError(function () use ($id, $data) { return $this->service->update($id, $data, $this->userId); }); } #[NoAdminRequired] #[RequirePermission(permission: Application::PERMISSION_MANAGE, type: Application::NODE_TYPE_VIEW, idParam: 'id')] public function destroy(int $id): DataResponse { return $this->handleError(function () use ($id) { return $this->service->delete($id); }); } /** * @param int $tableId * @param bool $skipTableEnhancement * @return Table * @throws InternalError * @throws NotFoundError * @throws PermissionError */ private function getTable(int $tableId, bool $skipTableEnhancement = false): Table { try { return $this->tableService->find($tableId, $skipTableEnhancement); } catch (InternalError $e) { $this->logger->error($e->getMessage(), ['exception' => $e]); throw new InternalError($e->getMessage()); } catch (NotFoundError $e) { $this->logger->warning($e->getMessage(), ['exception' => $e]); throw new NotFoundError($e->getMessage()); } catch (PermissionError $e) { $this->logger->warning($e->getMessage(), ['exception' => $e]); throw new PermissionError($e->getMessage()); } } }