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

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

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

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

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

Анекдот

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

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

smile

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

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

На 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 комментариев, но не мог даже это сделать. Т.к. ранее чего было тестировать, легло бы всё.

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

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

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

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

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

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

              Ещё есть что:

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

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

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

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

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

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

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

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

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

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

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

  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

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

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

        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, если есть, то запрос не пройдет (первая строка попытается сделать то, что уже есть и будет ошибка).

          Вообще вот от сюда следует добавить, кусками.

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

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

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

          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. smile