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`
🧩 Технический стек и решения
Модуль построен по принципу Service-Driven Architecture:
— `SuggestionController` — только маршрутизация и работа с запросом
— `SuggestionService` — вся бизнес-логика, кворум, применение правок, логирование
— Модели (`Suggestion`, `ContentLog`, `Story`) — только CRUD и параметризованные SQL
— Валидаторы — чистые классы без состояния, легко покрываются юнит-тестами
Особое внимание уделено безопасности PDO: исправлена ошибка с повторением именованных параметров в `INSERT … VALUES (…)`, заменена на позиционные плейсхолдеры. Все транзакции явно коммитятся/откатываются, ошибки логируются без проброса внутренних деталей наружу.
— --
🔮 Что дальше?
Модуль `Suggestions` — фундамент для более сложных механизмов курирования:
— **Версионирование контента**: возможность откатить правку к предыдущему состоянию
— **Репутационная система**: вес голоса пользователя зависит от истории успешных предложений
— **Автоматические проверки**: битые ссылки, дубликаты, NSFW-контент через внешние API
— **API для ботов**: Telegram/Matrix-интеграции для модерации без входа в админку
— --
✅ Итог
Suggestions в Lobster — это не просто «форма правки». Это инфраструктура коллективного курирования, которая превращает платформу из статичного архива в живой, самоочищающийся организм. Он балансирует между открытостью сообщества и контролем качества, используя прозрачные правила, транзакционную надёжность и событийную архитектуру.
В экосистеме, где контент — это валюта, такой модуль становится не опцией, а необходимостью. И он уже работает.
Комментарии (1)