| 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, |
| } |
|
|