feat: delete previous container on session creation

This commit is contained in:
Lin, Hung-Shin committed 2023-10-30 13:31:59 +08:00
1 parent 96678a45c3
commit 2285192eac
2 files changed
+24 -7

No files matched your search

+2 -1
View File
@@ -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
@@ -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(