Моя платформа основана на REST API, который используется веб-приложением и клиентом приложения для планшета. Объекты сохраняются в коллекции MongoDB. Участвующая сущность - это «человек», которому я могу отправить электронное письмо.
Детали электронной почты сохраняются в сущности (как вложенное свойство) после того, как электронная почта отправляется асинхронным процессом (инициируется очередью сообщений),У каждого объекта есть «last_update_date», которое обновляется для каждого обновления, и это свойство используется бэкэндом для проверки того, был ли изменен элемент, который должен быть обновлен, начиная с последней версии, в противном случае запрос на обновление отклоняется. Объекты сохраняются с помощью вызовов POST, и весь объект в основном заменяется.
Проблема, которую я пытаюсь решить, состоит в следующем: как обращаться с обновлениями асинхронными процессами? Допустим, я хочу асинхронно обрабатывать отправку электронной почты, поскольку генерация контента занимает слишком много времени, и конечный пользователь может чувствовать разочарование. Когда запрос от клиента получен серверной частью, он ставит задачу в отдельную очередь и возвращает HTTP 202 (Принят).
Допустим, пользователь снова изменит сущность и внесет некоторые изменения. Независимо от того, кто (между асинхронным процессом и пользователем) попытается сохранить как последний из двух, второй запрос будет отклонен. Как лучше всего справиться с этим?
Даже если я использую метод PATCH и применяю логику для обновления только соответствующих полей, как я могу обработать второе обновление?