feat: reload all quest on starting

This commit is contained in:
Lin, Hung-Shin committed 2023-11-21 11:04:52 +08:00
1 parent 3f8bcb5446
commit 3fed851b7b
2 files changed
+10 -11

No files matched your search

+3
View File
@@ -110,6 +110,9 @@ export async function isQuestUnlocked(user, questId) {
if (!quest) { if (!quest) {
throw new Error(`Quest ${questId} not found`) throw new Error(`Quest ${questId} not found`)
} }
if (!quest.requirements) {
return true
}
return quest.requirements.every((requiredQuestId) => { return quest.requirements.every((requiredQuestId) => {
const progress = userProfile.progress.get(requiredQuestId) const progress = userProfile.progress.get(requiredQuestId)
return progress && progress.completed return progress && progress.completed
+7 -11
View File
@@ -22,7 +22,8 @@ async function mapQuests(callback) {
) )
} }
export function loadAndUpdateQuests() { export async function loadAndUpdateQuests() {
await Quest.deleteMany({})
return mapQuests(async (id, questPath) => { return mapQuests(async (id, questPath) => {
const files = await fs.readdir(questPath) const files = await fs.readdir(questPath)
if (!files.includes('game.yml')) { if (!files.includes('game.yml')) {
@@ -32,23 +33,18 @@ export function loadAndUpdateQuests() {
try { try {
const body = await fs.readFile(path.join(questPath, 'game.yml'), 'utf-8') const body = await fs.readFile(path.join(questPath, 'game.yml'), 'utf-8')
const quest = yaml.parse(body, { const questData = yaml.parse(body, {
merge: true, merge: true,
}) })
const image = files.includes('Dockerfile') ? id : 'base' const image = files.includes('Dockerfile') ? id : 'base'
return await Quest.findByIdAndUpdate( const quest = new Quest({
id,
{
_id: id, _id: id,
image, image,
...quest, ...questData,
}, })
{ await quest.save()
upsert: true,
}
)
} catch (error) { } catch (error) {
console.error(`Error parsing quest ${id}:`, error.message) console.error(`Error parsing quest ${id}:`, error.message)
throw error throw error