Тестовый пост (миграция комментариев)

Evg Evg 19 Ноября 2023

Объединил Ответы и Комментарии. Однако пришлось пожертвовать лайками с 2 уровня вложения и комментарии были потеряны с 3.

Спасает только то, что это надо было сделать чтобы двигаться далее. И ещё то, что обычно ценность комментариев на самом деле минимально.

Они обычно бывают важны только в момент написания.

Анекдот

Драчливый мужик сидит на свадьбе, вздыхает и говорит:

Ну, сиди — не сиди, а начинать надо, — и переворачивает стол.

:)

Чтобы быстрей работа была, залил сюда, буду отлавливать ошибки.

Теперь комментарии это комментарии, есть посты и есть комментарии к ним. Ничего большего. А вот далее будем их развивать. Теперь это просто.

На GitHub:
Показаны 96 измененных файлов, 1011 добавлений и 1639 удалений.

https://github.com/LibArea/libarea/commit/40f9345ea49d65b873531dbfed143a318e6a86b3

30 Ответов

  1. German German 19 Ноября 2023

    C почином! Миграция без ошибок прошла?

    1. Evg Evg 19 Ноября 2023

      Без ошибок, я проверял 2 раза, но мало ли. Часть комментариев потеряны. Я не стал делать временную таблицу, туда переносить, определять при миграции новые id и т.д.

      1. German German 19 Ноября 2023 (ред.)

        А запросов в посту на сколько меньше стало?

        1. Evg Evg 19 Ноября 2023 (ред.)

          Ранее было N+1 и зависело от количество комментариев. Запросов 10 точно в среднем ушло, там жуть была на самом деле. ( комментарии это было первое, что делал на этом сайте. И ещё взял самую сложную схему. )


          Меня как бы подбивали ввести страницы, протестировать на 50.000 комментариев, но не мог даже это сделать. Т.к. ранее чего было тестировать, легло бы всё.

          А теперь вот можно смотреть. :) И плюс ещё, вложения сделал нормальные.

          Некоторая служебная информация пока видна, далее отключю.

          1. OleStep OleStep 20 Ноября 2023 (ред.)

            Отметку про мобильную платформу в комментариях предусмотрели?

            1. Evg Evg 20 Ноября 2023 (ред.)

              Да, это есть уже. Ctrl+F5 и можно видеть иконку телефона рядом с моим ником. :)

              Ещё есть что:

              • нормальная подсветка коммента с фикс. шапкой;
              • возможно менять автора коммента.

              И осталось сделать вывод любого в корень и посмотреть моб. версию. Там шаг в отступах надо сделать меньше.

  1. Adre Adre 19 Ноября 2023

    Возможно увеличить количество выводимых комментариев на центральной странице?

    1. Evg Evg 19 Ноября 2023

      Можно увеличить, только высоту экрана надо будет наверное учитывать. Посмотрим.

  1. Visman Visman 19 Ноября 2023

    протестировать на 50.000 комментариев

    Маловато будет:

    1. Evg Evg 19 Ноября 2023

      Ужас ужасный :) ничего, протестируем сколько надо. )

  1. pupsik pupsik 19 Ноября 2023

    есть посты и есть комментарии к ним.

    А что раньше было?

    1. Evg Evg 19 Ноября 2023

      Ответы. Разные таблицы были. Если отвечать на пост, то это ответы — таблица answers, а если ответить на этот ответ, то комментарий. Теперь везде комментарии. Запросов и кода стало значительно меньше. Значит легче стало и быстрей. Не только для нагрузки, но и для разработки.

      1. pupsik pupsik 19 Ноября 2023

        Ясно…

  1. pupsik pupsik 19 Ноября 2023 (ред.)
    body.dark .content_tree {
      padding: 5px;
    }

    Паддинг это я зря посоветовал. Так как выделенный коммент уходит вверх. Извеняюсь. Всего не предвидишь без тестов

    ошибки

    1. Evg Evg 19 Ноября 2023

      Тут на самом деле ошибок много, я буду уже завтра смотреть. Изменения были не только в css, но и в html.

      1. pupsik pupsik 19 Ноября 2023

        Аа, нуу чего не знаю того не знаю, может паддинг и не причем. Я же не знаю какие изменения в хтмл произошли. Ладно, не буду мешать.

  1. Nikita Nikita 20 Ноября 2023 (ред.)

    Что тут происходит, почему кнопка ответить не работает?!
    Почему сортировка по дате уехала к бабушке на кулички?!

    Сортировка

    1. Evg Evg 20 Ноября 2023 (ред.)

      Я написал выше, что происходит. Работы идут, не забываем чистить кеш. Сайт может штормить сегодня / завтра. )

  1. Toshiro Toshiro 20 Ноября 2023

    А мне нравится такое нововведение, простота мне по душе))

    1. Evg Evg 20 Ноября 2023

      Да, да… теперь хоть порядок можно навести. И со стороны логика более простая, а то раньше: ответы, комментарии, где и что? Объединять надо чтобы показать и т.д. Теперь проще. )

      1. Toshiro Toshiro 20 Ноября 2023

        И в плане дизайна выводить комменты проще))

      1. yuran yuran 20 Ноября 2023 (ред.)

        Вот и мне всегда непонятно было… какие ответы если везде по сути комментарии:) Даже помню я Evg с этим вопросом доставал… Потом заткнулся, чтобы не выглядеть полным дебилом:)

        А в базе значит надо выполнить это?

        ALTER TABLE `facets` ADD `facet_is_comments` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Are comments closed (posts, websites...)?' AFTER `facet_type`; 
        
        
        ALTER TABLE `answers` ADD `answer_parent_id` INT(11) NOT NULL DEFAULT '0' AFTER `answer_post_id`; 
        
        INSERT INTO answers (answer_post_id, 
                            answer_user_id, 
                            answer_parent_id,
                            answer_date, 
                            answer_modified, 
                            answer_ip, 
                            answer_content, 
                            answer_published, 
                            answer_is_deleted)
                SELECT comment_post_id, 
                        comment_user_id, 
                        comment_answer_id,
                        comment_date, 
                        comment_modified,
                        comment_ip, 
                        comment_content, 
                        comment_published, 
                        comment_is_deleted
                                FROM comments WHERE comment_parent_id = 0;
        
        
        ALTER TABLE `posts` DROP `post_comments_count`;
        ALTER TABLE `answers` DROP `answer_order`;
        ALTER TABLE `answers` DROP `answer_after`;
        ALTER TABLE `users_setting` DROP `setting_email_comment`;
        
        
        UPDATE files SET file_type = 'comment' WHERE file_type = 'answer';
        
        DROP TABLE `votes_comment`;
        ALTER TABLE `votes_answer` RENAME TO `votes_comment`;
        
        ALTER TABLE `votes_comment` CHANGE `votes_answer_id` `votes_comment_id` INT(11) NOT NULL AUTO_INCREMENT, CHANGE `votes_answer_item_id` `votes_comment_item_id` INT(11) NOT NULL, CHANGE `votes_answer_points` `votes_comment_points` INT(11) NOT NULL, CHANGE `votes_answer_ip` `votes_comment_ip` VARCHAR(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, CHANGE `votes_answer_user_id` `votes_comment_user_id` INT(11) NOT NULL DEFAULT '1', CHANGE `votes_answer_date` `votes_comment_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
        
        
        DROP TABLE `comments`;
        ALTER TABLE `answers` RENAME TO `comments`;
        
        ALTER TABLE `comments` CHANGE `answer_id` `comment_id` INT(11) NOT NULL AUTO_INCREMENT, CHANGE `answer_post_id` `comment_post_id` INT(11) NOT NULL DEFAULT '0', CHANGE `answer_parent_id` `comment_parent_id` INT(11) NOT NULL DEFAULT '0', CHANGE `answer_user_id` `comment_user_id` INT(11) NOT NULL DEFAULT '0', CHANGE `answer_date` `comment_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, CHANGE `answer_modified` `comment_modified` TIMESTAMP NOT NULL DEFAULT '2020-12-31 03:00:00', CHANGE `answer_published` `comment_published` TINYINT(1) NOT NULL DEFAULT '1', CHANGE `answer_ip` `comment_ip` VARBINARY(16) NULL DEFAULT NULL, CHANGE `answer_votes` `comment_votes` SMALLINT(6) NOT NULL DEFAULT '0', CHANGE `answer_content` `comment_content` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, CHANGE `answer_lo` `comment_lo` INT(11) NOT NULL DEFAULT '0', CHANGE `answer_is_deleted` `comment_is_deleted` TINYINT(1) NOT NULL DEFAULT '0';
        
        ALTER TABLE `posts` CHANGE `post_answers_count` `post_comments_count` INT(11) NULL DEFAULT '0'; 
        
        UPDATE `audits`  SET `action_type` = 'comment' WHERE `action_type` = 'answer';
        
        ALTER TABLE `facets` ADD `facet_is_comments` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Are comments closed (posts, websites...)?' AFTER `facet_type`; 
        UPDATE `favorites` SET `action_type` = 'comment' WHERE `action_type` = 'answer'; 
        ALTER TABLE `comments` ADD `comment_is_mobile` TINYINT(1) NOT NULL DEFAULT '0' AFTER `comment_lo`; 
        1. pupsik pupsik 20 Ноября 2023

          Вот, еще одна идея для @Evg . Когда цитата или код длинные, поставить max-height:250px overflow:hidden. И внузу яваскрипт div, show/hide.

          1. Evg Evg 21 Ноября 2023 (ред.)

            Там есть чуток другая реализация. Подправил код. Появилось копирование с том числе, и скролл, просто код надо указать какой за 3 первыми кавычками (это разметка), этой sql был.

             ```sql
             тут код
             или
             ```php
             и т.д.

            А все указывают просто 3 первые кавычки без языка. Но это разметка Markdown. Форматирование многое понимает, просто требует показывать, что это.

            1. pupsik pupsik 21 Ноября 2023 (ред.)

              Раз такое дело что люди не ставят какой код именно(я тоже) тогда надо взять как реализован вывод с php или mysql, и прикрутить его к quote. тоесть к голому «`»»

        1. Evg Evg 21 Ноября 2023 (ред.)

          Надо посмотреть есть ли поле facet_is_comments в таблице facets, если есть, то запрос не пройдет (первая строка попытается сделать то, что уже есть и будет ошибка).

          Не забывать только сделать бекаб базы. Это очень актуально сейчас!

          А по поводу ответов и комментариев, не всё золото, что блестит. Не все комментарии были комментариями. Визуально все было отлично, они выглядили так. Но под капотом было совсем всё по другому. Сложно. Теперь стало проще.

          1. yuran yuran 21 Ноября 2023 (ред.)

            Надо посмотреть есть ли поле facet_is_comments в таблице facets

            Да, у меня есть такое в поле в facets. Просто удалить его?

            1. Evg Evg 22 Ноября 2023

              Нет. Значит это поле есть и его добавлять не надо, а именно это делает 1 строка в опубликованном тобой коде тут.

              Короче, как написал выше, надо сделать запросы с 1588 строки:

              https://github.com/LibArea/libarea/blob/main/dev.sql#L1588

  1. Yori Yori 21 Ноября 2023

    А комментарии будут сворачиваться?

    1. Evg Evg 21 Ноября 2023 (ред.)

      Да, это надо доделать. Там набросок уже есть.

      P.S. Дополнил: сделал. Ctrl+F5. Js нет, только css. :)