to implement customer specific prices you need to do two things:
(1) Add these customer/price relation to Redis.
The product prices are placed in the entry of the concrete product and then part of the StorageProductTransfer. My recommendation is to implement a new collector that creates one entry per product/customer pair and to overwrite the price in the StorageProductTransfer. This can be done in the ProductClient after the call of getProductConcreteById(). To get the current user you can provide the the SessionClient from the factory.
(2) Use the price in cart calculation.
To change the used price of an item have a look into CartDependencyProvider::getExpanderPlugins(). You need to implement your own CartItemPricePlugin and use the correct price. The plugin gets the QuoteTransfer as input parameter and you’ll need to add the customer ID here.
In case you need help, please contact me.
The most tricky part is the search. I don’t know a good strategy to implement customer specific prices with Elasticsearch. So the most pragmatic solution is to keep the default price there and to replace the shown prices in Yves with the ones from Redis. Of course sorting and filtering will be affected, but maybe that’s fair enough for now.