From dec29186e0b2e60a60de03d686fa870a28e5303c Mon Sep 17 00:00:00 2001 From: Shuming Liu Date: Tue, 19 May 2026 16:25:00 +0800 Subject: [PATCH] fixed a bug --- server/models/SudokuRecord.ts | 8 +++++--- server/routes/sudoku.ts | 10 ++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/server/models/SudokuRecord.ts b/server/models/SudokuRecord.ts index d6aa084..f28be10 100644 --- a/server/models/SudokuRecord.ts +++ b/server/models/SudokuRecord.ts @@ -1,13 +1,14 @@ import mongoose, { Document, Schema } from 'mongoose'; export type SudokuDifficulty = 'easy' | 'medium' | 'hard'; +export type SudokuGameMode = 'standard' | 'irregular'; export interface ISudokuRecord extends Document { userId: mongoose.Types.ObjectId; username: string; fullname: string; difficulty: SudokuDifficulty; - gameMode: 'standard' | 'irregular'; + gameMode: SudokuGameMode; timeSeconds: number; won: boolean; createdAt: Date; @@ -18,7 +19,7 @@ export interface ISudokuLeaderboardRecord { userId: mongoose.Types.ObjectId; username: string; fullname: string; - gameMode: 'standard' | 'irregular'; + gameMode: SudokuGameMode; bestTime: number; totalGames: number; wonGames: number; @@ -69,7 +70,7 @@ sudokuRecordSchema.index({ difficulty: 1, won: 1, gameMode: 1, timeSeconds: 1 }) sudokuRecordSchema.statics.getLeaderboard = function( difficulty: SudokuDifficulty, - gameMode: 'standard' | 'irregular' | 'all', + gameMode: SudokuGameMode | 'all', skipCount: number, pageSize: number ): mongoose.Aggregate { @@ -134,6 +135,7 @@ sudokuRecordSchema.statics.getLeaderboard = function( interface SudokuRecordModel extends mongoose.Model { getLeaderboard( difficulty: SudokuDifficulty, + gameMode: SudokuGameMode | 'all', skipCount: number, pageSize: number ): mongoose.Aggregate; diff --git a/server/routes/sudoku.ts b/server/routes/sudoku.ts index 0730e9c..5bbdd6f 100644 --- a/server/routes/sudoku.ts +++ b/server/routes/sudoku.ts @@ -1,5 +1,5 @@ import express, { Request, Response } from 'express'; -import { SudokuRecord, SudokuDifficulty } from '../models/SudokuRecord'; +import { SudokuRecord, SudokuDifficulty, SudokuGameMode } from '../models/SudokuRecord'; import { auth } from '../middleware/auth'; const router = express.Router(); @@ -7,7 +7,7 @@ const router = express.Router(); // 提交数独记录(需要登录) router.post('/record', auth, async (req: Request, res: Response) => { try { - const { difficulty, timeSeconds, won } = req.body; + const { difficulty, timeSeconds, won, gameMode = 'standard' } = req.body; if (!req.user?._id) { return res.status(401).json({ error: '未登录' }); @@ -26,11 +26,17 @@ router.post('/record', auth, async (req: Request, res: Response) => { return res.status(400).json({ error: '无效的游戏结果' }); } + const validGameModes: SudokuGameMode[] = ['standard', 'irregular']; + if (!validGameModes.includes(gameMode)) { + return res.status(400).json({ error: '无效的游戏模式' }); + } + const record = new SudokuRecord({ userId: req.user._id, username: req.user.username, fullname: req.user.fullname || req.user.username, difficulty, + gameMode, timeSeconds, won });