feat: add new file
This commit is contained in:
108
server/situationData.js
Normal file
108
server/situationData.js
Normal file
@@ -0,0 +1,108 @@
|
||||
const db = require('./db')
|
||||
|
||||
function toAsset(row) {
|
||||
return {
|
||||
id: row.id,
|
||||
name: row.name,
|
||||
type: row.type,
|
||||
count: row.count,
|
||||
status: row.status,
|
||||
...(row.lat != null && { location: { lat: row.lat, lng: row.lng } }),
|
||||
}
|
||||
}
|
||||
|
||||
function toLosses(row) {
|
||||
return {
|
||||
bases: { destroyed: row.bases_destroyed, damaged: row.bases_damaged },
|
||||
personnelCasualties: { killed: row.personnel_killed, wounded: row.personnel_wounded },
|
||||
aircraft: row.aircraft,
|
||||
warships: row.warships,
|
||||
armor: row.armor,
|
||||
vehicles: row.vehicles,
|
||||
}
|
||||
}
|
||||
|
||||
const defaultLosses = {
|
||||
bases: { destroyed: 0, damaged: 0 },
|
||||
personnelCasualties: { killed: 0, wounded: 0 },
|
||||
aircraft: 0,
|
||||
warships: 0,
|
||||
armor: 0,
|
||||
vehicles: 0,
|
||||
}
|
||||
|
||||
function getSituation() {
|
||||
const summaryUs = db.prepare('SELECT * FROM force_summary WHERE side = ?').get('us')
|
||||
const summaryIr = db.prepare('SELECT * FROM force_summary WHERE side = ?').get('iran')
|
||||
const powerUs = db.prepare('SELECT * FROM power_index WHERE side = ?').get('us')
|
||||
const powerIr = db.prepare('SELECT * FROM power_index WHERE side = ?').get('iran')
|
||||
const assetsUs = db.prepare('SELECT * FROM force_asset WHERE side = ? ORDER BY id').all('us')
|
||||
const assetsIr = db.prepare('SELECT * FROM force_asset WHERE side = ? ORDER BY id').all('iran')
|
||||
const locUs = db.prepare('SELECT id, name, lat, lng, type, region, status, damage_level FROM key_location WHERE side = ?').all('us')
|
||||
const locIr = db.prepare('SELECT id, name, lat, lng, type, region FROM key_location WHERE side = ?').all('iran')
|
||||
const lossesUs = db.prepare('SELECT * FROM combat_losses WHERE side = ?').get('us')
|
||||
const lossesIr = db.prepare('SELECT * FROM combat_losses WHERE side = ?').get('iran')
|
||||
const trend = db.prepare('SELECT time, value FROM wall_street_trend ORDER BY time').all()
|
||||
const retaliationCur = db.prepare('SELECT value FROM retaliation_current WHERE id = 1').get()
|
||||
const retaliationHist = db.prepare('SELECT time, value FROM retaliation_history ORDER BY time').all()
|
||||
const updates = db.prepare('SELECT * FROM situation_update ORDER BY timestamp DESC').all()
|
||||
const meta = db.prepare('SELECT updated_at FROM situation WHERE id = 1').get()
|
||||
|
||||
return {
|
||||
lastUpdated: meta?.updated_at || new Date().toISOString(),
|
||||
usForces: {
|
||||
summary: {
|
||||
totalAssets: summaryUs?.total_assets ?? 0,
|
||||
personnel: summaryUs?.personnel ?? 0,
|
||||
navalShips: summaryUs?.naval_ships ?? 0,
|
||||
aircraft: summaryUs?.aircraft ?? 0,
|
||||
groundUnits: summaryUs?.ground_units ?? 0,
|
||||
uav: summaryUs?.uav ?? 0,
|
||||
missileConsumed: summaryUs?.missile_consumed ?? 0,
|
||||
missileStock: summaryUs?.missile_stock ?? 0,
|
||||
},
|
||||
powerIndex: {
|
||||
overall: powerUs?.overall ?? 0,
|
||||
militaryStrength: powerUs?.military_strength ?? 0,
|
||||
economicPower: powerUs?.economic_power ?? 0,
|
||||
geopoliticalInfluence: powerUs?.geopolitical_influence ?? 0,
|
||||
},
|
||||
assets: (assetsUs || []).map(toAsset),
|
||||
keyLocations: locUs || [],
|
||||
combatLosses: lossesUs ? toLosses(lossesUs) : defaultLosses,
|
||||
wallStreetInvestmentTrend: trend || [],
|
||||
},
|
||||
iranForces: {
|
||||
summary: {
|
||||
totalAssets: summaryIr?.total_assets ?? 0,
|
||||
personnel: summaryIr?.personnel ?? 0,
|
||||
navalShips: summaryIr?.naval_ships ?? 0,
|
||||
aircraft: summaryIr?.aircraft ?? 0,
|
||||
groundUnits: summaryIr?.ground_units ?? 0,
|
||||
uav: summaryIr?.uav ?? 0,
|
||||
missileConsumed: summaryIr?.missile_consumed ?? 0,
|
||||
missileStock: summaryIr?.missile_stock ?? 0,
|
||||
},
|
||||
powerIndex: {
|
||||
overall: powerIr?.overall ?? 0,
|
||||
militaryStrength: powerIr?.military_strength ?? 0,
|
||||
economicPower: powerIr?.economic_power ?? 0,
|
||||
geopoliticalInfluence: powerIr?.geopolitical_influence ?? 0,
|
||||
},
|
||||
assets: (assetsIr || []).map(toAsset),
|
||||
keyLocations: locIr || [],
|
||||
combatLosses: lossesIr ? toLosses(lossesIr) : defaultLosses,
|
||||
retaliationSentiment: retaliationCur?.value ?? 0,
|
||||
retaliationSentimentHistory: retaliationHist || [],
|
||||
},
|
||||
recentUpdates: (updates || []).map((u) => ({
|
||||
id: u.id,
|
||||
timestamp: u.timestamp,
|
||||
category: u.category,
|
||||
summary: u.summary,
|
||||
severity: u.severity,
|
||||
})),
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { getSituation }
|
||||
Reference in New Issue
Block a user