Skip to content

Commit b9fe442

Browse files
author
CodeJudge
committed
feat: 数据库优化功能
1 parent 3b442fa commit b9fe442

2 files changed

Lines changed: 12 additions & 3 deletions

File tree

backend/src/controllers/problemController.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { queryAll, queryOne, run } = require('../config/db');
1+
const { queryAll, queryOne, run, getSafeDb, saveDb } = require('../config/db');
22

33
function listProblems(req, res) {
44
const { type, difficulty, search, page = 1, limit = 20, sort } = req.query;
@@ -129,6 +129,14 @@ function getAdminStats(req, res) {
129129
});
130130
}
131131

132+
function optimizeDatabase(req, res) {
133+
const db = getSafeDb();
134+
db.run('ANALYZE');
135+
db.run('VACUUM');
136+
saveDb();
137+
res.json({ message: '数据库优化完成' });
138+
}
139+
132140
function getProblemStats(req, res) {
133141
const stats = queryOne(`
134142
SELECT
@@ -174,4 +182,4 @@ function importProblems(req, res) {
174182
res.json({ message: `成功导入 ${imported} 道题目`, count: imported });
175183
}
176184

177-
module.exports = { listProblems, getProblem, createProblem, updateProblem, deleteProblem, getProblemStats, getAdminStats, getTagsCloud, exportProblems, importProblems };
185+
module.exports = { listProblems, getProblem, createProblem, updateProblem, deleteProblem, getProblemStats, getAdminStats, getTagsCloud, exportProblems, importProblems, optimizeDatabase };

backend/src/routes/problems.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const router = require('express').Router();
22
const { queryOne } = require('../config/db');
3-
const { listProblems, getProblem, createProblem, updateProblem, deleteProblem, getProblemStats, getAdminStats, getTagsCloud, exportProblems, importProblems } = require('../controllers/problemController');
3+
const { listProblems, getProblem, createProblem, updateProblem, deleteProblem, getProblemStats, getAdminStats, getTagsCloud, exportProblems, importProblems, optimizeDatabase } = require('../controllers/problemController');
44
const { getTemplate } = require('../services/judgeService');
55
const { optionalAuth, adminOnly } = require('../middleware/auth');
66

@@ -44,6 +44,7 @@ router.get('/export', adminOnly, exportProblems);
4444
router.post('/import', adminOnly, importProblems);
4545
router.get('/:id', optionalAuth, getProblem);
4646
router.post('/', adminOnly, createProblem);
47+
router.post('/admin/optimize', adminOnly, optimizeDatabase);
4748
router.put('/:id', adminOnly, updateProblem);
4849
router.delete('/:id', adminOnly, deleteProblem);
4950

0 commit comments

Comments
 (0)