Merge pull request #19743 from overleaf/mj-restore-project

[web+project-history] Add project version reverting

GitOrigin-RevId: 0f77cec730393187d531c0c6561faaa652bebf29
This commit is contained in:
Mathias Jakobsen
2024-08-20 14:44:21 +01:00
committed by Copybot
parent 54f0c24633
commit 654d96ace6
25 changed files with 619 additions and 13 deletions

View File

@@ -6,6 +6,7 @@ const assert = require('check-types').assert
// dependency
let RestoreOrigin = null
let RestoreFileOrigin = null
let RestoreProjectOrigin = null
/**
* An Origin records where a {@link Change} came from. The Origin class handles
@@ -34,6 +35,8 @@ class Origin {
if (raw.kind === RestoreOrigin.KIND) return RestoreOrigin.fromRaw(raw)
if (raw.kind === RestoreFileOrigin.KIND)
return RestoreFileOrigin.fromRaw(raw)
if (raw.kind === RestoreProjectOrigin.KIND)
return RestoreProjectOrigin.fromRaw(raw)
return new Origin(raw.kind)
}
@@ -58,3 +61,4 @@ module.exports = Origin
RestoreOrigin = require('./restore_origin')
RestoreFileOrigin = require('./restore_file_origin')
RestoreProjectOrigin = require('./restore_project_origin')

View File

@@ -0,0 +1,51 @@
'use strict'
const assert = require('check-types').assert
const Origin = require('.')
class RestoreProjectOrigin extends Origin {
/**
* @param {number} version that was restored
* @param {Date} timestamp from the restored version
*/
constructor(version, timestamp) {
assert.integer(version, 'RestoreProjectOrigin: bad version')
assert.date(timestamp, 'RestoreProjectOrigin: bad timestamp')
super(RestoreProjectOrigin.KIND)
this.version = version
this.timestamp = timestamp
}
static fromRaw(raw) {
return new RestoreProjectOrigin(raw.version, new Date(raw.timestamp))
}
/** @inheritdoc */
toRaw() {
return {
kind: RestoreProjectOrigin.KIND,
version: this.version,
timestamp: this.timestamp.toISOString(),
}
}
/**
* @return {number}
*/
getVersion() {
return this.version
}
/**
* @return {Date}
*/
getTimestamp() {
return this.timestamp
}
}
RestoreProjectOrigin.KIND = 'project-restore'
module.exports = RestoreProjectOrigin