Как реализовать логику работы нескольких модераторов в новостном разделе сайта?
Есть сайт, на нем авторы предлагают новости. Модераторы проверяют их и либо публикуют, любо отклоняют, так же имеют возможность удалить, редактировать и т.д . Суть вопроса состоит в том как спроектировать параллельную работу N количества модераторов, что бы не возникало конфликтов между ними. Например, модератор 1 внес поправеу А, модератор 2 внес в эту же запись поправку Б, модератор 3 вообще решил удалить запись. Кто из них в таком случае имеет приоритет? И как вообще такие вещи работать должны?
1. Когда модер забирает в работу, то ставить метку (блок) чтоб другой не взял, для удобства можно юзать timestamp+id-модера
2. Если контента много, то можно аяксом пинговать что какой-то модер не закрыл материал (страницу) и продлевать время блока
Суть вопроса верно поняли, но допустим один модератор закончил свои манипуляции, запись освободилась, и тут же другой модер внесет свои поправки, кто тогла имеет приоритет, тот ктотпоследний внес, а работа первого тогда считай пропала..
Владимир Борисюк, Именно так и работает Тостер. Поправил вопрос, поправка висит пол-дня. Другой вносит правку в первоначальный вариант и твоей правки не стало. Или наоборот сначала принимается третий вариант, затем второй — и пропадает последняя.
При установке флага is_current для конкретной записи, флаги все остальных записей выставляются в False в одной транзакции
Если и будет проблемная ситуация, когда несколько человек одновременно будут ставить такой флаг, то тот у кого будет самая крайняя транзакция и установит текущую версию редакции
sim3x, а если она все же не корректная, как потом изменить версию и кто это сможет сделать? Вот например ситуация автор написал статью, 2 модератора сделали 2 версии, а модератор 3 удалил/откланил, текущей стала версия например от 2 модератора, а нам предпочтительнее версия первого, как быть?
Если вы не хотите пинговать и лишний раз нагружать сервер, то можно поступить как Redmine. Очень простая и действенная система.
При отправке формы с изменениями там отправляется на сколько я помню еще дата начала редактирования/открытия страницы и если между этой датой и текущем времени произошли изменения, то запись блокируется и выводится несколько вариантов как поступить с вашими изменениями.
Дать статьям банальный статус - Новый, модерируемый (кем), отредактируемый (кем, когда, что). Не важно какую логику именно - это решать вам.
Насчет вашего сценария - такого не должно происходить вовсе. И главная цель, банально избежать этих юзкейзов. А это как уже в комментах уже и писали - блоки как и в паралельном программировании.
Можно сделать еще по-другому. Модератор "Х" имеет право редактировать все кроме статуса модерируемый.
- Что если модератор А и Б в одно и тоже время пытаются взять 1 и туже статью? Тут уж придется делать запросы статуса статьи на подобии кнопочки "принять", в таком случае коллизий не должно случится.
Разбрасывать посты по модерам рандомно. Модераторы видят только свои посты.
Дать возможность отказа от модерации поста. Возврат поста в общий пул с переадресацией другому модератору с меньшим числом постов. Сдесь есть возможность, что посты будут гулять между модераторами по кругу.
Создать возврат авто переадресации поста, если модератор его не открывал, после определенного времени. Это как предыдущее но без воли модератора.
Дать возможность создания тикита поста по постам модерированым другим модератором.
И прочие усложнения.
При этом всём можно получить статистику об активности модераторов.