extractGroupId($data); } protected function decode(array $data): array { return [ 'id' => (int) $data['id'], 'name' => $data['name'], 'groupId' => $this->extractGroupId($data), 'backgroundURL' => $this->extractBackgroundUrl($data), 'backgroundColor' => $this->extractBackgroundColor($data), 'isFavorite' => Model::parseBool($data['is_favourite']) || Model::parseBool($data['isFavorite']), 'width' => (int) $data['width'], 'height' => (int) $data['height'], ]; } private function extractGroupId(array $data): number { if (isset($data['id_group']) === true && \is_numeric($data['id_group']) === true ) { return $data['id_group']; } else if (isset($data['groupId']) === true && \is_numeric($data['groupId']) === true ) { return $data['groupId']; } throw new \InvalidArgumentException( 'the group Id property is required and should be integer' ); } private function extractBackgroundUrl(array $data): mixed { $backgroundUrl = Model::notEmptyStringOr($data['background'], null); if ($backgroundUrl !== null) { return $backgroundUrl; } $backgroundUrl = Model::notEmptyStringOr($data['backgroundURL'], null); if ($backgroundUrl !== null) { return $backgroundUrl; } return null; } private function extractBackgroundColor(array $data): mixed { $backgroundColor = Model::notEmptyStringOr($data['background_color'], null); if ($backgroundColor !== null) { return $backgroundColor; } $backgroundColor = Model::notEmptyStringOr($data['backgroundColor'], null); if ($backgroundColor !== null) { return $backgroundColor; } return null; } }