Parcourir la source

Merge pull request #4746 from overleaf/ae-project-history

Add endpoint for migrating a project from track-changes to full project history

GitOrigin-RevId: 74e1fb1379a78a9569dda2007e677a4d277e38fb
Brian Gough il y a 4 ans
Parent
commit
da4fdfe11e

+ 3 - 0
services/web/.gitignore

@@ -80,3 +80,6 @@ modules/**/Makefile
 # Intellij
 .idea
 .run
+
+# Test fixture zip
+!modules/admin-panel/test/unit/src/data/track-changes-project.zip

+ 1 - 0
services/web/Dockerfile

@@ -30,6 +30,7 @@ RUN mkdir -p /app/data/dumpFolder && \
   mkdir -p /app/data/pdf && \
   mkdir -p /app/data/uploads && \
   mkdir -p /app/data/zippedProjects && \
+  mkdir -p /app/data/projectHistories && \
   chmod -R 0755 /app/data/ && \
   chown -R node:node /app/data/
 

+ 16 - 1
services/web/app/src/Features/History/HistoryManager.js

@@ -9,6 +9,7 @@ module.exports = {
   flushProject: callbackify(flushProject),
   resyncProject: callbackify(resyncProject),
   deleteProject: callbackify(deleteProject),
+  deleteProjectHistory: callbackify(deleteProjectHistory),
   injectUserDetails: callbackify(injectUserDetails),
   promises: {
     initializeProject,
@@ -16,6 +17,7 @@ module.exports = {
     resyncProject,
     deleteProject,
     injectUserDetails,
+    deleteProjectHistory,
   },
 }
 
@@ -55,10 +57,23 @@ async function flushProject(projectId) {
   }
 }
 
-async function resyncProject(projectId) {
+async function deleteProjectHistory(projectId) {
+  try {
+    await request.delete({
+      url: `${settings.apis.project_history.url}/project/${projectId}`,
+    })
+  } catch (err) {
+    throw OError.tag(err, 'failed to delete project history', {
+      projectId,
+    })
+  }
+}
+
+async function resyncProject(projectId, force = false) {
   try {
     await request.post({
       url: `${settings.apis.project_history.url}/project/${projectId}/resync`,
+      qs: { force }, // TODO: only send if true?
     })
   } catch (err) {
     throw OError.tag(err, 'failed to resync project history', { projectId })

+ 10 - 1
services/web/app/src/Features/Project/ProjectHistoryHandler.js

@@ -70,7 +70,15 @@ const ProjectHistoryHandler = {
     )
   },
 
-  upgradeHistory(project_id, callback) {
+  unsetHistory(project_id, callback) {
+    return Project.updateOne(
+      { _id: project_id },
+      { $unset: { 'overleaf.history': true } },
+      callback
+    )
+  },
+
+  upgradeHistory(project_id, allowDowngrade, callback) {
     // project must have an overleaf.history.id before allowing display of new history
     if (callback == null) {
       callback = function () {}
@@ -80,6 +88,7 @@ const ProjectHistoryHandler = {
       {
         'overleaf.history.display': true,
         'overleaf.history.upgradedAt': new Date(),
+        'overleaf.history.allowDowngrade': allowDowngrade,
       },
       function (err, result) {
         if (err != null) {

+ 1 - 0
services/web/app/src/models/Project.js

@@ -99,6 +99,7 @@ const ProjectSchema = new Schema({
       id: { type: Number },
       display: { type: Boolean },
       upgradedAt: { type: Date },
+      allowDowngrade: { type: Boolean },
     },
   },
   collabratecUsers: [

+ 0 - 0
services/web/data/projectHistories/.gitignore


Fichier diff supprimé car celui-ci est trop grand
+ 116 - 392
services/web/package-lock.json


+ 2 - 0
services/web/package.json

@@ -169,6 +169,7 @@
     "sanitize-html": "^1.27.1",
     "scroll-into-view-if-needed": "^2.2.25",
     "underscore": "^1.13.1",
+    "unzipper": "^0.10.11",
     "url-parse": "^1.4.7",
     "utf-8-validate": "^5.0.2",
     "uuid": "^3.0.1",
@@ -241,6 +242,7 @@
     "mkdirp": "0.5.1",
     "mocha": "^8.3.2",
     "mock-fs": "^4.11.0",
+    "nock": "^13.1.1",
     "node-fetch": "^2.6.1",
     "nodemon": "^2.0.6",
     "optimize-css-assets-webpack-plugin": "^5.0.3",

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff