История изменений
Исправление KivApple, (текущая версия) :
Нет.
По задумке же черновик синхронизируется между устройствами, то есть у всех устройств будет один UUID черновика, пока одно из них его не отправит.
И, соответственно, когда одно из устройств отправит этот черновик, для всех устройств UUID последнего сообщения этого юзера в этом чате будет значить, что черновик надо скрыть, если он ещё не удалён. Не забываем, что в нормальных условиях черновик живёт после отправки максимум секунды (потому что бекэнд его тут же удаляет после вставки сообщения, просто из-за твоей хотелки с отсутствием транзакций это может произойти с лагом, но обязательно однажды произойдёт, даже если бекэнд упадёт между вставкой и удалением, у него должен быть какой-то механизм ретраев или фоновой подчистки мусора «удалить все черновики, для которых существуют записи в таблице сообщений с тем же UUID»).
Если же после отправки черновика какое-то устройство создаст новый черновик (с другим UUID), то этот черновик, очевидно, уже не нужно скрывать, потому что он актуальный и юзер его может редактировать на других устройствах.
Если несколько устройств создадут независимо черновики с разными UUID, то сервер может разрешить этот конфликт по принципу «кто первый встал того и тапки» (запушить этот черновик в остальные клиенты с заменой имеющихся на них черновиков для этого чата, определять кто победил можно по дате создания черновика, если юзер играется с часами и они у него не синхронизированы между устройствами, то он ССЗБ и то что у него не самый свежий черновик заменит свежий это нормально, в крайнем случае можешь встроить в протокол своего мессенджера application-level аналог NTP лол).
Если юзер написал на устройстве черновик, потом отключил его от сети, потом отправил этого черновик с другого устройства и ещё несколько сообщений после (что теперь последний UUID не этот черновик, да и в истории его не видно), а потом включил то устройство, то оно неизбежно будет подгружать кучу всего пропущенного (сообщения в чатах, черновики и т. д.), так что отображение какое-то время устаревшей информации включая черновик ожидаемо, но он исчезнет, когда подоспеет информация об удалении черновика.
Исправление KivApple, :
Нет.
По задумке же черновик синхронизируется между устройствами, то есть у всех устройств будет один UUID черновика, пока одно из них его не отправит.
И, соответственно, когда одно из устройств отправит этот черновик, для всех устройств UUID последнего сообщения этого юзера в этом чате будет значить, что черновик надо скрыть, если он ещё не удалён. Не забываем, что в нормальных условиях черновик живёт после отправки максимум секунды (потому что бекэнд его тут же удаляет после вставки сообщения, просто из-за твоей хотелки с отсутствием транзакций это может произойти с лагом, но обязательно однажды произойдёт, даже если бекэнд упадёт между вставкой и удалением, у него должен быть какой-то механизм ретраев или фоновой подчистки мусора «удалить все черновики, для которых существуют записи в таблице сообщений с тем же UUID»).
Если же после отправки черновика какое-то устройство создаст новый черновик (с другим UUID), то этот черновик, очевидно, уже не нужно скрывать, потому что он актуальный и юзер его может редактировать на других устройствах.
Если несколько устройств создадут независимо черновики с разными UUID, то сервер может разрешить этот конфликт по принципу «кто первый встал того и тапки» (запушить этот черновик в остальные клиенты с заменой имеющихся на них черновиков для этого чата, определять кто победил можно по дате создания черновика, если юзер играется с часами и они у него не синхронизированы между устройствами, то он ССЗБ и то что у него не самый свежий черновик заменит свежий это нормально, в крайнем случае можешь встроить в протокол своего мессенджера application-level аналог NTP лол).
Исправление KivApple, :
Нет.
По задумке же черновик синхронизируется между устройствами, то есть у всех устройств будет один UUID черновика, пока одно из них его не отправит.
И, соответственно, когда одно из устройств отправит этот черновик, для всех устройств UUID последнего сообщения этого юзера в этом чате будет значить, что черновик надо скрыть, если он ещё не удалён. Не забываем, что в нормальных условиях черновик живёт после отправки максимум секунды (потому что бекэнд его тут же удаляет после вставки сообщения, просто из-за твоей хотелки с отсутствием транзакций это может произойти с лагом, но обязательно однажды произойдёт, даже если бекэнд упадёт между вставкой и удалением, у него должен быть какой-то механизм ретраев или фоновой подчистки мусора «удалить все черновики, для которых существуют записи в таблице сообщений с тем же UUID»).
Исходная версия KivApple, :
Нет.
По задумке же черновик синхронизируется между устройствами, то есть у всех устройств будет один UUID черновика.
И, соответственно, когда одно из устройств отправит этот черновик, для всех устройств UUID последнего сообщения этого юзера в этом чате будет значить, что черновик надо скрыть, если он ещё не удалён. Не забываем, что в нормальных условиях черновик живёт после отправки максимум секунды (потому что бекэнд его тут же удаляет после вставки сообщения, просто из-за твоей хотелки с отсутствием транзакций это может произойти с лагом, но обязательно однажды произойдёт, даже если бекэнд упадёт между вставкой и удалением, у него должен быть какой-то механизм ретраев или фоновой подчистки мусора «удалить все черновики, для которых существуют записи в таблице сообщений с тем же UUID»).