Delete campaign war resources and logs on campaign delete (CC-78)

pull/51/head
HardiReady 2019-02-09 13:16:41 +01:00
parent a3665b5476
commit 82f3dc923f
1 changed files with 57 additions and 14 deletions

View File

@ -12,9 +12,22 @@ const checkMT = require('../middleware/permission-check').checkMT;
const routerHandling = require('../middleware/router-handling'); const routerHandling = require('../middleware/router-handling');
const idValidator = require('../middleware/validators').idValidator; const idValidator = require('../middleware/validators').idValidator;
const fs = require('fs');
const resourceLocation = require('../middleware/resource-location').resourceLocation().concat('/logs/');
// Mongoose Model using mongoDB // Mongoose Model using mongoDB
const CampaignModel = require('../models/campaign'); const CampaignModel = require('../models/campaign');
const WarModel = require('../models/war'); 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 // util
const genericGetById = require('./_generic').genericGetById; const genericGetById = require('./_generic').genericGetById;
@ -88,6 +101,38 @@ campaigns.route('/:id')
}) })
.delete((req, res, next) => { .delete((req, res, 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) => { CampaignModel.findByIdAndRemove(req.params.id, (err, item) => {
if (err) { if (err) {
err.status = codes.wrongrequest; err.status = codes.wrongrequest;
@ -97,12 +142,10 @@ campaigns.route('/:id')
err.status = codes.notfound; err.status = codes.notfound;
return next(err); 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; res.locals.processed = true;
next(); next();
}); });
});
}) })
.all( .all(