This commit is contained in:
2026-07-20 20:55:09 +08:00 Unverified
parent 52497957f3
commit c31602593a
13 changed files with 453 additions and 31 deletions
+12 -1
View File
@@ -4,6 +4,7 @@ import { noticeForClient, noticePlainText, sanitizeNoticeContent } from '../secu
export function createAdminRoutes(context) {
const {
database,
cache,
readDb,
sendJson,
sendError,
@@ -1040,6 +1041,16 @@ export function createAdminRoutes(context) {
await database.updateNotice(notice, log);
return sendJson(response, 200, { ok: true, notice: noticeForClient(notice) });
}
if (request.method === 'POST' && pathname === '/api/admin/results/cache/refresh') {
if (!requirePermission(user, response, '*')) return true;
const refreshed = await cache.invalidate('results');
return sendJson(response, 200, {
ok: true,
refreshed,
cacheStatus: cache.status,
message: refreshed ? '成绩 Redis 缓存已刷新,后续查询将重新生成缓存' : 'Redis 缓存当前未连接或刷新失败,成绩查询继续直接读取数据库'
});
}
if (request.method === 'GET' && pathname === '/api/admin/results') {
if (!requirePermission(user, response, 'results.read')) return true;
const scopedRegistrations = db.registrations.filter(item => registrationInScope(db, user, item));
@@ -1088,7 +1099,7 @@ export function createAdminRoutes(context) {
const account = db.users.find(accountItem => accountItem.id === item.userId);
return { ...view, candidateName: profile?.name || account?.displayName || '', candidateNumber: account?.candidateNumber || item.registrationNumber || '', schoolName: profile?.school || '', className: db.classes.find(classItem => classItem.id === profile?.classId)?.name || profile?.grade || '' };
}) : [];
return sendJson(response, 200, { ok: true, results, appeals, registrations, exams });
return sendJson(response, 200, { ok: true, results, appeals, registrations, exams, resultCache: { enabled: cache.enabled, status: cache.status } });
}
if (request.method === 'POST' && pathname === '/api/admin/results/import') {
if (!requirePermission(user, response, '*')) return true;