From 82f3dc923fa05f4957630258e2de2213bb3f2e60 Mon Sep 17 00:00:00 2001 From: HardiReady Date: Sat, 9 Feb 2019 13:16:41 +0100 Subject: [PATCH] Delete campaign war resources and logs on campaign delete (CC-78) --- server/routes/campaigns.js | 71 ++++++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 14 deletions(-) diff --git a/server/routes/campaigns.js b/server/routes/campaigns.js index e292624..37b8135 100644 --- a/server/routes/campaigns.js +++ b/server/routes/campaigns.js @@ -12,9 +12,22 @@ const checkMT = require('../middleware/permission-check').checkMT; const routerHandling = require('../middleware/router-handling'); const idValidator = require('../middleware/validators').idValidator; +const fs = require('fs'); +const resourceLocation = require('../middleware/resource-location').resourceLocation().concat('/logs/'); + // Mongoose Model using mongoDB const CampaignModel = require('../models/campaign'); const WarModel = require('../models/war'); +const PlayerModel = require('../models/player'); +const LogKillModel = require('../models/logs/kill'); +const LogVehicleKillModel = require('../models/logs/vehicle'); +const LogRespawnModel = require('../models/logs/respawn'); +const LogReviveModel = require('../models/logs/revive'); +const LogTransportModel = require('../models/logs/transport'); +const LogFlagModel = require('../models/logs/flag'); +const LogBudgetModel = require('../models/logs/budget'); +const LogPointsModel = require('../models/logs/points'); +const LogPlayerCountModel = require('../models/logs/player-count'); // util const genericGetById = require('./_generic').genericGetById; @@ -88,20 +101,50 @@ campaigns.route('/:id') }) .delete((req, res, next) => { - CampaignModel.findByIdAndRemove(req.params.id, (err, item) => { - if (err) { - err.status = codes.wrongrequest; - return next(err); - } else if (!item) { - err = new Error('item not found'); - err.status = codes.notfound; - return next(err); - } - WarModel.find({campaign: req.params.id}).remove().exec(); - // TODO: remove all the war logs from fs here!!! - // TODO: remove all LOG entries from DB!!! - res.locals.processed = true; - next(); + WarModel.find({campaign: req.params.id}, (err, wars) => { + + wars.forEach((item) => { + // delete linked appearances + PlayerModel.find({warId: item._id}).remove().exec(); + LogKillModel.find({war: item._id}).remove().exec(); + LogVehicleKillModel.find({war: item._id}).remove().exec(); + LogRespawnModel.find({war: item._id}).remove().exec(); + LogReviveModel.find({war: item._id}).remove().exec(); + LogFlagModel.find({war: item._id}).remove().exec(); + LogBudgetModel.find({war: item._id}).remove().exec(); + LogTransportModel.find({war: item._id}).remove().exec(); + LogPointsModel.find({war: item._id}).remove().exec(); + LogPlayerCountModel.find({war: item._id}).remove().exec(); + + // check if logfiles exist and delete from fs + const warDir = resourceLocation + item.id; + if (fs.existsSync(warDir)) { + const cleanLog = warDir + '/clean.log'; + if (fs.existsSync(cleanLog)) { + fs.unlink(cleanLog, (err) => { + }); + } + const sourceLog = warDir + '/war.log'; + if (fs.existsSync(sourceLog)) { + fs.unlink(sourceLog, (err) => { + }); + } + fs.rmdir(warDir, (err) => { + }); + } + }); + CampaignModel.findByIdAndRemove(req.params.id, (err, item) => { + if (err) { + err.status = codes.wrongrequest; + return next(err); + } else if (!item) { + err = new Error('item not found'); + err.status = codes.notfound; + return next(err); + } + res.locals.processed = true; + next(); + }); }); })