event log
This commit is contained in:
+29
-9
@@ -7,7 +7,7 @@ use axum::{
|
||||
};
|
||||
use rusqlite::{params, Connection, OptionalExtension};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::json;
|
||||
use serde_json::{json, Value};
|
||||
use std::{
|
||||
collections::{BTreeMap, HashMap},
|
||||
env, fs,
|
||||
@@ -218,6 +218,7 @@ struct GameResponse {
|
||||
struct GameLogsResponse {
|
||||
chat_log: Vec<String>,
|
||||
battle_log: Vec<String>,
|
||||
event_log: Value,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
@@ -581,21 +582,37 @@ async fn game_logs(
|
||||
let session_id = validate_session_id(&session_id)?;
|
||||
let conn = open_db(&state.battles_db)?;
|
||||
// Logs are non-critical: a missing match_logs table or row yields empty arrays.
|
||||
let row: Option<(Option<String>, Option<String>)> = conn
|
||||
let row: Option<(Option<String>, Option<String>, Option<String>)> = match conn
|
||||
.query_row(
|
||||
"SELECT chat_log_json, battle_log_json FROM match_logs WHERE session_id = ?1",
|
||||
"SELECT chat_log_json, battle_log_json, event_log_json FROM match_logs WHERE session_id = ?1",
|
||||
params![session_id],
|
||||
|r| Ok((r.get(0)?, r.get(1)?)),
|
||||
|r| Ok((r.get(0)?, r.get(1)?, r.get(2)?)),
|
||||
)
|
||||
.optional()
|
||||
.unwrap_or(None);
|
||||
let parse = |s: Option<String>| -> Vec<String> {
|
||||
s.and_then(|t| serde_json::from_str(&t).ok()).unwrap_or_default()
|
||||
{
|
||||
Ok(row) => row,
|
||||
Err(_) => conn
|
||||
.query_row(
|
||||
"SELECT chat_log_json, battle_log_json FROM match_logs WHERE session_id = ?1",
|
||||
params![session_id],
|
||||
|r| Ok((r.get(0)?, r.get(1)?, None)),
|
||||
)
|
||||
.optional()
|
||||
.unwrap_or(None),
|
||||
};
|
||||
let (chat, battle) = row.unwrap_or((None, None));
|
||||
let parse = |s: Option<String>| -> Vec<String> {
|
||||
s.and_then(|t| serde_json::from_str(&t).ok())
|
||||
.unwrap_or_default()
|
||||
};
|
||||
let parse_event_log = |s: Option<String>| -> Value {
|
||||
s.and_then(|t| serde_json::from_str(&t).ok())
|
||||
.unwrap_or_else(|| json!({ "kills": [], "damage": [] }))
|
||||
};
|
||||
let (chat, battle, event_log) = row.unwrap_or((None, None, None));
|
||||
Ok(Json(GameLogsResponse {
|
||||
chat_log: parse(chat),
|
||||
battle_log: parse(battle),
|
||||
event_log: parse_event_log(event_log),
|
||||
}))
|
||||
}
|
||||
|
||||
@@ -1929,7 +1946,10 @@ mod tests {
|
||||
names.insert("ussr_t_34".to_string(), t);
|
||||
assert_eq!(lookup_vehicle_name(&names, "ussr_t_34", "ru"), "Т-34");
|
||||
assert_eq!(lookup_vehicle_name(&names, "ussr_t_34", "de"), "T-34");
|
||||
assert_eq!(lookup_vehicle_name(&names, "unknown_cdk", "en"), "unknown_cdk");
|
||||
assert_eq!(
|
||||
lookup_vehicle_name(&names, "unknown_cdk", "en"),
|
||||
"unknown_cdk"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user