SHiNE-server/TODO/medium/2026-05-24_1140_репосты_в_каналах_и_тредах.md
2026-06-28 09:30:59 +04:00

7.5 KiB
Raw Blame History

Репосты в каналах и тредах

  • Статус: future

  • Горизонт: medium

  • Ориентир: 1-2 месяца

  • Решение от 2026-05-24: Репосты временно убраны из активной разработки. Фича уже была частично реализована, но не доведена до финальной проверки. Чтобы она не мешала запуску проекта, пользовательский вход в репосты отключён в UI, а сервер больше не принимает новые TEXT_REPOST через AddBlock.

Что должна делать фича

Репост должен позволять взять сообщение из канала или треда и опубликовать его в один из своих каналов с комментарием.

Ожидаемый пользовательский сценарий после возврата к задаче:

  1. Пользователь открывает сообщение в канале или треде.
  2. Нажимает Репост.
  3. Выбирает один из своих каналов.
  4. Добавляет комментарий.
  5. Отправляет репост.
  6. В целевом канале появляется новый пост-репост.
  7. У репоста есть переход к исходному сообщению через действие Оригинал.

Что уже есть в коде

  • В блокчейн-формате зарезервирован и описан подтип TEXT_REPOST (30).
  • Парсер блокчейна умеет распознавать тело репоста как TextLineBody.
  • В UI есть функция сборки тела репоста: shine-UI/js/services/auth-service.js, makeTextRepostBodyBytes.
  • В UI есть клиентская операция: shine-UI/js/services/auth-service.js, addBlockRepost.
  • В экране канала был обработчик репоста: shine-UI/js/pages/channel-view.js, onRepost.
  • В экране треда был обработчик репоста: shine-UI/js/pages/channel-thread-view.js, onRepost.
  • Серверная выдача каналов и тредов частично учитывает TEXT_REPOST и target-поля: targetBlockchainName, targetBlockNumber, targetBlockHash.
  • В списке подписок TEXT_REPOST считается публикацией канала.

Что сейчас отключено

  • В shine-UI/js/pages/channel-view.js кнопка Репост больше не создаётся и не добавляется в список действий сообщения.
  • В shine-UI/js/pages/channel-thread-view.js кнопка Репост больше не создаётся и не добавляется в список действий ответа/сообщения треда.
  • В shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java добавлена явная временная блокировка: если новый блок имеет type=1 и subType=TEXT_REPOST (30), AddBlock возвращает ошибку repost_disabled.

Что осталось активным намеренно

  • Константа TEXT_REPOST (30) остаётся в коде и документации как зарезервированный формат.
  • Парсер блокчейна продолжает знать формат TEXT_REPOST, чтобы не потерять уже написанную основу и не ломать потенциальное чтение старых тестовых данных.
  • Код формирования репоста в auth-service.js не удалён: его можно будет использовать как основу при возвращении к задаче.
  • Код отображения target-полей и перехода к оригиналу не удалён: он нужен для будущей проверки и возможной совместимости с уже созданными тестовыми блоками.

Почему это не лежит в Pending_Features

Dev_Docs/Pending_Features/ предназначена для фич, которые уже реализованы и ждут ручной проверки.

Репосты сейчас не подходят под этот статус: они не должны проверяться как готовая фича, потому что пользовательский сценарий временно закрыт, а серверная запись новых репостов заблокирована. Поэтому старый pending-файл удалён, а задача перенесена сюда как будущая.

Что сделать при возврате к реализации

  1. Решить, остаётся ли формат TEXT_REPOST (30) финальным.
  2. Если формат меняется, заранее предупредить пользователя и получить отдельное подтверждение на изменение блокчейн-формата.
  3. Вернуть UI-кнопки репоста в:
    • shine-UI/js/pages/channel-view.js;
    • shine-UI/js/pages/channel-thread-view.js.
  4. Снять временную блокировку repost_disabled в: shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java.
  5. Проверить auth-service.js:
    • makeTextRepostBodyBytes;
    • addBlockRepost;
    • актуализацию вершины блокчейна перед AddBlock;
    • корректность target-полей исходного сообщения.
  6. Проверить серверное чтение:
    • GetChannelMessages;
    • GetMessageThread;
    • отображение targetBlockchainName, targetBlockNumber, targetBlockHash.
  7. Добавить или обновить тесты на успешный репост и отказ некорректных target-полей.
  8. Обновить документацию:
    • Dev_Docs/Blockchain/11_TEXT_Blocks.md;
    • Dev_Docs/Blockchain/CHANGELOG.md;
    • Dev_Docs/API/04_Add_Block_to_Blockchain_API.md;
    • документы API чтения каналов/тредов, если изменятся поля ответа.
  9. После реализации перенести задачу из Dev_Docs/Future_Features/ в Dev_Docs/Pending_Features/ как фичу, требующую ручной проверки.

Минимальный чек-лист ручной проверки в будущем

  1. Репост из сообщения канала в свой канал.
  2. Репост из ответа в треде в свой канал.
  3. Ошибка при попытке репоста в чужой канал.
  4. Переход Оригинал из репоста к исходному сообщению.
  5. Корректное отображение комментария к репосту.
  6. Корректная работа после перезагрузки страницы.
  7. Отсутствие поломки обычных постов, ответов, лайков и отправки ссылки.