Tristan Yu commited on
Commit
f26854d
·
1 Parent(s): 89d3be6

feat(brief): store week-level brief and return it when no SourceText exists

Browse files
Files changed (3) hide show
  1. models/WeekBrief.js +22 -0
  2. routes/auth.js +3 -0
  3. routes/search.js +10 -1
models/WeekBrief.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const mongoose = require('mongoose');
2
+
3
+ const weekBriefSchema = new mongoose.Schema({
4
+ category: {
5
+ type: String,
6
+ enum: ['tutorial', 'weekly-practice'],
7
+ required: true,
8
+ index: true
9
+ },
10
+ weekNumber: {
11
+ type: Number,
12
+ required: true,
13
+ index: true
14
+ },
15
+ translationBrief: {
16
+ type: String,
17
+ }
18
+ }, { timestamps: true, indexes: [{ fields: { category: 1, weekNumber: 1 }, unique: true }] });
19
+
20
+ module.exports = mongoose.model('WeekBrief', weekBriefSchema);
21
+
22
+
routes/auth.js CHANGED
@@ -447,10 +447,13 @@ router.put('/admin/tutorial-brief/:weekNumber', authenticateToken, requireAdmin,
447
  router.put('/admin/weekly-brief/:weekNumber', authenticateToken, requireAdmin, async (req, res) => {
448
  try {
449
  const SourceText = require('../models/SourceText');
 
450
  const { translationBrief } = req.body;
451
  const weekNumber = parseInt(req.params.weekNumber);
452
  if (translationBrief === undefined || translationBrief === null) return res.status(400).json({ error: 'Translation brief is required' });
453
  const result = await SourceText.updateMany({ category: 'weekly-practice', weekNumber }, { translationBrief });
 
 
454
  res.json({ success: true, message: `Translation brief updated successfully for ${result.modifiedCount} weekly practice tasks`, modifiedCount: result.modifiedCount });
455
  } catch (error) {
456
  console.error('Update weekly practice brief error:', error);
 
447
  router.put('/admin/weekly-brief/:weekNumber', authenticateToken, requireAdmin, async (req, res) => {
448
  try {
449
  const SourceText = require('../models/SourceText');
450
+ const WeekBrief = require('../models/WeekBrief');
451
  const { translationBrief } = req.body;
452
  const weekNumber = parseInt(req.params.weekNumber);
453
  if (translationBrief === undefined || translationBrief === null) return res.status(400).json({ error: 'Translation brief is required' });
454
  const result = await SourceText.updateMany({ category: 'weekly-practice', weekNumber }, { translationBrief });
455
+ // Also persist a week-level brief so it shows even when no SourceText items exist (e.g., file-based week)
456
+ await WeekBrief.findOneAndUpdate({ category: 'weekly-practice', weekNumber }, { translationBrief }, { upsert: true, new: true });
457
  res.json({ success: true, message: `Translation brief updated successfully for ${result.modifiedCount} weekly practice tasks`, modifiedCount: result.modifiedCount });
458
  } catch (error) {
459
  console.error('Update weekly practice brief error:', error);
routes/search.js CHANGED
@@ -43,13 +43,22 @@ router.get('/tutorial-tasks/:week', authenticateToken, async (req, res) => {
43
  router.get('/weekly-practice/:week', authenticateToken, async (req, res) => {
44
  try {
45
  const SourceText = require('../models/SourceText');
 
46
  const weekNumber = parseInt(req.params.week);
47
 
48
  const practice = await SourceText.find({
49
  category: 'weekly-practice',
50
  weekNumber: weekNumber
51
  }).sort({ position: 1, createdAt: 1 });
52
-
 
 
 
 
 
 
 
 
53
  res.json(practice);
54
  } catch (error) {
55
  // Reduced logging to prevent excessive console output
 
43
  router.get('/weekly-practice/:week', authenticateToken, async (req, res) => {
44
  try {
45
  const SourceText = require('../models/SourceText');
46
+ const WeekBrief = require('../models/WeekBrief');
47
  const weekNumber = parseInt(req.params.week);
48
 
49
  const practice = await SourceText.find({
50
  category: 'weekly-practice',
51
  weekNumber: weekNumber
52
  }).sort({ position: 1, createdAt: 1 });
53
+
54
+ // If no SourceText items exist for this week, attempt to fetch week-level brief
55
+ if (practice.length === 0) {
56
+ const wb = await WeekBrief.findOne({ category: 'weekly-practice', weekNumber });
57
+ if (wb && wb.translationBrief) {
58
+ return res.json([{ _id: `wb-${weekNumber}`, title: `Week ${weekNumber} Brief`, content: '', category: 'weekly-practice', weekNumber, translationBrief: wb.translationBrief }]);
59
+ }
60
+ }
61
+
62
  res.json(practice);
63
  } catch (error) {
64
  // Reduced logging to prevent excessive console output