From 2285192eac5a919e86d4e10922afb539f2ba75c5 Mon Sep 17 00:00:00 2001 From: "Lin, Hung-Shin" Date: Mon, 30 Oct 2023 13:31:59 +0800 Subject: [PATCH] feat: delete previous container on session creation --- server/Dockerfile | 3 +- .../src/api/controllers/sessionController.js | 28 +++++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/server/Dockerfile b/server/Dockerfile index ca8951d..a07526f 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,6 +1,5 @@ FROM node:20-alpine AS build -COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/ WORKDIR /app COPY ./package.json yarn.lock ./ COPY server/package.json ./server/package.json @@ -8,6 +7,8 @@ COPY packages/file-graph/package.json ./packages/file-graph/package.json COPY packages/utils/package.json ./packages/utils/package.json COPY packages/models/package.json ./packages/models/package.json RUN yarn install --frozen-lockfile --production +# Install docker cli +COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/ ENV HOST=0.0.0.0 ENV PORT=3000 diff --git a/server/src/api/controllers/sessionController.js b/server/src/api/controllers/sessionController.js index 51f8e69..fd8564f 100644 --- a/server/src/api/controllers/sessionController.js +++ b/server/src/api/controllers/sessionController.js @@ -1,5 +1,5 @@ import { Session, Quest } from '@linux-odyssey/models' -import { createContainer } from '../../containers/docker.js' +import { createContainer, deleteContainer } from '../../containers/docker.js' import SessionHandler from '../../game/sessionHandler.js' function sessionSummary(session) { @@ -37,6 +37,23 @@ export async function getSessionList(req, res) { } } +async function deactivateSessions(user, quest) { + const sessions = await Session.find({ + user, + quest, + status: 'active', + }) + return Promise.all( + sessions.map((session) => { + return deleteContainer(session.containerId).then(() => { + session.status = 'inactive' + session.containerId = null + return session.save() + }) + }) + ) +} + export async function createSession(req, res) { const quest = await Quest.findById(req.body.quest_id) if (!quest) { @@ -44,11 +61,10 @@ export async function createSession(req, res) { return } - // deactive all active sessions - await Session.updateMany( - { user: req.user._id, quest, status: 'active' }, - { status: 'inactive' } - ) + // deactivate all active sessions + deactivateSessions(req.user._id, quest._id).catch((err) => { + console.error(err) + }) try { const container = await createContainer(