service = $service; } public function postActionProcess(Request $request): stdClass { $params = $this->fetchRawParamsFromRequest($request); $serviceParams = ServiceParams::create() ->withIsIdle( $request->getParsedBody()->idle ?? false ); $result = $this->service->process($params, $serviceParams); if ($result->hasResult()) { $subResult = $result->getResult(); assert($subResult !== null); return (object) [ 'id' => $subResult->getAttachmentId(), ]; } return (object) [ 'exportId' => $result->getId(), ]; } public function getActionStatus(Request $request): stdClass { $id = $request->getQueryParam('id'); if (!$id) { throw new BadRequest(); } return $this->service->getStatusData($id); } public function postActionSubscribeToNotificationOnSuccess(Request $request, Response $response): void { $id = $request->getParsedBody()->id ?? null; if (!$id || !is_string($id)) { throw new BadRequest(); } $this->service->subscribeToNotificationOnSuccess($id); $response->writeBody('true'); } private function fetchRawParamsFromRequest(Request $request): Params { $data = $request->getParsedBody(); $entityType = $data->entityType ?? null; if (!$entityType) { throw new BadRequest("No entityType."); } $params['entityType'] = $entityType; $where = $data->where ?? null; $searchParams = $data->searchParams ?? $data->selectData ?? null; $ids = $data->ids ?? null; if (!is_null($where) || !is_null($searchParams)) { if (!is_null($where)) { $params['where'] = json_decode(Json::encode($where), true); } if (!is_null($searchParams)) { $params['searchParams'] = json_decode(Json::encode($searchParams), true); } } else if (!is_null($ids)) { $params['ids'] = $ids; } if (isset($data->attributeList)) { $params['attributeList'] = $data->attributeList; } if (isset($data->fieldList)) { $params['fieldList'] = $data->fieldList; } if (isset($data->format)) { $params['format'] = $data->format; } return Params::fromRaw($params); } }