Add additional budget information to db enry (CC-15)

pull/54/head
HardiReady 2019-02-17 13:02:35 +01:00
parent d8330074d5
commit 51f9371659
3 changed files with 80 additions and 40 deletions

View File

@ -3,7 +3,6 @@
+ _id: `` (string, required) - log entry id + _id: `` (string, required) - log entry id
+ war: `` (string, required) - warId + war: `` (string, required) - warId
+ time: `` (string, required) - logging timestamp + time: `` (string, required) - logging timestamp
+ __v: 0 (number, required) - object version number
# LogPoints (Log) # LogPoints (Log)
## Properties ## Properties
@ -74,14 +73,14 @@
#LogVehicle (Log) #LogVehicle (Log)
## Properties ## Properties
+ shooter: `HardiReady` (string, required) - name of player who shot the vehicle + shooter: `HardiReady` (string, required) - name of player who shot the vehicle
+ additionalShooter: [`[GNC]Paolo`, `Dominik`] (array[string], required) - additional crew members of shooter vehicle + additionalShooter: `[GNC]Paolo`, `Dominik` (array[string], required) - additional crew members of shooter vehicle
+ target: `T-100` (string, required) - name of the vehicle + target: `T-100` (string, required) - name of the vehicle
+ fraction: `BLUFOR` (enum, required) - fraction of the shooter + fraction: `BLUFOR` (enum, required) - fraction of the shooter
+ Members + Members
+ `BLUFOR` + `BLUFOR`
+ `OPFOR` + `OPFOR`
+ `NONE` + `NONE`
+ vehicleClass: `LIGHT` (enum, required) - class of shot vehicle + vehicleClass: `LIGHT` (enum[string], required) - class of shot vehicle
+ Members + Members
+ `LIGHT` + `LIGHT`
+ `HEAVY` + `HEAVY`

View File

@ -3,37 +3,49 @@
const mongoose = require('mongoose'); const mongoose = require('mongoose');
const Schema = mongoose.Schema; const Schema = mongoose.Schema;
const LogBudgetSchema = new Schema({ const LogBudgetSchema = new Schema(
war: { {
type: mongoose.Schema.Types.ObjectId, war: {
ref: 'War', type: mongoose.Schema.Types.ObjectId,
required: true, ref: 'War',
required: true,
},
time: {
type: Date,
required: true,
},
fraction: {
type: String,
enum: ['BLUFOR', 'OPFOR'],
required: true,
},
oldBudget: {
type: Number,
get: (v) => Math.round(v),
set: (v) => Math.round(v),
required: true,
},
newBudget: {
type: Number,
get: (v) => Math.round(v),
set: (v) => Math.round(v),
required: true,
},
buy: {
type: Boolean,
required: true,
},
player: {
type: String,
},
item: {
type: String,
}
}, },
time: { {
type: Date, collection: 'logBudget',
required: true, versionKey: false,
}, });
fraction: {
type: String,
enum: ['BLUFOR', 'OPFOR'],
required: true,
},
oldBudget: {
type: Number,
get: (v) => Math.round(v),
set: (v) => Math.round(v),
required: true,
},
newBudget: {
type: Number,
get: (v) => Math.round(v),
set: (v) => Math.round(v),
required: true,
},
}, {
collection: 'logBudget',
versionKey: false,
});
// optional more indices // optional more indices
LogBudgetSchema.index({war: 1}); LogBudgetSchema.index({war: 1});

View File

@ -13,6 +13,12 @@ const VehicleClasses = Object.freeze({
const playerNameRegex = /(^|,\s)(.*?)\s\(/g; const playerNameRegex = /(^|,\s)(.*?)\s\(/g;
const budgetPlayerNameRegex = /\d*\.\s(.*)\s\(ver\)kaufte/;
const budgetItemNameRegex = /\(ver\)kaufte\s(.*)\"$/;
const budgetRespawnNameRegex = /Respawn\svon\s(.*)\"$/;
const vehicleNameEndRegex = /\s\(\w+:/; const vehicleNameEndRegex = /\s\(\w+:/;
const sideRegex = /(side:\s(.*?)\))/; const sideRegex = /(side:\s(.*?)\))/;
@ -178,7 +184,7 @@ const parseWarLog = (lineArray, war) => {
const playerName = line.substring(line.lastIndexOf('Respawn von ') + 12, line.lastIndexOf('"')); const playerName = line.substring(line.lastIndexOf('Respawn von ') + 12, line.lastIndexOf('"'));
stats.respawn.push(getRespawnEntry(budg, playerName, war._id, war.date)); stats.respawn.push(getRespawnEntry(budg, playerName, war._id, war.date));
} }
stats.budget.push(getBudgetEntry(budg, war._id, war.date)); stats.budget.push(getBudgetEntry(line, budg, war._id, war.date));
} }
} else if (line.includes('(Fahne)') && !line.includes('Dominator')) { } else if (line.includes('(Fahne)') && !line.includes('Dominator')) {
/** /**
@ -405,14 +411,37 @@ const getPointsEntry = (pt, line, warId, warDate) => {
}; };
}; };
const getBudgetEntry = (budg, warId, warDate) => { const getBudgetEntry = (line, budg, warId, warDate) => {
return { const timestamp = getFullTimeDate(warDate, budg[5]);
const oldBudget = transformMoneyString(budg[9]);
const newBudget = transformMoneyString(budg[12]);
const fraction = budg[7] === 'NATO' ? 'BLUFOR' : 'OPFOR';
const budgetEntry = {
war: warId, war: warId,
time: getFullTimeDate(warDate, budg[5]), time: timestamp,
fraction: budg[7] === 'NATO' ? 'BLUFOR' : 'OPFOR', fraction: fraction,
oldBudget: transformMoneyString(budg[9]), oldBudget: oldBudget,
newBudget: transformMoneyString(budg[12]), newBudget: newBudget,
buy: oldBudget <= newBudget,
}; };
const budgetRespawnMatch = budgetRespawnNameRegex.exec(line);
if (budgetRespawnMatch && budgetRespawnMatch.length > 1) {
budgetEntry.player = budgetRespawnMatch[1];
budgetEntry.item = "Respawn";
} else {
const itemNameMatch = budgetItemNameRegex.exec(line);
const playerNameMatch = budgetPlayerNameRegex.exec(line);
if (playerNameMatch && playerNameMatch.length > 1) {
budgetEntry.player = playerNameMatch[1];
}
if (itemNameMatch && itemNameMatch.length > 1) {
budgetEntry.item = itemNameMatch[1];
}
}
return budgetEntry;
}; };
const getPlayerInfoFromString = (inputString) => { const getPlayerInfoFromString = (inputString) => {