Есть ли готовые решения, для отмены действий на сайте, как бы SQL-undo?
Пишу проект на Latavel, есть API, через который всё делается.
Пока что думаю что придется в каждом API методе, который что-то меняет в БД, делать мини бэкап - генерировать SQL который после выполнения API метода вернет все как было и сохранять его в БД, чтобы юзер мог запускать отмену последних изменений. Например в UPDATE и DELETE методах брать WHERE получать по нему записи из БД генерить из них отменяющие UPDATE и INSERT запросы. Для INSERT генерить DELETE по ID.
Но это как-то тупо и громоздко. Может быть есть либа, которая берет SQL строку и выдает SQL отменяющий изменения?
Выглядит как утопия..
Запрос на удаление строк по параметру - выглядит элементарно, выполняется быстро. А подготовить обратную операцию - целая история. ( надо сначала выбрать все удаляемые данные, где-то их сохранить).
Причём если пользователь захочет откатить изменения не прям сейчас, а спустя какое-то время, то как обеспечить целостность данных для некой абстрактной базы..
Если есть задача хранить промежуточные состояния, то надо сразу проектировать базу с учётом этого фактора, как делают всякие wiki-подобные движки...
Реализуемо только и исключительно при монопольном использовании БД. В конкурентной среде есть ситуации, когда монопольный откат невозможен даже теоретически.
Проектируйте структуру базы данных так, чтобы сохранялась полная история действий над каждым классом данных, словно сохраняете лог для спец. служб.
Api пользователя не должно использовать DELETE, только INSERT, и UPDATE только для выставления даты удаления записи, выставления метки последней актуальной записи истории. Операцию DELETE имеет право использовать только служебный метод для зачистки истории, когда устаревшие записи становятся неактуальными ни для одного актора системы.