diff --git a/server/src/api/controllers/commandController.js b/server/src/api/controllers/commandController.js index c37121d..5526308 100644 --- a/server/src/api/controllers/commandController.js +++ b/server/src/api/controllers/commandController.js @@ -26,10 +26,18 @@ export async function newCommand(req, res) { const session = await Session.findById(sessionId) if (!session) { - res.status(401).json({ message: 'session not found' }) + res.status(404).json({ message: 'session not found' }) return } + if (session.status !== 'active') { + res.status(400).json({ message: 'session is not active' }) + return + } + + session.lastActivityAt = new Date() + await session.save() + const c = new Command({ session, command, diff --git a/server/src/game/commandHandler.js b/server/src/game/commandHandler.js index b467b5c..35335f3 100644 --- a/server/src/game/commandHandler.js +++ b/server/src/game/commandHandler.js @@ -42,6 +42,12 @@ async function commandHandler(session, commandInput, additionalData) { session.progress = stage.next await session.save() + if (stage.next === 'END') { + session.status = 'finished' + session.finishedAt = new Date() + await session.save() + } + return { responses: stage.responses, hints: stage.hints, diff --git a/server/src/models/session.js b/server/src/models/session.js index 5ae0865..4757618 100644 --- a/server/src/models/session.js +++ b/server/src/models/session.js @@ -13,7 +13,18 @@ const Session = model( ref: 'Quest', }, containerId: String, + status: { + type: String, + enum: ['active', 'finished', 'deactive'], + required: true, + default: 'active', + }, finishedAt: Date, + lastActivityAt: { + type: Date, + default: Date.now, + required: true, + }, progress: String, completion: [String], hints: [String], diff --git a/server/swagger.yaml b/server/swagger.yaml index 5b671bb..d2dfceb 100644 --- a/server/swagger.yaml +++ b/server/swagger.yaml @@ -31,6 +31,12 @@ paths: description: find sessions by quest id schema: type: string + - in: query + name: status + description: find sessions by status + schema: + type: string + enum: [active, finished, deactive] responses: '200': description: list of existing session