From 3fed851b7b1bd9005c787dc420b1fb0695145426 Mon Sep 17 00:00:00 2001 From: "Lin, Hung-Shin" Date: Tue, 21 Nov 2023 11:04:52 +0800 Subject: [PATCH] feat: reload all quest on starting --- server/src/models/sessionManager.js | 3 +++ server/src/utils/quest.js | 22 +++++++++------------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/server/src/models/sessionManager.js b/server/src/models/sessionManager.js index 8a9bbb9..715d67f 100644 --- a/server/src/models/sessionManager.js +++ b/server/src/models/sessionManager.js @@ -110,6 +110,9 @@ export async function isQuestUnlocked(user, questId) { if (!quest) { throw new Error(`Quest ${questId} not found`) } + if (!quest.requirements) { + return true + } return quest.requirements.every((requiredQuestId) => { const progress = userProfile.progress.get(requiredQuestId) return progress && progress.completed diff --git a/server/src/utils/quest.js b/server/src/utils/quest.js index f7e4b28..b207406 100644 --- a/server/src/utils/quest.js +++ b/server/src/utils/quest.js @@ -22,7 +22,8 @@ async function mapQuests(callback) { ) } -export function loadAndUpdateQuests() { +export async function loadAndUpdateQuests() { + await Quest.deleteMany({}) return mapQuests(async (id, questPath) => { const files = await fs.readdir(questPath) if (!files.includes('game.yml')) { @@ -32,23 +33,18 @@ export function loadAndUpdateQuests() { try { const body = await fs.readFile(path.join(questPath, 'game.yml'), 'utf-8') - const quest = yaml.parse(body, { + const questData = yaml.parse(body, { merge: true, }) const image = files.includes('Dockerfile') ? id : 'base' - return await Quest.findByIdAndUpdate( - id, - { - _id: id, - image, - ...quest, - }, - { - upsert: true, - } - ) + const quest = new Quest({ + _id: id, + image, + ...questData, + }) + await quest.save() } catch (error) { console.error(`Error parsing quest ${id}:`, error.message) throw error