Придумать логику установки ошибок

156
17 октября 2018, 21:40

Есть статья 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 - действительно ли уже изменился статус. Но потом если ошибок все же нет то его надо еще удалять при переходе статьи в статус "принято". И не забывать включать/выключать этот флаг. А еще есть старые статьи со старой историей (раньше это немного по другому было сделано) у которых при статусе "ревью" нет ивента о возврате. Вообщем это чрезвычайно запутано выходит. Очень много багов.

Еще можно наверное создавать ивент о возврате при создании первой ошибки, но ошибки могут еще и удалять (вдруг ошибочно создали), а значит и ивент надо удалять. Так что это еще запутаннее выйдет.

Подскажите как мне лучше это реализовать?

Answer 1

Все решилось проще некуда. Я стал привязывать ошибки не к ивенту о возврате, а к ивенту о ревью. Даже странно что я сразу об этом не подумал! :D

Answer 2

В твоём случае вижу только один вариант - создать промежуточный статус, который устанавливать статье при её проверке(ревью). Т.е. статья поступила на ревью и изменила свой status_id. В истории действий ArticleEventсоздаётся запись к которой и привязываем ошибки, если они есть.

Так же предлагаю задать самому себе вопросы, которые помог придумать конечную логику:

  1. Не вижу смысла удалять ивент "Ревью" если нет ошибок. Действией было? Было -значит надо отразить в истории.
  2. Как будешь использовать ошибки - от этого зависит логика их получения и обработки
  3. Почему ты не разберёшься в старой логике и не используешь её? Если это только твоё желание и несет прямой пользы - не выдумывай велосипедов.
READ ALSO
Создание SOAP запроса

Создание SOAP запроса

Опыта в разработке веб сервисов не много поэтому решил обратиться за советомЕсть такой запрос

139
Унаследованный класс от QSplitter

Унаследованный класс от QSplitter

В процессе изучения Qt столкнулся с небольшой проблемой, есть программа "Обозреватель", она в книге написана в функции main(), все работает как...

190
lvalue to rvalue conversion

lvalue to rvalue conversion

Что такое lvalue to rvalue conversion? В этой статье непонятно следующее:

186
Qt Android в Linux

Qt Android в Linux

Можно ли писать приложения под Android на c++ с qt в Linux и какие для этого нужны компоненты?

158