From aec0cf84adcbfbf6ed074014f2733c4b03ffd9e2 Mon Sep 17 00:00:00 2001 From: wancat Date: Sun, 29 Oct 2023 15:38:32 +0800 Subject: [PATCH] feat: include complete stage name in command --- packages/analytics/src/models/sessions.js | 17 ++++++++++++++--- .../analytics/views/sessionDetail.handlebars | 2 ++ packages/models/command.js | 4 ++++ quests/helloworld/game.yml | 2 +- server/src/api/controllers/commandController.js | 5 +++++ server/src/game/commandHandler.js | 4 +--- 6 files changed, 27 insertions(+), 7 deletions(-) diff --git a/packages/analytics/src/models/sessions.js b/packages/analytics/src/models/sessions.js index e290a8b..72d5aa4 100644 --- a/packages/analytics/src/models/sessions.js +++ b/packages/analytics/src/models/sessions.js @@ -51,7 +51,16 @@ export async function sessionList() { }, ]) return sessions.map( - ({ _id, user, quest, status, createdAt, finishedAt, commands }) => { + ({ + _id, + user, + quest, + status, + createdAt, + finishedAt, + commands, + lastActivityAt, + }) => { return { _id, user: user.username, @@ -59,7 +68,8 @@ export async function sessionList() { status, createdAt: createdAt?.toLocaleString(), finishedAt: finishedAt?.toLocaleString(), - usedTime: finishedAt ? formatTime(finishedAt - createdAt) : '', + lastActivityAt: lastActivityAt?.toLocaleString(), + usedTime: formatTime(lastActivityAt - createdAt), commandCount: commands?.length, } } @@ -69,9 +79,10 @@ export async function sessionList() { export async function sessionDetail(id) { const session = await Session.findById(id).populate('user').exec() const commands = (await Command.find({ session: id })).map( - ({ command, pwd, output, error, createdAt }) => ({ + ({ command, pwd, output, error, createdAt, stage }) => ({ command: command?.slice(0, 20), pwd, + stage, output: output?.slice(0, 50), error: error?.slice(0, 50), createdAt: createdAt?.toLocaleString(), diff --git a/packages/analytics/views/sessionDetail.handlebars b/packages/analytics/views/sessionDetail.handlebars index 71d8aa6..d43b8fe 100644 --- a/packages/analytics/views/sessionDetail.handlebars +++ b/packages/analytics/views/sessionDetail.handlebars @@ -40,6 +40,7 @@ PWD Output Error + Stage Created At {{#each commands}} @@ -48,6 +49,7 @@ {{pwd}} {{output}} {{error}} + {{stage}} {{createdAt}} {{/each}} diff --git a/packages/models/command.js b/packages/models/command.js index 277a2df..40a03bb 100644 --- a/packages/models/command.js +++ b/packages/models/command.js @@ -25,6 +25,10 @@ const Command = model( type: String, required: false, }, + stage: { + type: String, + required: false, + }, }, { timestamps: true } ) diff --git a/quests/helloworld/game.yml b/quests/helloworld/game.yml index 8cbc85e..9c7e9cc 100644 --- a/quests/helloworld/game.yml +++ b/quests/helloworld/game.yml @@ -82,7 +82,7 @@ stages: pwd: - '^/home/commander$' command: - - cat forgotten-scroll.txt + - cat forgotten_scroll.txt responses: - type: dialogue speaker: Unix 精靈 diff --git a/server/src/api/controllers/commandController.js b/server/src/api/controllers/commandController.js index ffd7973..36f998a 100644 --- a/server/src/api/controllers/commandController.js +++ b/server/src/api/controllers/commandController.js @@ -41,6 +41,11 @@ export async function newCommand(req, res) { const response = await commandHandler.run() + if (response) { + c.stage = response.stage + await c.save() + } + res.status(201).json(response) await session.save() } diff --git a/server/src/game/commandHandler.js b/server/src/game/commandHandler.js index 1960333..aec371a 100644 --- a/server/src/game/commandHandler.js +++ b/server/src/game/commandHandler.js @@ -113,16 +113,14 @@ export default class CommandHandler extends SessionHandler { stages.map((stage) => this.isMatch(stage.condition)) ) - console.log('matches', matches) - const stage = stages.find((_, i) => matches[i]) - console.log('stage', stage) if (!stage) { return {} } const response = this.execute(stage) return { + stage: stage.id, end: this.session.status === 'finished', ...response, }