Skip to content

Commit e353911

Browse files
author
CodeJudge
committed
feat: 题目浏览量统计 + 缓存中间件
1 parent 40701a9 commit e353911

3 files changed

Lines changed: 30 additions & 1 deletion

File tree

backend/src/controllers/problemController.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ function getProblem(req, res) {
3333
const problem = queryOne('SELECT * FROM problems WHERE id = ?', [req.params.id]);
3434
if (!problem) return res.status(404).json({ error: '题目不存在' });
3535

36+
// Increment view count
37+
try { run('UPDATE problems SET view_count = COALESCE(view_count, 0) + 1 WHERE id = ?', [req.params.id]); } catch {}
38+
3639
let parsed = { ...problem };
3740
try { parsed.test_cases = JSON.parse(problem.test_cases); } catch { parsed.test_cases = []; }
3841
try { parsed.options = JSON.parse(problem.options); } catch { parsed.options = []; }

backend/src/middleware/cache.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Simple in-memory cache
2+
const cache = new Map();
3+
4+
function memoize(key, fn, ttlMs = 30000) {
5+
const cached = cache.get(key);
6+
if (cached && Date.now() - cached.ts < ttlMs) {
7+
return cached.data;
8+
}
9+
const data = fn();
10+
cache.set(key, { data, ts: Date.now() });
11+
return data;
12+
}
13+
14+
function invalidate(key) {
15+
cache.delete(key);
16+
}
17+
18+
// Every 5 min clean stale entries
19+
setInterval(() => {
20+
const now = Date.now();
21+
for (const [key, val] of cache) {
22+
if (now - val.ts > 120000) cache.delete(key);
23+
}
24+
}, 300000);
25+
26+
module.exports = { memoize, invalidate };

frontend/src/pages/Problems.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState, useEffect, useCallback } from 'react';
1+
import { useState, useEffect, useCallback, useRef } from 'react';
22
import { useSearchParams } from 'react-router-dom';
33
import {
44
Search,

0 commit comments

Comments
 (0)