LastReadPost by INDEX vs. by DATE

 
 
 
Posts:365
Возвращаясь к прежней дискуссии о том хранить ли индекс последнего прочитанного сообщения либо хранить дату. Наткнулся на такой метод:
    public void updateLastReadPostsWhenPostDeleted(Post post) {
        List<LastReadPost> lastReadPosts = lastReadPostDao.getLastReadPostsInTopic(post.getTopic());
        for (LastReadPost lastReadPost : lastReadPosts) {
            int index = lastReadPost.getPostIndex();
            if (index >= post.getPostIndexInTopic()) {
                lastReadPost.setPostIndex(index - 1);
                lastReadPostDao.saveOrUpdate(lastReadPost);
            }
        }
    }
Перевожу на русский:
  1. Найти все записи, которые ссылаются на Тему чтоб узнать является ли удаляемый Пост последним прочитанным.
  2. Если является, значит декрементим last read post index
  3. Если не является (то бишь пользователь прочел следующее за ним сообщение), значит зря выбирали этот объект.
Если бы это была дата, нам вообще не нужно было бы ничего делать. Если пользователь прочел этот пост последним и дата его создания была бы записана в LastReadPost, то дата следующего поста будет все равно больше и это сообщение останется непрочитанным. Если дата меньше, ну и ладно, тоже ничего делать не придется.

То бишь при удалении поста мы делаем то, чего могли бы не делать вовсе. Shogun, masyan, jk1, что скажете?
 
 
Posts:53
насколько я помню была в чем то проблема, что мы не можем юзать даты...но в чем была проблема я не помню
 
 
Posts:16
Тоже так и не вспомню причину, по которой дата не подходит. Надо было записать тогда.
 
 
Posts:365
Насколько я помню в прошлый раз просто решили, что оба подхода дают один и тот же результат.
 
 
Posts:53
вспомнил, проблема была в том что юзер мог не дочитаь до конца тему, а она бы ему отметилась как прочтенная
 
 
Posts:365
Это не проблема - мы запоминаем не текущую дату (System.currentDate()), а дату создания поста (того поста, что пользователь прочел).
Edited:12 Aug 2013 15:07
 
 
Posts:53
да, и потом мы выяснили что все останется тоже самое, только вместо индекса будет дата, а количество записй втаблице las_read_posts не изменится. И особого смысла нет, что-то менять
 
 
Posts:365
Вооот. А теперь я, как и обещал, привел один из примеров когда дата на самом деле будет выгодней, чем индекс :)
 
 
Posts:20
Дату, пробовали, с ней слишком много проблем. Например отредактированные посты, удаленные посты. Это все тоже обновления, но подход с датой их нормально обработать не может.
 
 
Posts:365
Дата редактирования здесь не причем, ориентироваться нужно на дату создания.
 
 
Posts:365
Короче я задачу завел, если ни у кого не осталось возражений, будем рефакторить.
 
 
Posts:81
Поправьте меня, если я что-то упустил. Задача сводится к следующему.
1. Добавить к LastReadPost поле creationDate
2. Написать миграцию, суть которой в добавлении столбца CREATION_DATE, копированию в него данных (дат) для уже имеющихся записей.
3. Рефакторинг кода для замены использования индекса поста на дату создания.
Edited:02 Sep 2013 09:55
 
 
Posts:53
ну там не дата создания будет, а дата апдейта наверно. ведь по ней же будет проверятся, обновилось там че то или нет
 
 
Posts:81
ctapobep:
Дата редактирования здесь не причем, ориентироваться нужно на дату создания.


masyan:
ну там не дата создания будет, а дата апдейта наверно. ведь по ней же будет проверятся, обновилось там че то или нет


Почему обновления то? Мы же ориентируемся на последний прочитанный пост по дате создания, так как она не меняется.
Edited:02 Sep 2013 11:17
 
 
Posts:365
Да, именно дата создания. Редактирование поста не делает его непрочитанным.
 
Moderators:katctapobepІраїдаJulia AtlyginaJulik21Julikdsafjifb
Now are browsing this topic:None