dvc890 commited on
Commit
c01eaaf
·
verified ·
1 Parent(s): e93be8c

Upload 37 files

Browse files
Files changed (2) hide show
  1. pages/GameLucky.tsx +2 -2
  2. server.js +11 -2
pages/GameLucky.tsx CHANGED
@@ -118,8 +118,8 @@ export const GameLucky: React.FC = () => {
118
  setActiveCardIndex(null);
119
  }, 2000);
120
  } catch (e: any) {
121
- if(e.message.includes('POOL_EMPTY')) alert('奖品池已见底,请联系班主任补充奖品后再抽奖');
122
- else alert('抽奖失败,请稍后重试');
123
  setIsFlipping(false);
124
  setActiveCardIndex(null);
125
  }
 
118
  setActiveCardIndex(null);
119
  }, 2000);
120
  } catch (e: any) {
121
+ // Use backend message directly if available, otherwise fallback
122
+ alert(e.message || '抽奖失败,请稍后重试');
123
  setIsFlipping(false);
124
  setActiveCardIndex(null);
125
  }
server.js CHANGED
@@ -287,6 +287,17 @@ app.post('/api/games/lucky-draw', async (req, res) => {
287
  const defaultPrize = config?.defaultPrize || '再接再厉';
288
  const dailyLimit = config?.dailyLimit || 3;
289
 
 
 
 
 
 
 
 
 
 
 
 
290
  // 2.5 Daily Limit Check
291
  // Only limit if it's a STUDENT drawing for themselves. Teachers/Admins bypass limits.
292
  if (userRole === 'STUDENT') {
@@ -316,8 +327,6 @@ app.post('/api/games/lucky-draw', async (req, res) => {
316
  await student.save();
317
  }
318
 
319
- // 3. Global Inventory Check
320
- const availablePrizes = prizes.filter(p => (p.count === undefined || p.count > 0));
321
  // 4. Weighted Random Logic
322
  let selectedPrize = defaultPrize;
323
  let rewardType = 'CONSOLATION'; // Default to consolation
 
287
  const defaultPrize = config?.defaultPrize || '再接再厉';
288
  const dailyLimit = config?.dailyLimit || 3;
289
 
290
+ // 2.2 PRE-CHECK: Inventory Check
291
+ const availablePrizes = prizes.filter(p => (p.count === undefined || p.count > 0));
292
+ if (availablePrizes.length === 0) {
293
+ // Determine error message based on who is drawing
294
+ const isTeacherOrAdmin = userRole === 'TEACHER' || userRole === 'ADMIN';
295
+ const msg = isTeacherOrAdmin
296
+ ? '奖品库存不足,不能抽奖,请先补充库存'
297
+ : '奖品库存不足,不能抽奖,请联系班主任补充库存';
298
+ return res.status(400).json({ error: 'POOL_EMPTY', message: msg });
299
+ }
300
+
301
  // 2.5 Daily Limit Check
302
  // Only limit if it's a STUDENT drawing for themselves. Teachers/Admins bypass limits.
303
  if (userRole === 'STUDENT') {
 
327
  await student.save();
328
  }
329
 
 
 
330
  // 4. Weighted Random Logic
331
  let selectedPrize = defaultPrize;
332
  let rewardType = 'CONSOLATION'; // Default to consolation