diff --git a/.dockerignore b/.dockerignore index 9f6b66f..8edd1e8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ .ralphex/ +.mcp.json docs/plans/ docs/implementation-plan.md * diff --git a/.gitignore b/.gitignore index 0b305b9..7bfaf87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .env +.mcp.json /.ralphex/ /.bin/ /dist/ diff --git a/docs/tool-contracts.json b/docs/tool-contracts.json index d37b681..03e1882 100644 --- a/docs/tool-contracts.json +++ b/docs/tool-contracts.json @@ -433,6 +433,10 @@ "type": ["integer", "null"], "minimum": 0 }, + "imp": { + "type": ["number", "null"], + "description": "STRATZ Individual Match Performance (IMP) for this player when upstream provides it. Null means unavailable for the match/player." + }, "won": { "type": "boolean" } @@ -447,6 +451,7 @@ "assists", "networth", "level", + "imp", "won" ], "additionalProperties": false diff --git a/internal/contracts/generated/schemas/stratz_batch_get_matches.output.json b/internal/contracts/generated/schemas/stratz_batch_get_matches.output.json index 20ccd0f..e77844c 100644 --- a/internal/contracts/generated/schemas/stratz_batch_get_matches.output.json +++ b/internal/contracts/generated/schemas/stratz_batch_get_matches.output.json @@ -494,6 +494,13 @@ "minimum": 1, "type": "integer" }, + "imp": { + "description": "STRATZ Individual Match Performance (IMP) for this player when upstream provides it. Null means unavailable for the match/player.", + "type": [ + "number", + "null" + ] + }, "kills": { "minimum": 0, "type": "integer" @@ -538,6 +545,7 @@ "assists", "networth", "level", + "imp", "won" ], "type": "object" diff --git a/internal/contracts/generated/schemas/stratz_get_match.output.json b/internal/contracts/generated/schemas/stratz_get_match.output.json index cceaa00..55688d7 100644 --- a/internal/contracts/generated/schemas/stratz_get_match.output.json +++ b/internal/contracts/generated/schemas/stratz_get_match.output.json @@ -490,6 +490,13 @@ "minimum": 1, "type": "integer" }, + "imp": { + "description": "STRATZ Individual Match Performance (IMP) for this player when upstream provides it. Null means unavailable for the match/player.", + "type": [ + "number", + "null" + ] + }, "kills": { "minimum": 0, "type": "integer" @@ -534,6 +541,7 @@ "assists", "networth", "level", + "imp", "won" ], "type": "object" diff --git a/internal/contracts/zz_generated.contracts.go b/internal/contracts/zz_generated.contracts.go index b189757..6f97116 100644 --- a/internal/contracts/zz_generated.contracts.go +++ b/internal/contracts/zz_generated.contracts.go @@ -226,16 +226,17 @@ type MatchAvailabilityContext struct { type MatchID string type MatchPlayer struct { - AccountID *string `json:"account_id"` - Assists int64 `json:"assists"` - Deaths int64 `json:"deaths"` - HeroID int64 `json:"hero_id"` - Kills int64 `json:"kills"` - Level *int64 `json:"level"` - Networth *int64 `json:"networth"` - Position int64 `json:"position"` - Team string `json:"team"` - Won bool `json:"won"` + AccountID *string `json:"account_id"` + Assists int64 `json:"assists"` + Deaths int64 `json:"deaths"` + HeroID int64 `json:"hero_id"` + Imp *float64 `json:"imp"` + Kills int64 `json:"kills"` + Level *int64 `json:"level"` + Networth *int64 `json:"networth"` + Position int64 `json:"position"` + Team string `json:"team"` + Won bool `json:"won"` } type MatchSummary struct { diff --git a/internal/domain/playermatch/mapping.go b/internal/domain/playermatch/mapping.go index 5065e00..db0dba3 100644 --- a/internal/domain/playermatch/mapping.go +++ b/internal/domain/playermatch/mapping.go @@ -143,6 +143,7 @@ func mapMatch(source *upstreamMatch, detail contracts.DetailLevel) contracts.Mat Assists: maxZero(player.Assists), Networth: nonNegative(player.Networth), Level: nonNegative(player.Level), + Imp: player.IMP, Won: won, }) } diff --git a/internal/domain/playermatch/service_test.go b/internal/domain/playermatch/service_test.go index 84d1381..23213ec 100644 --- a/internal/domain/playermatch/service_test.go +++ b/internal/domain/playermatch/service_test.go @@ -199,7 +199,7 @@ func TestMatchDetailLevelsAndDataNotReady(t *testing.T) { "leagueId":null, "gameVersionId":"7.XX", "parsedDateTime":1781728000, - "players":[{"steamAccountId":39734272,"heroId":5,"isRadiant":true,"playerSlot":0,"kills":10,"deaths":2,"assists":15,"networth":20000,"level":25}], + "players":[{"steamAccountId":39734272,"heroId":5,"isRadiant":true,"playerSlot":0,"kills":10,"deaths":2,"assists":15,"networth":20000,"level":25,"imp":8.75}], "playbackData":{ "buildingEvents":[{"time":100,"type":"TOWER","isRadiant":true,"npcId":42}], "roshanEvents":[{"time":200}], @@ -223,6 +223,9 @@ func TestMatchDetailLevelsAndDataNotReady(t *testing.T) { if request.OperationName != test.wantOperationName { t.Fatalf("operation = %q", request.OperationName) } + if !strings.Contains(request.Query, "imp") { + t.Fatalf("match query is missing player IMP: %s", request.Query) + } if test.wantObjectives && !strings.Contains(request.Query, "buildingEvents") { t.Fatalf("standard query is missing playback objectives: %s", request.Query) } @@ -240,6 +243,9 @@ func TestMatchDetailLevelsAndDataNotReady(t *testing.T) { (result.Data.Timeline != nil) != test.wantFull { t.Fatalf("match detail mapping = %#v", result.Data) } + if len(result.Data.Players) != 1 || result.Data.Players[0].Imp == nil || *result.Data.Players[0].Imp != 8.75 { + t.Fatalf("player IMP = %#v", result.Data.Players) + } if test.wantObjectives && len(result.Data.Objectives) != 3 { t.Fatalf("objectives = %#v", result.Data.Objectives) } diff --git a/internal/domain/playermatch/types.go b/internal/domain/playermatch/types.go index c95fe8c..3b38558 100644 --- a/internal/domain/playermatch/types.go +++ b/internal/domain/playermatch/types.go @@ -178,15 +178,16 @@ func (value *upstreamEnumID) UnmarshalJSON(data []byte) error { } type upstreamMatchPlayer struct { - SteamAccountID *int64 `json:"steamAccountId"` - HeroID int64 `json:"heroId"` - IsRadiant bool `json:"isRadiant"` - PlayerSlot int64 `json:"playerSlot"` - Kills int64 `json:"kills"` - Deaths int64 `json:"deaths"` - Assists int64 `json:"assists"` - Networth *int64 `json:"networth"` - Level *int64 `json:"level"` + SteamAccountID *int64 `json:"steamAccountId"` + HeroID int64 `json:"heroId"` + IsRadiant bool `json:"isRadiant"` + PlayerSlot int64 `json:"playerSlot"` + Kills int64 `json:"kills"` + Deaths int64 `json:"deaths"` + Assists int64 `json:"assists"` + Networth *int64 `json:"networth"` + Level *int64 `json:"level"` + IMP *float64 `json:"imp"` } type upstreamEvent struct { diff --git a/internal/graphql/generated/operations.go b/internal/graphql/generated/operations.go index 238f56f..27302c7 100644 --- a/internal/graphql/generated/operations.go +++ b/internal/graphql/generated/operations.go @@ -367,15 +367,16 @@ func (v *MatchLiveRequestType) GetSkip() int { return v.Skip } // MatchPlayerFields includes the GraphQL fields of MatchPlayerType requested by the fragment MatchPlayerFields. type MatchPlayerFields struct { - SteamAccountId *int64 `json:"steamAccountId"` - HeroId int `json:"heroId"` - IsRadiant bool `json:"isRadiant"` - PlayerSlot int `json:"playerSlot"` - Kills int `json:"kills"` - Deaths int `json:"deaths"` - Assists int `json:"assists"` - Networth *int `json:"networth"` - Level *int `json:"level"` + SteamAccountId *int64 `json:"steamAccountId"` + HeroId int `json:"heroId"` + IsRadiant bool `json:"isRadiant"` + PlayerSlot int `json:"playerSlot"` + Kills int `json:"kills"` + Deaths int `json:"deaths"` + Assists int `json:"assists"` + Networth *int `json:"networth"` + Level *int `json:"level"` + Imp *float64 `json:"imp"` } // GetSteamAccountId returns MatchPlayerFields.SteamAccountId, and is useful for accessing the field via an interface. @@ -405,6 +406,9 @@ func (v *MatchPlayerFields) GetNetworth() *int { return v.Networth } // GetLevel returns MatchPlayerFields.Level, and is useful for accessing the field via an interface. func (v *MatchPlayerFields) GetLevel() *int { return v.Level } +// GetImp returns MatchPlayerFields.Imp, and is useful for accessing the field via an interface. +func (v *MatchPlayerFields) GetImp() *float64 { return v.Imp } + type MatchPlayerPositionType string const ( @@ -699,6 +703,9 @@ func (v *MatchStandardFieldsPlayersMatchPlayerType) GetNetworth() *int { // GetLevel returns MatchStandardFieldsPlayersMatchPlayerType.Level, and is useful for accessing the field via an interface. func (v *MatchStandardFieldsPlayersMatchPlayerType) GetLevel() *int { return v.MatchPlayerFields.Level } +// GetImp returns MatchStandardFieldsPlayersMatchPlayerType.Imp, and is useful for accessing the field via an interface. +func (v *MatchStandardFieldsPlayersMatchPlayerType) GetImp() *float64 { return v.MatchPlayerFields.Imp } + func (v *MatchStandardFieldsPlayersMatchPlayerType) UnmarshalJSON(b []byte) error { if string(b) == "null" { @@ -742,6 +749,8 @@ type __premarshalMatchStandardFieldsPlayersMatchPlayerType struct { Networth *int `json:"networth"` Level *int `json:"level"` + + Imp *float64 `json:"imp"` } func (v *MatchStandardFieldsPlayersMatchPlayerType) MarshalJSON() ([]byte, error) { @@ -764,6 +773,7 @@ func (v *MatchStandardFieldsPlayersMatchPlayerType) __premarshalJSON() (*__prema retval.Assists = v.MatchPlayerFields.Assists retval.Networth = v.MatchPlayerFields.Networth retval.Level = v.MatchPlayerFields.Level + retval.Imp = v.MatchPlayerFields.Imp return &retval, nil } @@ -3315,6 +3325,11 @@ func (v *StratzGetMatchBatchSummaryMatch0MatchTypePlayersMatchPlayerType) GetLev return v.MatchPlayerFields.Level } +// GetImp returns StratzGetMatchBatchSummaryMatch0MatchTypePlayersMatchPlayerType.Imp, and is useful for accessing the field via an interface. +func (v *StratzGetMatchBatchSummaryMatch0MatchTypePlayersMatchPlayerType) GetImp() *float64 { + return v.MatchPlayerFields.Imp +} + func (v *StratzGetMatchBatchSummaryMatch0MatchTypePlayersMatchPlayerType) UnmarshalJSON(b []byte) error { if string(b) == "null" { @@ -3358,6 +3373,8 @@ type __premarshalStratzGetMatchBatchSummaryMatch0MatchTypePlayersMatchPlayerType Networth *int `json:"networth"` Level *int `json:"level"` + + Imp *float64 `json:"imp"` } func (v *StratzGetMatchBatchSummaryMatch0MatchTypePlayersMatchPlayerType) MarshalJSON() ([]byte, error) { @@ -3380,6 +3397,7 @@ func (v *StratzGetMatchBatchSummaryMatch0MatchTypePlayersMatchPlayerType) __prem retval.Assists = v.MatchPlayerFields.Assists retval.Networth = v.MatchPlayerFields.Networth retval.Level = v.MatchPlayerFields.Level + retval.Imp = v.MatchPlayerFields.Imp return &retval, nil } @@ -3590,6 +3608,11 @@ func (v *StratzGetMatchBatchSummaryMatch1MatchTypePlayersMatchPlayerType) GetLev return v.MatchPlayerFields.Level } +// GetImp returns StratzGetMatchBatchSummaryMatch1MatchTypePlayersMatchPlayerType.Imp, and is useful for accessing the field via an interface. +func (v *StratzGetMatchBatchSummaryMatch1MatchTypePlayersMatchPlayerType) GetImp() *float64 { + return v.MatchPlayerFields.Imp +} + func (v *StratzGetMatchBatchSummaryMatch1MatchTypePlayersMatchPlayerType) UnmarshalJSON(b []byte) error { if string(b) == "null" { @@ -3633,6 +3656,8 @@ type __premarshalStratzGetMatchBatchSummaryMatch1MatchTypePlayersMatchPlayerType Networth *int `json:"networth"` Level *int `json:"level"` + + Imp *float64 `json:"imp"` } func (v *StratzGetMatchBatchSummaryMatch1MatchTypePlayersMatchPlayerType) MarshalJSON() ([]byte, error) { @@ -3655,6 +3680,7 @@ func (v *StratzGetMatchBatchSummaryMatch1MatchTypePlayersMatchPlayerType) __prem retval.Assists = v.MatchPlayerFields.Assists retval.Networth = v.MatchPlayerFields.Networth retval.Level = v.MatchPlayerFields.Level + retval.Imp = v.MatchPlayerFields.Imp return &retval, nil } @@ -3865,6 +3891,11 @@ func (v *StratzGetMatchBatchSummaryMatch2MatchTypePlayersMatchPlayerType) GetLev return v.MatchPlayerFields.Level } +// GetImp returns StratzGetMatchBatchSummaryMatch2MatchTypePlayersMatchPlayerType.Imp, and is useful for accessing the field via an interface. +func (v *StratzGetMatchBatchSummaryMatch2MatchTypePlayersMatchPlayerType) GetImp() *float64 { + return v.MatchPlayerFields.Imp +} + func (v *StratzGetMatchBatchSummaryMatch2MatchTypePlayersMatchPlayerType) UnmarshalJSON(b []byte) error { if string(b) == "null" { @@ -3908,6 +3939,8 @@ type __premarshalStratzGetMatchBatchSummaryMatch2MatchTypePlayersMatchPlayerType Networth *int `json:"networth"` Level *int `json:"level"` + + Imp *float64 `json:"imp"` } func (v *StratzGetMatchBatchSummaryMatch2MatchTypePlayersMatchPlayerType) MarshalJSON() ([]byte, error) { @@ -3930,6 +3963,7 @@ func (v *StratzGetMatchBatchSummaryMatch2MatchTypePlayersMatchPlayerType) __prem retval.Assists = v.MatchPlayerFields.Assists retval.Networth = v.MatchPlayerFields.Networth retval.Level = v.MatchPlayerFields.Level + retval.Imp = v.MatchPlayerFields.Imp return &retval, nil } @@ -4140,6 +4174,11 @@ func (v *StratzGetMatchBatchSummaryMatch3MatchTypePlayersMatchPlayerType) GetLev return v.MatchPlayerFields.Level } +// GetImp returns StratzGetMatchBatchSummaryMatch3MatchTypePlayersMatchPlayerType.Imp, and is useful for accessing the field via an interface. +func (v *StratzGetMatchBatchSummaryMatch3MatchTypePlayersMatchPlayerType) GetImp() *float64 { + return v.MatchPlayerFields.Imp +} + func (v *StratzGetMatchBatchSummaryMatch3MatchTypePlayersMatchPlayerType) UnmarshalJSON(b []byte) error { if string(b) == "null" { @@ -4183,6 +4222,8 @@ type __premarshalStratzGetMatchBatchSummaryMatch3MatchTypePlayersMatchPlayerType Networth *int `json:"networth"` Level *int `json:"level"` + + Imp *float64 `json:"imp"` } func (v *StratzGetMatchBatchSummaryMatch3MatchTypePlayersMatchPlayerType) MarshalJSON() ([]byte, error) { @@ -4205,6 +4246,7 @@ func (v *StratzGetMatchBatchSummaryMatch3MatchTypePlayersMatchPlayerType) __prem retval.Assists = v.MatchPlayerFields.Assists retval.Networth = v.MatchPlayerFields.Networth retval.Level = v.MatchPlayerFields.Level + retval.Imp = v.MatchPlayerFields.Imp return &retval, nil } @@ -4415,6 +4457,11 @@ func (v *StratzGetMatchBatchSummaryMatch4MatchTypePlayersMatchPlayerType) GetLev return v.MatchPlayerFields.Level } +// GetImp returns StratzGetMatchBatchSummaryMatch4MatchTypePlayersMatchPlayerType.Imp, and is useful for accessing the field via an interface. +func (v *StratzGetMatchBatchSummaryMatch4MatchTypePlayersMatchPlayerType) GetImp() *float64 { + return v.MatchPlayerFields.Imp +} + func (v *StratzGetMatchBatchSummaryMatch4MatchTypePlayersMatchPlayerType) UnmarshalJSON(b []byte) error { if string(b) == "null" { @@ -4458,6 +4505,8 @@ type __premarshalStratzGetMatchBatchSummaryMatch4MatchTypePlayersMatchPlayerType Networth *int `json:"networth"` Level *int `json:"level"` + + Imp *float64 `json:"imp"` } func (v *StratzGetMatchBatchSummaryMatch4MatchTypePlayersMatchPlayerType) MarshalJSON() ([]byte, error) { @@ -4480,6 +4529,7 @@ func (v *StratzGetMatchBatchSummaryMatch4MatchTypePlayersMatchPlayerType) __prem retval.Assists = v.MatchPlayerFields.Assists retval.Networth = v.MatchPlayerFields.Networth retval.Level = v.MatchPlayerFields.Level + retval.Imp = v.MatchPlayerFields.Imp return &retval, nil } @@ -5074,6 +5124,11 @@ func (v *StratzGetMatchSummaryMatchMatchTypePlayersMatchPlayerType) GetLevel() * return v.MatchPlayerFields.Level } +// GetImp returns StratzGetMatchSummaryMatchMatchTypePlayersMatchPlayerType.Imp, and is useful for accessing the field via an interface. +func (v *StratzGetMatchSummaryMatchMatchTypePlayersMatchPlayerType) GetImp() *float64 { + return v.MatchPlayerFields.Imp +} + func (v *StratzGetMatchSummaryMatchMatchTypePlayersMatchPlayerType) UnmarshalJSON(b []byte) error { if string(b) == "null" { @@ -5117,6 +5172,8 @@ type __premarshalStratzGetMatchSummaryMatchMatchTypePlayersMatchPlayerType struc Networth *int `json:"networth"` Level *int `json:"level"` + + Imp *float64 `json:"imp"` } func (v *StratzGetMatchSummaryMatchMatchTypePlayersMatchPlayerType) MarshalJSON() ([]byte, error) { @@ -5139,6 +5196,7 @@ func (v *StratzGetMatchSummaryMatchMatchTypePlayersMatchPlayerType) __premarshal retval.Assists = v.MatchPlayerFields.Assists retval.Networth = v.MatchPlayerFields.Networth retval.Level = v.MatchPlayerFields.Level + retval.Imp = v.MatchPlayerFields.Imp return &retval, nil } @@ -5711,6 +5769,11 @@ func (v *StratzGetMatchesSummaryMatchesMatchTypePlayersMatchPlayerType) GetLevel return v.MatchPlayerFields.Level } +// GetImp returns StratzGetMatchesSummaryMatchesMatchTypePlayersMatchPlayerType.Imp, and is useful for accessing the field via an interface. +func (v *StratzGetMatchesSummaryMatchesMatchTypePlayersMatchPlayerType) GetImp() *float64 { + return v.MatchPlayerFields.Imp +} + func (v *StratzGetMatchesSummaryMatchesMatchTypePlayersMatchPlayerType) UnmarshalJSON(b []byte) error { if string(b) == "null" { @@ -5754,6 +5817,8 @@ type __premarshalStratzGetMatchesSummaryMatchesMatchTypePlayersMatchPlayerType s Networth *int `json:"networth"` Level *int `json:"level"` + + Imp *float64 `json:"imp"` } func (v *StratzGetMatchesSummaryMatchesMatchTypePlayersMatchPlayerType) MarshalJSON() ([]byte, error) { @@ -5776,6 +5841,7 @@ func (v *StratzGetMatchesSummaryMatchesMatchTypePlayersMatchPlayerType) __premar retval.Assists = v.MatchPlayerFields.Assists retval.Networth = v.MatchPlayerFields.Networth retval.Level = v.MatchPlayerFields.Level + retval.Imp = v.MatchPlayerFields.Imp return &retval, nil } @@ -7249,6 +7315,7 @@ fragment MatchPlayerFields on MatchPlayerType { assists networth level + imp } ` @@ -7351,6 +7418,7 @@ fragment MatchPlayerFields on MatchPlayerType { assists networth level + imp } ` @@ -7446,6 +7514,7 @@ fragment MatchPlayerFields on MatchPlayerType { assists networth level + imp } ` @@ -7552,6 +7621,7 @@ fragment MatchPlayerFields on MatchPlayerType { assists networth level + imp } ` @@ -7634,6 +7704,7 @@ fragment MatchPlayerFields on MatchPlayerType { assists networth level + imp } ` @@ -7697,6 +7768,7 @@ fragment MatchPlayerFields on MatchPlayerType { assists networth level + imp } ` @@ -7795,6 +7867,7 @@ fragment MatchPlayerFields on MatchPlayerType { assists networth level + imp } ` @@ -7877,6 +7950,7 @@ fragment MatchPlayerFields on MatchPlayerType { assists networth level + imp } ` @@ -7940,6 +8014,7 @@ fragment MatchPlayerFields on MatchPlayerType { assists networth level + imp } ` diff --git a/internal/graphql/generated/operations.json b/internal/graphql/generated/operations.json index d94c500..a14efc4 100644 --- a/internal/graphql/generated/operations.json +++ b/internal/graphql/generated/operations.json @@ -27,47 +27,47 @@ }, { "operationName": "StratzGetMatchBatchFull", - "query": "\nquery StratzGetMatchBatchFull ($id0: Long!, $id1: Long!, $id2: Long!, $id3: Long!, $id4: Long!) {\n\tmatch0: match(id: $id0) {\n\t\t... MatchFullFields\n\t}\n\tmatch1: match(id: $id1) {\n\t\t... MatchFullFields\n\t}\n\tmatch2: match(id: $id2) {\n\t\t... MatchFullFields\n\t}\n\tmatch3: match(id: $id3) {\n\t\t... MatchFullFields\n\t}\n\tmatch4: match(id: $id4) {\n\t\t... MatchFullFields\n\t}\n}\nfragment MatchFullFields on MatchType {\n\t... MatchStandardFields\n\tplaybackData {\n\t\truneEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\trune\n\t\t}\n\t\twardEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\twardType\n\t\t\tfromPlayer\n\t\t}\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n}\n", + "query": "\nquery StratzGetMatchBatchFull ($id0: Long!, $id1: Long!, $id2: Long!, $id3: Long!, $id4: Long!) {\n\tmatch0: match(id: $id0) {\n\t\t... MatchFullFields\n\t}\n\tmatch1: match(id: $id1) {\n\t\t... MatchFullFields\n\t}\n\tmatch2: match(id: $id2) {\n\t\t... MatchFullFields\n\t}\n\tmatch3: match(id: $id3) {\n\t\t... MatchFullFields\n\t}\n\tmatch4: match(id: $id4) {\n\t\t... MatchFullFields\n\t}\n}\nfragment MatchFullFields on MatchType {\n\t... MatchStandardFields\n\tplaybackData {\n\t\truneEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\trune\n\t\t}\n\t\twardEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\twardType\n\t\t\tfromPlayer\n\t\t}\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n\timp\n}\n", "sourceLocation": "internal/graphql/operations/match.graphql" }, { "operationName": "StratzGetMatchBatchStandard", - "query": "\nquery StratzGetMatchBatchStandard ($id0: Long!, $id1: Long!, $id2: Long!, $id3: Long!, $id4: Long!) {\n\tmatch0: match(id: $id0) {\n\t\t... MatchStandardFields\n\t}\n\tmatch1: match(id: $id1) {\n\t\t... MatchStandardFields\n\t}\n\tmatch2: match(id: $id2) {\n\t\t... MatchStandardFields\n\t}\n\tmatch3: match(id: $id3) {\n\t\t... MatchStandardFields\n\t}\n\tmatch4: match(id: $id4) {\n\t\t... MatchStandardFields\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n}\n", + "query": "\nquery StratzGetMatchBatchStandard ($id0: Long!, $id1: Long!, $id2: Long!, $id3: Long!, $id4: Long!) {\n\tmatch0: match(id: $id0) {\n\t\t... MatchStandardFields\n\t}\n\tmatch1: match(id: $id1) {\n\t\t... MatchStandardFields\n\t}\n\tmatch2: match(id: $id2) {\n\t\t... MatchStandardFields\n\t}\n\tmatch3: match(id: $id3) {\n\t\t... MatchStandardFields\n\t}\n\tmatch4: match(id: $id4) {\n\t\t... MatchStandardFields\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n\timp\n}\n", "sourceLocation": "internal/graphql/operations/match.graphql" }, { "operationName": "StratzGetMatchBatchSummary", - "query": "\nquery StratzGetMatchBatchSummary ($id0: Long!, $id1: Long!, $id2: Long!, $id3: Long!, $id4: Long!) {\n\tmatch0: match(id: $id0) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n\tmatch1: match(id: $id1) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n\tmatch2: match(id: $id2) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n\tmatch3: match(id: $id3) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n\tmatch4: match(id: $id4) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n}\n", + "query": "\nquery StratzGetMatchBatchSummary ($id0: Long!, $id1: Long!, $id2: Long!, $id3: Long!, $id4: Long!) {\n\tmatch0: match(id: $id0) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n\tmatch1: match(id: $id1) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n\tmatch2: match(id: $id2) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n\tmatch3: match(id: $id3) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n\tmatch4: match(id: $id4) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n\timp\n}\n", "sourceLocation": "internal/graphql/operations/match.graphql" }, { "operationName": "StratzGetMatchFull", - "query": "\nquery StratzGetMatchFull ($id: Long!) {\n\tmatch(id: $id) {\n\t\t... MatchFullFields\n\t}\n}\nfragment MatchFullFields on MatchType {\n\t... MatchStandardFields\n\tplaybackData {\n\t\truneEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\trune\n\t\t}\n\t\twardEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\twardType\n\t\t\tfromPlayer\n\t\t}\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n}\n", + "query": "\nquery StratzGetMatchFull ($id: Long!) {\n\tmatch(id: $id) {\n\t\t... MatchFullFields\n\t}\n}\nfragment MatchFullFields on MatchType {\n\t... MatchStandardFields\n\tplaybackData {\n\t\truneEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\trune\n\t\t}\n\t\twardEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\twardType\n\t\t\tfromPlayer\n\t\t}\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n\timp\n}\n", "sourceLocation": "internal/graphql/operations/match.graphql" }, { "operationName": "StratzGetMatchStandard", - "query": "\nquery StratzGetMatchStandard ($id: Long!) {\n\tmatch(id: $id) {\n\t\t... MatchStandardFields\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n}\n", + "query": "\nquery StratzGetMatchStandard ($id: Long!) {\n\tmatch(id: $id) {\n\t\t... MatchStandardFields\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n\timp\n}\n", "sourceLocation": "internal/graphql/operations/match.graphql" }, { "operationName": "StratzGetMatchSummary", - "query": "\nquery StratzGetMatchSummary ($id: Long!) {\n\tmatch(id: $id) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n}\n", + "query": "\nquery StratzGetMatchSummary ($id: Long!) {\n\tmatch(id: $id) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n\timp\n}\n", "sourceLocation": "internal/graphql/operations/match.graphql" }, { "operationName": "StratzGetMatchesFull", - "query": "\nquery StratzGetMatchesFull ($ids: [Long!]!) {\n\tmatches(ids: $ids) {\n\t\t... MatchFullFields\n\t}\n}\nfragment MatchFullFields on MatchType {\n\t... MatchStandardFields\n\tplaybackData {\n\t\truneEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\trune\n\t\t}\n\t\twardEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\twardType\n\t\t\tfromPlayer\n\t\t}\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n}\n", + "query": "\nquery StratzGetMatchesFull ($ids: [Long!]!) {\n\tmatches(ids: $ids) {\n\t\t... MatchFullFields\n\t}\n}\nfragment MatchFullFields on MatchType {\n\t... MatchStandardFields\n\tplaybackData {\n\t\truneEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\trune\n\t\t}\n\t\twardEvents {\n\t\t\ttime\n\t\t\taction\n\t\t\twardType\n\t\t\tfromPlayer\n\t\t}\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n\timp\n}\n", "sourceLocation": "internal/graphql/operations/match.graphql" }, { "operationName": "StratzGetMatchesStandard", - "query": "\nquery StratzGetMatchesStandard ($ids: [Long!]!) {\n\tmatches(ids: $ids) {\n\t\t... MatchStandardFields\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n}\n", + "query": "\nquery StratzGetMatchesStandard ($ids: [Long!]!) {\n\tmatches(ids: $ids) {\n\t\t... MatchStandardFields\n\t}\n}\nfragment MatchStandardFields on MatchType {\n\t... MatchSummaryFields\n\tplayers {\n\t\t... MatchPlayerFields\n\t}\n\tplaybackData {\n\t\tbuildingEvents {\n\t\t\ttime\n\t\t\ttype\n\t\t\tisRadiant\n\t\t\tnpcId\n\t\t}\n\t\troshanEvents {\n\t\t\ttime\n\t\t}\n\t\ttowerDeathEvents {\n\t\t\ttime\n\t\t\tradiant\n\t\t\tdire\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n\timp\n}\n", "sourceLocation": "internal/graphql/operations/match.graphql" }, { "operationName": "StratzGetMatchesSummary", - "query": "\nquery StratzGetMatchesSummary ($ids: [Long!]!) {\n\tmatches(ids: $ids) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n}\n", + "query": "\nquery StratzGetMatchesSummary ($ids: [Long!]!) {\n\tmatches(ids: $ids) {\n\t\t... MatchSummaryFields\n\t\tplayers {\n\t\t\t... MatchPlayerFields\n\t\t}\n\t}\n}\nfragment MatchSummaryFields on MatchType {\n\tid\n\tstartDateTime\n\tdurationSeconds\n\tdidRadiantWin\n\tradiantKills\n\tdireKills\n\tgameModeId: gameMode\n\tlobbyTypeId: lobbyType\n\tregionId\n\tleagueId\n\tgameVersionId\n\tparsedDateTime\n\tstatsDateTime\n}\nfragment MatchPlayerFields on MatchPlayerType {\n\tsteamAccountId\n\theroId\n\tisRadiant\n\tplayerSlot\n\tkills\n\tdeaths\n\tassists\n\tnetworth\n\tlevel\n\timp\n}\n", "sourceLocation": "internal/graphql/operations/match.graphql" }, { diff --git a/internal/graphql/operations/match.graphql b/internal/graphql/operations/match.graphql index d220e94..3dcb5ea 100644 --- a/internal/graphql/operations/match.graphql +++ b/internal/graphql/operations/match.graphql @@ -24,6 +24,7 @@ fragment MatchPlayerFields on MatchPlayerType { assists networth level + imp } fragment MatchStandardFields on MatchType { diff --git a/internal/graphql/schema/bootstrap.graphql b/internal/graphql/schema/bootstrap.graphql index 37359f9..3b6a6bd 100644 --- a/internal/graphql/schema/bootstrap.graphql +++ b/internal/graphql/schema/bootstrap.graphql @@ -324,6 +324,7 @@ type MatchPlayerType { assists: Int! networth: Int level: Int + imp: Float } type MatchEventType {