1. 3
    meta

    Lobster (и его современные форки) — платформа для агрегации, обсуждения и хранения ссылок. Её сила — в живом сообществе и качестве контента. Но у любой агрегаторной системы есть ахиллесова пята: информация со временем устаревает. Ссылки бьются, заголовки теряют актуальность, теги не отражают суть, а авторы давно не заходят в аккаунт.

    Раньше править мог только автор или администратор. Теперь — любой зарегистрированный пользователь. Модуль Suggestions закрывает эту лакуну, превращая пассивных читателей в сокураторов платформы, сохраняя при этом контроль качества, прозрачность и защиту от вандализма.


    🔄 Как это работает: поток предложения

    1. Создание предложения
      На странице истории пользователь нажимает «Предложить правку». Доступны поля: заголовок, URL, описание, теги. Данные проходят строгую валидацию до сохранения.

    2. Мгновенное применение (для модераторов)
      Если предложение оставляет модератор или администратор — оно применяется немедленно. Правка фиксируется в логе, старые предложения к этому посту удаляются.

    3. Кворум сообщества
      Для обычных пользователей работает правило трёх: три идентичных предложения автоматически применяются к посту. Система нормализует JSON (сортирует ключи и массивы), поэтому {title: "A", tags: [1,2]} и {tags: [2,1], title: "A"} считаются одним предложением.

    4. Ручная модерация
      Модераторы видят очередь предложений в панели управления. Могут одобрить, отклонить с указанием причины или игнорировать. При любом действии в аудит-лог пишется запись: кто, что, когда и почему.

    5. Применение изменений
      При одобрении или достижении кворума запускается транзакция:

      • Обновляются поля поста (title, url, description)
      • Атомарно пересинхронизируются теги (DELETE + INSERT в taggings)
      • Удаляются все активные предложения к этому посту
      • Диспатчится событие ContentUpdated
      • Записывается лог в content_logs / audit_logs

    💡 Зачем это Lobster?

    Проблема Решение через Suggestions
    Посты «замораживаются» после ухода автора Сообщество поддерживает актуальность без бюрократии
    Модераторы тонут в рутинных правках Кворум фильтрует очевидные случаи, модераторы работают только со спорными
    Непрозрачные изменения Каждый правка логируется с указанием автора, причины и старых/новых значений
    Вандализм и спам-теги Лимиты предложений на пользователя, валидация тегов, проверка доменов, квоты
    Дублирование валидации Единые Validator-классы для всех точек входа (create, update, suggest)

    🧩 Технический стек и решения

    Модуль построен по принципу Service-Driven Architecture:

    • SuggestionController — только маршрутизация и работа с запросом
    • SuggestionService — вся бизнес-логика, кворум, применение правок, логирование
    • Модели (Suggestion, ContentLog, Story) — только CRUD и параметризованные SQL
    • Валидаторы — чистые классы без состояния, легко покрываются юнит-тестами

    Особое внимание уделено безопасности PDO: исправлена ошибка с повторением именованных параметров в INSERT ... VALUES (...), заменена на позиционные плейсхолдеры. Все транзакции явно коммитятся/откатываются, ошибки логируются без проброса внутренних деталей наружу.


    🔮 Что дальше?

    Модуль Suggestions — фундамент для более сложных механизмов курирования:

    • Версионирование контента: возможность откатить правку к предыдущему состоянию
    • Репутационная система: вес голоса пользователя зависит от истории успешных предложений
    • Автоматические проверки: битые ссылки, дубликаты, NSFW-контент через внешние API
    • API для ботов: Telegram/Matrix-интеграции для модерации без входа в админку

    ✅ Итог

    Suggestions в Lobster — это не просто «форма правки». Это инфраструктура коллективного курирования, которая превращает платформу из статичного архива в живой, самоочищающийся организм. Он балансирует между открытостью сообщества и контролем качества, используя прозрачные правила, транзакционную надёжность и событийную архитектуру.

    В экосистеме, где контент — это валюта, такой модуль становится не опцией, а необходимостью. И он уже работает.

Вы должны войти в аккаунт, чтобы принимать участие в обсуждениях.


Комментарии (1)

  1. 3
    [–]
    German | 29.06.2026 05:05 (изменен)

    Интересная тема, тестирую, а теги необходимо добавит.