feat: обновление с Git из админки (/admin/system)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -4,6 +4,7 @@ const { requireAdmin } = require('../middleware/auth');
|
||||
const { asyncHandler } = require('../utils/asyncHandler');
|
||||
const { ROLE_LABELS } = require('../constants/roles');
|
||||
const { notifyIfBackInStock } = require('../services/stock-alerts');
|
||||
const gitDeploy = require('../services/git-deploy');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
@@ -349,4 +350,69 @@ router.post(
|
||||
})
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/system',
|
||||
asyncHandler(async (req, res) => {
|
||||
const fetchRemote =
|
||||
req.query.checked === '1' || req.query.done === '1' || req.query.failed === '1';
|
||||
|
||||
let updateLog = null;
|
||||
let updateOk = false;
|
||||
let updateFail = false;
|
||||
let updateCode = null;
|
||||
|
||||
if (req.query.done === '1' || req.query.failed === '1') {
|
||||
updateLog = req.session.adminUpdateLog || null;
|
||||
updateOk = req.session.adminUpdateOk === true;
|
||||
updateFail = req.session.adminUpdateOk === false;
|
||||
updateCode = req.session.adminUpdateCode ?? null;
|
||||
delete req.session.adminUpdateLog;
|
||||
delete req.session.adminUpdateOk;
|
||||
delete req.session.adminUpdateCode;
|
||||
}
|
||||
|
||||
const git = await gitDeploy.getGitInfo({ fetchRemote: !!fetchRemote });
|
||||
res.render('admin/system', {
|
||||
title: 'Обновление',
|
||||
git,
|
||||
updateLog,
|
||||
updateOk,
|
||||
updateFail,
|
||||
updateCode,
|
||||
confirmError: req.query.error === 'confirm',
|
||||
disabledError: req.query.error === 'disabled',
|
||||
});
|
||||
})
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/system/check',
|
||||
asyncHandler(async (req, res) => {
|
||||
res.redirect('/admin/system?checked=1');
|
||||
})
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/system/update',
|
||||
asyncHandler(async (req, res) => {
|
||||
if (!gitDeploy.isUpdateEnabled()) {
|
||||
return res.redirect('/admin/system?error=disabled');
|
||||
}
|
||||
const confirm = (req.body.confirm || '').trim().toLowerCase();
|
||||
if (confirm !== 'update') {
|
||||
return res.redirect('/admin/system?error=confirm');
|
||||
}
|
||||
|
||||
const result = await gitDeploy.runDeployUpdate();
|
||||
req.session.adminUpdateLog = result.output;
|
||||
req.session.adminUpdateOk = result.ok;
|
||||
req.session.adminUpdateCode = result.code;
|
||||
|
||||
if (result.ok) {
|
||||
return res.redirect('/admin/system?done=1');
|
||||
}
|
||||
return res.redirect('/admin/system?failed=1');
|
||||
})
|
||||
);
|
||||
|
||||
module.exports = router;
|
||||
|
||||
Reference in New Issue
Block a user