you have to override model from core like below.
then you have to extends in your local custom file.
class ProductRepository extends \Magento\Catalog\Model\ProductRepository
Then you have to right below getlist function for custom rating code collection.
public function getList(SearchCriteriaInterface $searchCriteria)
{
$searchCriteriaData = $this->http->get('searchCriteria');
if (!$searchCriteria) {
return;
}
foreach (array_keys((array)$searchCriteriaData) as $key) {
$value = &$searchCriteriaData[$key];
unset($searchCriteriaData[$key]);
$searchCriteriaData[SimpleDataObjectConverter::camelCaseToSnakeCase($key)] = $value;
}
/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
$collection = $this->collectionFactory->create();
$this->extensionAttributesJoinProcessor->process($collection);
$collection->addAttributeToSelect('*');
$collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner');
$collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner');
$this->joinPositionField($collection, $searchCriteria);
if(isset($searchCriteriaData['filter_groups'][1]['filters'][0]['field']) && $searchCriteriaData['filter_groups'][1]['filters'][0]['field'] == 'rat')
{
$collection->getSelect()->joinLeft(array('rova'=> 'rating_option_vote_aggregated'),'e.entity_id =rova.entity_pk_value',array("percent as rating"))
->where("rova.percent between ".$searchCriteriaData['filter_groups'][1]['filters'][0]['value']." and ".$searchCriteriaData['filter_groups'][1]['filters'][1]['value'])
->group('e.entity_id') ->GROUP("rova.percent");
$count = $collection->count();
}else{
$this->collectionProcessor->process($searchCriteria, $collection);
}
$collection->load();
$collection->addCategoryIds();
$this->addExtensionAttributes($collection);
$searchResult = $this->searchResultsFactory->create();
$searchResult->setSearchCriteria($searchCriteria);
$searchResult->setItems($collection->getItems());
if(isset($searchCriteriaData['filter_groups'][1]['filters'][0]['field'] ) && $searchCriteriaData['filter_groups'][1]['filters'][0]['field'] == 'rat')
{
$searchResult->setTotalCount($count);
}else{
$searchResult->setTotalCount($collection->getSize());
}
foreach ($collection->getItems() as $product) {
$this->cacheProduct(
$this->getCacheKey(
[
false,
$product->getStoreId()
]
),
$product
);
}
return $searchResult;
}
This is for rest API.