service = $service; } public function postActionProcess(Request $request): stdClass { $body = $request->getParsedBody(); $entityType = $body->entityType ?? null; $action = $body->action ?? null; $params = $body->params ?? null; $data = $body->data ?? (object) []; if (!$entityType || !$action || !$params) { throw new BadRequest(); } $rawParams = $this->prepareMassActionParams($params); try { $massActionParams = Params::fromRaw($rawParams, $entityType); } catch (RuntimeException $e) { throw new BadRequest($e->getMessage()); } $result = $this->service->process( $entityType, $action, $massActionParams, $data ); return $this->convertResult($result); } private function prepareMassActionParams(stdClass $data): array { $where = $data->where ?? null; $searchParams = $data->searchParams ?? null; $ids = $data->ids ?? null; if (!is_null($where) || !is_null($searchParams)) { $params = []; if (!is_null($where)) { $params['where'] = json_decode(json_encode($where), true); } if (!is_null($searchParams)) { $params['searchParams'] = json_decode(json_encode($searchParams), true); } return $params; } if (!is_null($ids)) { return [ 'ids' => $ids, ]; } throw new BadRequest("Bad search params for mass action."); } private function convertResult(Result $result): stdClass { $data = (object) []; if ($result->hasCount()) { $data->count = $result->getCount(); } if ($result->hasIds()) { $data->ids = $result->getIds(); } return $data; } }