File size: 1,556 Bytes
92a83a5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | const fs = require('fs')
const path = require('path')
const rollbacksDir = path.join(__dirname, '..', 'rollbacks')
function ensureDir() {
if (!fs.existsSync(rollbacksDir)) fs.mkdirSync(rollbacksDir, { recursive: true })
}
function snapshot(providerName, _candidateContentIgnored) {
ensureDir()
const servicesDir = path.join(__dirname, '..', 'services')
const servicePath = path.join(servicesDir, `${providerName}Service.js`)
if (!fs.existsSync(servicePath)) return null
const originalCode = fs.readFileSync(servicePath, 'utf-8')
const filePath = path.join(rollbacksDir, `rollback_${providerName}_${Date.now()}.js.bak`)
fs.writeFileSync(filePath, originalCode, 'utf-8')
return filePath
}
function getActiveSnapshot(providerName) {
ensureDir()
const files = fs.readdirSync(rollbacksDir)
.filter(f => f.startsWith(`rollback_${providerName}_`) && f.endsWith('.js.bak'))
.sort()
if (files.length === 0) return null
return path.join(rollbacksDir, files[files.length - 1])
}
function restore(providerName, snapshotPath) {
const servicesDir = path.join(__dirname, '..', 'services')
const targetPath = path.join(servicesDir, `${providerName}Service.js`)
fs.copyFileSync(snapshotPath, targetPath)
}
function clearSnapshots(providerName) {
ensureDir()
const files = fs.readdirSync(rollbacksDir)
.filter(f => f.startsWith(`rollback_${providerName}_`))
for (const f of files) {
fs.unlinkSync(path.join(rollbacksDir, f))
}
}
module.exports = {
snapshot,
getActiveSnapshot,
restore,
clearSnapshots,
}
|