Как правильно организовать модерацию записей от пользователей?

Доброго времени суток!

В таблице articles: id, title, content

Нужно реализовать модерацию записей, которые создает или обновляет пользователь.

Если запись публикуется в первые, думаю добавить в таблицу articles столбец moderation, который по умолчанию 0, а при одобрении 1.

Но как поступить в случае, если пользователь редактирует уже существую запись? Текущая версия должна сохраниться, а как только пройдет модерацию - заменится на новую.

Пока что вижу только один вариант, создать новую таблицу articles_moderation с теми же полями. При обновлении записи, в нее будут писаться только новые данные. Если новая версия записи проходит модерацию - заменяем запись в таблице articles на ту, что хранится в articles_moderation и удаляем ее из articles_moderation, если модерацию не проходит, то просто удаляем запись из articles_moderation

Все ли правильно или есть какой-то более простой способ?
  • Вопрос задан
  • 101 просмотр
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
IMHO, лучше тогда выделить сущность "черновик", сохраняющую исправленную статью до её публикации, и поле этой сущности "на модерации", которое одновременно будет блокировать изменения в черновике.
Ответ написан
Adamos
@Adamos
Не экономьте на спичках и просто храните все варианты записей.
А отображайте - ту, у которой стоит пометка "активная" (это последняя отмодерированная).
Ответ написан
Комментировать
feycot
@feycot
В этом случае вам поможет внедрение конечного автомата.
Вместо использования флага и введения новой таблицы вы можете использовать ту же самую таблицу с колонкой "состояния". К пример draft, on_moderation, published, archived и так далее.
Этот способ поможет в будущем, когда будет несколько состояний. Плюс конечные автоматы помогают описать некий процесс (например у вас - публикацию и модерацию контента).
Если будет рабоатть все на флагах, то потом придется учитывать множества состояний. Типа is_moderation, is_deleted, is_achived и так далее.

А что касается, если пользователь редактирует версию уже опубликованной статьи, то здесь зависит от того, как у вас внутри приложения все устроено. Скорее всего нужно вводить таблицу с "версией" статьи, где будет сохраняться контент. Т.е. когда юзер что-то редактирует, создается новая версия, а в articles содержится id это версии article_version_id например.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы