Если кратко то мне необходимо доработать Text_Diff (я абсолютно не привязан конкретно к данной библиотеке, просто это первое, что я нашел в сети) так, что-бы помимо сравнения двух версий имелась возможность - отображать + удалять/восстанавливать правки по пользователям + на основе этого формировать конечный документ из:
"Исходная версия текста" -> "Одобренные правки" -> "Конечная версия текста".
Например:
Спойлер (Отобразить)
Спойлер (Отобразить)
Спойлер (Отобразить)
Спойлер (Отобразить)
Спойлер (Отобразить)
Спойлер (Отобразить)
Важно заметить что все правки добавляются не друг за другом а относительно исходной версии текста
Проблемы у меня возникают с построение архитектуры как таковой, так как ничего более здравого чем десятки сравнений версий текста на каждого пользователя я не придумал.
Пока мой малоюзабельный набросок выглядит так:
Создаем таблицу где храним текст каждой правки пользователя (текст правки каждого пользователя вычленяем сравнивая исходную версию текста и версию пользователя с правками, разницу записываем в таблицу)
Создаем таблицу с общим текстом правок от всех пользователей для последующего сравнения с текстом от каждого пользователя и подсвечиванием их правок (вот тут тупик, так как мне совсем не ясно как работать с очередностью текста, ведь каждая новая правка будет вноситься относительно исходной версии документа а не друг за другом)
В случае если два отдельных пользователя затрагивают один и тот же текст в документе размещаем их друг за другом (тоже пробел, гипотетически можно провести перекрёстное сравнение с предыдущей общей версией с внесенными правками от прочих пользователей, версией с правками от текущего пользователя и исходной версией для выделение повторяющихся правок, но звучит так себе)
По итогу вызовов text_diff там будет невероятно много (и даже с сравнением всего и вся проблема хронологии сохраняется), что убого как по архитектуре так и по производительности. Потому хотел бы попросить у вас помощи с поиском верного направления мысли или еще лучше со ссылкой на готовую библиотеку xD.
Спасибо.