apilink / utils /rollbackManager.js
franyer24's picture
grand update
92a83a5 verified
Raw
History Blame Contribute Delete
1.56 kB
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,
}