feat: surface SCUM vehicle functional state

This commit is contained in:
npc0-hue
2026-09-18 16:56:36 +08:00
parent 156392df1e
commit 60d479db71
13 changed files with 62 additions and 17 deletions
+3 -3
View File
@@ -46,7 +46,7 @@ func newSCUMQueryIngestFixture(t *testing.T) (*CoreService, string, domain.Serve
PollIntervalSeconds: 120, MaxRows: 500, TimeoutSeconds: 30,
Projections: []domain.GameClientBridgeQueryProjectionDeclaration{{
Collection: scumProjectionVehicles, RowPath: "rows", UpsertKeys: []string{"gameVehicleId"},
FieldMappings: map[string]string{"gameVehicleId": "gameVehicleId", "vehicleClass": "vehicleClass", "displayName": "displayName", "exists": "existsInGame", "x": "x", "y": "y", "z": "z"},
FieldMappings: map[string]string{"gameVehicleId": "gameVehicleId", "vehicleClass": "vehicleClass", "displayName": "displayName", "functional": "functional", "exists": "existsInGame", "x": "x", "y": "y", "z": "z"},
}},
}}},
})
@@ -178,7 +178,7 @@ func TestSCUMQueryProjectionFillsTypedTables(t *testing.T) {
t.Fatalf("project player rows: %v", err)
}
vehicleJob.State = domain.JobStateSucceeded
vehicleJob.ExecutionResult = domain.JobExecutionResult{Kind: "sqlite.query", Content: `{"rows":[{"gameVehicleId":"5923426","vehicleClass":"MountainBike_ES","displayName":"","existsInGame":1,"x":-406400.84375,"y":558707.4375,"z":83294.6171875,"observedAt":"2026-09-16T08:05:00Z"}]}`}
vehicleJob.ExecutionResult = domain.JobExecutionResult{Kind: "sqlite.query", Content: `{"rows":[{"gameVehicleId":"5923426","vehicleClass":"MountainBike_ES","displayName":"","functional":1,"existsInGame":1,"x":-406400.84375,"y":558707.4375,"z":83294.6171875,"observedAt":"2026-09-16T08:05:00Z"}]}`}
if err := svc.projectRemoteAdapterJobResult(vehicleJob, fixedTime); err != nil {
t.Fatalf("project vehicle rows: %v", err)
}
@@ -198,7 +198,7 @@ func TestSCUMQueryProjectionFillsTypedTables(t *testing.T) {
t.Fatalf("expected last login from database evidence, got %s", user.LastLoginAt)
}
vehicles, err := svc.ListSCUMVehiclesForSession(session, domain.SCUMVehicleFilter{ServerInstanceID: instance.ID})
if err != nil || len(vehicles) != 1 || vehicles[0].VehicleClass != "MountainBike_ES" || vehicles[0].X == nil || *vehicles[0].X != -406400.84375 {
if err != nil || len(vehicles) != 1 || vehicles[0].VehicleClass != "MountainBike_ES" || vehicles[0].Functional == nil || !*vehicles[0].Functional || vehicles[0].X == nil || *vehicles[0].X != -406400.84375 {
t.Fatalf("unexpected projected vehicle: vehicles=%+v err=%v", vehicles, err)
}
userTracks, err := svc.ListSCUMUserTrajectoriesForSession(session, domain.SCUMUserTrajectoryFilter{ServerInstanceID: instance.ID})