-
▲3▼
Lobster (и его современные форки) — платформа для агрегации, обсуждения и хранения ссылок. Её сила — в живом сообществе и качестве контента. Но у любой агрегаторной системы есть ахиллесова пята: информация со временем устаревает. Ссылки бьются, заголовки теряют актуальность, теги не отражают суть, а авторы давно не заходят в аккаунт.
Раньше править мог только автор или администратор. Теперь — любой зарегистрированный пользователь. Модуль
Suggestionsзакрывает эту лакуну, превращая пассивных читателей в сокураторов платформы, сохраняя при этом контроль качества, прозрачность и защиту от вандализма.
🔄 Как это работает: поток предложения
-
Создание предложения
На странице истории пользователь нажимает «Предложить правку». Доступны поля: заголовок, URL, описание, теги. Данные проходят строгую валидацию до сохранения. -
Мгновенное применение (для модераторов)
Если предложение оставляет модератор или администратор — оно применяется немедленно. Правка фиксируется в логе, старые предложения к этому посту удаляются. -
Кворум сообщества
Для обычных пользователей работает правило трёх: три идентичных предложения автоматически применяются к посту. Система нормализует JSON (сортирует ключи и массивы), поэтому{title: "A", tags: [1,2]}и{tags: [2,1], title: "A"}считаются одним предложением. -
Ручная модерация
Модераторы видят очередь предложений в панели управления. Могут одобрить, отклонить с указанием причины или игнорировать. При любом действии в аудит-лог пишется запись: кто, что, когда и почему. -
Применение изменений
При одобрении или достижении кворума запускается транзакция:- Обновляются поля поста (
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 — это не просто «форма правки». Это инфраструктура коллективного курирования, которая превращает платформу из статичного архива в живой, самоочищающийся организм. Он балансирует между открытостью сообщества и контролем качества, используя прозрачные правила, транзакционную надёжность и событийную архитектуру.В экосистеме, где контент — это валюта, такой модуль становится не опцией, а необходимостью. И он уже работает.
-
Вы должны войти в аккаунт, чтобы принимать участие в обсуждениях.
-
▲3▼[–]
Интересная тема, тестирую, а теги необходимо добавит.
Комментарии (1)