Есть статья Article(id, name, status_id)
которая поступила на модерацию. При этом у нее меняется статус: была в черновиках, потом отправлена на ревью, потом либо возвращена либо принята.
Статус - поле в модели статьи, но помимо этого пишется история смены статусов. Типа ArticleEvent(id, article_id, old_status_id, new_status_id)
.
Также на ревью к статье могут быть установлены ошибки, ну в смысле пометки об ошибках в статье. Это отдельная моделька связанная с ивентом ArticleError(id, event_id, field_id, message)
. Но ошибки есть только у "ошибочных" ивентов - которые записаны при изменении статуса на "возвращено".
Проблема в следующем: чтобы создать ошибку на этапе ревью мне нужен созданный ивент о возврате статьи чтобы эту ошибку к нему привязать. Но статья то еще не возвращена!!! И не факт что ее вернут, возможно примут. Т.е. мне не к чему привязывать ошибку при установке.
Я пытался делать так: при переходе статьи в статус "ревью" создаю ивент "возвращено" с отдельным полем is_status_changed
- действительно ли уже изменился статус. Но потом если ошибок все же нет то его надо еще удалять при переходе статьи в статус "принято". И не забывать включать/выключать этот флаг. А еще есть старые статьи со старой историей (раньше это немного по другому было сделано) у которых при статусе "ревью" нет ивента о возврате. Вообщем это чрезвычайно запутано выходит. Очень много багов.
Еще можно наверное создавать ивент о возврате при создании первой ошибки, но ошибки могут еще и удалять (вдруг ошибочно создали), а значит и ивент надо удалять. Так что это еще запутаннее выйдет.
Подскажите как мне лучше это реализовать?
Все решилось проще некуда. Я стал привязывать ошибки не к ивенту о возврате, а к ивенту о ревью. Даже странно что я сразу об этом не подумал! :D
В твоём случае вижу только один вариант - создать промежуточный статус, который устанавливать статье при её проверке(ревью).
Т.е. статья поступила на ревью и изменила свой status_id
. В истории действий ArticleEvent
создаётся запись к которой и привязываем ошибки, если они есть.
Так же предлагаю задать самому себе вопросы, которые помог придумать конечную логику:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Опыта в разработке веб сервисов не много поэтому решил обратиться за советомЕсть такой запрос
В процессе изучения Qt столкнулся с небольшой проблемой, есть программа "Обозреватель", она в книге написана в функции main(), все работает как...
Что такое lvalue to rvalue conversion? В этой статье непонятно следующее:
Можно ли писать приложения под Android на c++ с qt в Linux и какие для этого нужны компоненты?