diff --git a/packages/models/quest.js b/packages/models/quest.js index 1eb2b94..3634183 100644 --- a/packages/models/quest.js +++ b/packages/models/quest.js @@ -54,7 +54,10 @@ const stageSchema = new Schema({ required: true, default: false, }, - condition: conditionSchema, + condition: { + type: conditionSchema, + required: true, + }, responses: { type: [responseSchema], required: true, @@ -68,11 +71,32 @@ const stageSchema = new Schema({ const Quest = model( 'Quest', new Schema({ - _id: String, - title: String, - order: Number, - instruction: String, - stages: [stageSchema], + _id: { + type: String, + unique: true, + required: true, + }, + title: { + type: String, + required: true, + }, + requirements: { + type: [ + { + type: String, + ref: 'Quest', + }, + ], + required: true, + }, + instruction: { + type: String, + required: true, + }, + stages: { + type: [stageSchema], + required: true, + }, }) ) diff --git a/packages/models/user.js b/packages/models/user.js index 6c3bc44..7bdb2f3 100644 --- a/packages/models/user.js +++ b/packages/models/user.js @@ -1,5 +1,24 @@ import { model, Schema } from 'mongoose' +const progressSchema = new Schema({ + quest: { + type: String, + ref: 'Quest', + }, + sessions: [ + { + type: Schema.ObjectId, + ref: 'Session', + }, + ], + completionStatus: { + type: String, + enum: ['incomplete', 'completed'], + }, + startedAt: Date, + finishedAt: Date, +}) + const User = model( 'User', new Schema( @@ -23,6 +42,7 @@ const User = model( id: String, displayName: String, }, + progress: [progressSchema], }, { timestamps: true, diff --git a/quests/discover/game.yml b/quests/discover/game.yml new file mode 100644 index 0000000..dbfde46 --- /dev/null +++ b/quests/discover/game.yml @@ -0,0 +1,6 @@ +title: Discover the World! +instruction: | + 試著探索這個世界吧! + +requirements: + - spell diff --git a/quests/read/game.yml b/quests/read/game.yml new file mode 100644 index 0000000..9940a5a --- /dev/null +++ b/quests/read/game.yml @@ -0,0 +1,6 @@ +title: Read the File +instruction: | + 閱讀檔案 + +requirements: + - spell diff --git a/quests/spell/game.yml b/quests/spell/game.yml index 83c0d30..e56c5f2 100644 --- a/quests/spell/game.yml +++ b/quests/spell/game.yml @@ -4,6 +4,10 @@ instruction: | 「輸入 echo Hello World!」 +requirements: + - helloworld + - noexists + conditions: pwd_home: &pwd_home pwd: diff --git a/server/src/utils/quest.js b/server/src/utils/quest.js index 61866b0..ffb4041 100644 --- a/server/src/utils/quest.js +++ b/server/src/utils/quest.js @@ -31,7 +31,7 @@ export default async function loadAndUpdateQuests() { return Quest.findByIdAndUpdate( id, { - id, + _id: id, ...quest, }, {