О функции «отменить отправку», наиболее очевидный способ сделать это на самом деле не «делать» то, что вы хотите «отменить».
Что я имею в виду:
- Когда пользователь нажимает кнопку «отправить», вам не следует отправлять сообщение
- Вместо этого вы должны пометить его как «отправить за X секунд» - поместите его в какую-то очередь, например
- Это означает, что оно будет отправлено только через X секунд, а не сразу.
- В течение этого X секунд, если пользователь нажимает «отменить отправку», вам просто нужно удалить это письмо из «очереди ожидания»
Конечно, вы не можете "отменить отправку" по почте, которая уже была отправлена: она ушла с вашего сервера, и вы ничего не можете с этим поделать.
Для этого вам понадобится:
- Некоторая очередь для действий
- Чтобы поместить ваши данные в эту очередь, когда пользователь нажимает кнопку «отправить»
- Чтобы иметь какой-то пакет, который действительно отправляет данные, которые находились в очереди более X секунд
- Чтобы удалить данные из очереди, когда пользователь нажимает кнопку «Отменить отправку».
Эту же идею можно применить к «отменить удаление»:
- Когда пользователь нажимает «удалить», физически не удаляйте данные
- Вместо этого используйте некоторый логический флаг, чтобы указать, что его следует считать удаленным
- Тогда удаление допинга означает, что удаление означает только отключение этого флага
Это может быть легко реализовано на любом языке:
- Добавить поле
is_deleted
к вашим данным
- При отображении данных отфильтруйте те, для которых этот флаг включен
- При удалении вместо физического удаления установите этот флаг
- При удалении снимите этот флаг
«Отменить сохранение» может быть немного сложнее: решение было бы сохранить не одну версию сообщения, а несколько:
- Каждый раз, когда пользователь нажимает «сохранить», вы должны сохранять новую версию сообщения
- Это означает, что через некоторое время вы получите множество версий сообщения
- Что позволит вам «вернуться» к предыдущей версии, восстановив ее из истории.
Это можно сделать:
- добавление нового поля с названием "
version
" в ваши данные.
- каждый раз, когда пользователь сохраняет, просто увеличивайте это поле и сохраняйте копию данных
- т.е. никогда не обновляйте никакие существующие данные, но всегда вставляйте новую версию.
- тогда «отменить сохранение» означает только «получить предыдущую версию данных»