в том, что надо сохранять в истории состояние модели при редактировании каждый раз и иметь возможность редактировать это состояние(через ту же форму, через которую редактируется сама модель). У меня уже есть решение, но хотелось бы послушать как решили бы эту задачу другие разработчики. То есть основная задача в том, что есть некий архив изменений модели, который можно отредактировать
Напоминает аудит/es, но чтобы редактировать — это что-то новое. Прошлое нельзя изменить. Ты собираешься редактировать и изменения применить к текущей модели?
Нет, есть некоторая бизнес потребность, когда сущность редактируется в рамках некое собрания(для простоты назовём так). И нужно знать состояние модели при каждом таком изменении сущности. То есть на выходе у меня главная сущность редактируется и параллельно должна быть некая история изменений, которую можно редактировать, причём на той же форме, что и основная сущность. При редактировании истории редактируется только сама Истрия
Хорошо, и в чем сложность? Ты можешь на время редактирования «наложить» на модель изменения того времени, если тебе нужны связи, и использовать одну и ту же форму. Короче, не зная, в чем проблема, хз что советовать.
Ну например наступает сложность с использованием того же сервиса, который отвечает за редактирование сущности. То есть я например наполнил модель старыми данными и пихаю ее в сервис обновления. При сейве эта инфа полетит в текущую модель, а не в некий архив. То есть тут уже надо как-то переделывать сам сервис обновления. Для решения задачи влоб, можно создать сервисы для обновления данных именно архива, но они будут дублировать логику основного сервиса
Не нужно использовать тот же сервис. Не нужно пытаться адаптировать тот же сервис. Не нужно бояться писать новый сервис. Не нужно использовать ту же модель. Не нужно бояться дублирования, тем более его тут нет. Это совершенно другие бизнес-процессы и реализованы они должны быть по-своему. То, что они похожи, ни о чем не говорит, лучше их разделять, в будущем скажешь себе спасибо.
Хороший совет
Добавить колонку активность, а при обновлении основной модели, подписавшись в обсервео, делать репликацию модели и сохранять её с полем актив = 0 И может быть, ка это сделано у нас, создавать реплику не каждый раз, а не чаще чем 1 раз в 30 минут.
Если интерестно могу кусок обсервера скинуть, когда буду за компьютером.
Что то подобное пытаемся реализовать. Пришли к тому, что при редактировании сущностей котораые в транзакции, берём сейв перед комитом и пишем в драфт. При этом потом делаем ролбэк. К нас задача - для клиента который обновляет данные показывать историю и после апрува админами применять изменения, а для всех остальных надо показывать старое состояние и старое сос тяние обноаляем только после апрува. Пришли к тому что основные сущности обернутые в транзакцию чекаются на изменение и передаётся сохранение как ты как раз хочешь в джсон со всеми связями в очередь асинхрон. Далее просто откатываем транзакцию. А изменения лежат о дельно в драфт. Сегодня вот только совещались. Будем тестить.
Обсуждают сегодня