Код Senior Состояние и данные обновлено
Оптимистичный лайк с откатом
Условие
Реализуйте редьюсер оптимистичных лайков. applyLikes(posts, events) получает массив постов { id, likes, liked } и события по порядку:
["like", id, reqId]: оптимистично поставить лайк (если уже стоит, ничего не делать и запрос не запоминать);["ok", reqId]: сервер подтвердил запрос, ничего менять не нужно;["fail", reqId]: сервер отказал, откатить именно этот лайк (вернутьliked: falseи уменьшитьlikes), если он ещё не откатан.
Неизвестный reqId игнорируется. Вернуть итоговый массив постов, исходный не менять.
Примеры
applyLikes([{"id":"a","likes":5,"liked":false}], [["like", "a", "r1"]]) // [{"id":"a","likes":6,"liked":true}]
applyLikes([{"id":"a","likes":5,"liked":false}], [["like", "a", "r1"], ["ok", "r1"]]) // [{"id":"a","likes":6,"liked":true}]
applyLikes([{"id":"a","likes":5,"liked":false}], [["like", "a", "r1"], ["fail", "r1"]]) // [{"id":"a","likes":5,"liked":false}]
Как подойти
Подсказки: 2
- Запоминайте
reqId -> id постатолько для реально применённых лайков. - После
okилиfailудаляйте запрос из ожидающих.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.