From 3e9e14399a60ec967cdab3e572fe4561db7cb9c7 Mon Sep 17 00:00:00 2001 From: wancat Date: Thu, 20 Jul 2023 16:25:10 +0800 Subject: [PATCH] Directly use folder name as _id in Quest --- server/src/api/controllers/questController.js | 6 +-- server/src/api/routes/quests.js | 2 +- server/src/models/quest.js | 2 +- server/src/utils/quest.js | 41 ++++++++----------- 4 files changed, 21 insertions(+), 30 deletions(-) diff --git a/server/src/api/controllers/questController.js b/server/src/api/controllers/questController.js index 893b384..a9ca070 100644 --- a/server/src/api/controllers/questController.js +++ b/server/src/api/controllers/questController.js @@ -4,7 +4,7 @@ export async function getQuests(req, res) { const quests = await Quest.find({}).sort({ order: 1 }) res.json( quests.map(({ name, title, order, _id }) => ({ - id: _id, + _id, name, title, order, @@ -13,8 +13,8 @@ export async function getQuests(req, res) { } export async function getQuestDetail(req, res) { - const { name } = req.params - const quest = await Quest.findOne({ name }) + const { id } = req.params + const quest = await Quest.findById(id) if (!quest) { res.status(404).json({ message: 'Quest not found.' }) return diff --git a/server/src/api/routes/quests.js b/server/src/api/routes/quests.js index 2c1a625..00fda55 100644 --- a/server/src/api/routes/quests.js +++ b/server/src/api/routes/quests.js @@ -4,6 +4,6 @@ import * as questController from '../controllers/questController.js' const router = Router() router.get('/', questController.getQuests) -router.get('/:name', questController.getQuestDetail) +router.get('/:id', questController.getQuestDetail) export default router diff --git a/server/src/models/quest.js b/server/src/models/quest.js index e4dffe4..753eb7f 100644 --- a/server/src/models/quest.js +++ b/server/src/models/quest.js @@ -3,7 +3,7 @@ import { model, Schema } from 'mongoose' const Quest = model( 'Quest', new Schema({ - name: String, + _id: String, title: String, order: Number, content: String, diff --git a/server/src/utils/quest.js b/server/src/utils/quest.js index fe04459..73f55bc 100644 --- a/server/src/utils/quest.js +++ b/server/src/utils/quest.js @@ -12,12 +12,12 @@ const marked = new Marked({ const questDirectory = path.join(process.cwd(), 'quests') -async function parseQuests() { +export default async function loadAndUpdateQuests() { const questNames = await fs.readdir(questDirectory) const quests = Promise.all( - questNames.map(async (name) => { - const fullPath = path.join(questDirectory, name, 'README.md') + questNames.map(async (id) => { + const fullPath = path.join(questDirectory, id, 'README.md') try { // Read and parse the README.md file. @@ -31,14 +31,20 @@ async function parseQuests() { const { title, order } = metadata - return { - name, - title, - order, - content: htmlContent, - } + return Quest.findByIdAndUpdate( + id, + { + _id: id, + title, + order, + content: htmlContent, + }, + { + upsert: true, + } + ) } catch (error) { - console.error(`Error parsing quest ${name}:`, error) + console.error(`Error parsing quest ${id}:`, error) throw error } }) @@ -46,18 +52,3 @@ async function parseQuests() { return quests } - -async function updateQuests(quests) { - Promise.all( - quests.map((quest) => { - return Quest.findOneAndUpdate({ name: quest.name }, quest, { - upsert: true, - }) - }) - ) -} - -export default async function loadAndUpdateQuests() { - const quests = await parseQuests() - await updateQuests(quests) -}