Add playerSummaries to schema + Video fragments
All checks were successful
Tests / Tests (pull_request) Successful in 10s
All checks were successful
Tests / Tests (pull_request) Successful in 10s
Backs the multi-player vs UI: feed cards and the detail page both
read `video.playerSummaries`, a per-cluster rollup with username,
profile image, representative full-frame URL, makes/total/percentage.
- PlayerSummaryFields fragment in shooter.gql
- VideoCardFields (feed) and GetVideoDetails (detail) include
playerSummaries via the new fragment
- VideoCardFields tag selection extended to include tagClasses,
needed for the FE's player_count detection
Generated by `just gql` from the BE additions in railbird PR
dean/video-player-summaries.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
110
src/index.tsx
110
src/index.tsx
@@ -2718,6 +2718,18 @@ export type PlayerClusterShotGql = {
|
|||||||
shotId: Scalars["Int"]["output"];
|
shotId: Scalars["Int"]["output"];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type PlayerSummaryGql = {
|
||||||
|
__typename?: "PlayerSummaryGQL";
|
||||||
|
clusterId: Scalars["Int"]["output"];
|
||||||
|
makePercentage: Scalars["Float"]["output"];
|
||||||
|
profileImageUri?: Maybe<Scalars["String"]["output"]>;
|
||||||
|
representativeFullFrameUrl?: Maybe<Scalars["String"]["output"]>;
|
||||||
|
totalShots: Scalars["Int"]["output"];
|
||||||
|
totalShotsMade: Scalars["Int"]["output"];
|
||||||
|
userId?: Maybe<Scalars["Int"]["output"]>;
|
||||||
|
username?: Maybe<Scalars["String"]["output"]>;
|
||||||
|
};
|
||||||
|
|
||||||
export enum PocketEnum {
|
export enum PocketEnum {
|
||||||
Corner = "CORNER",
|
Corner = "CORNER",
|
||||||
Side = "SIDE",
|
Side = "SIDE",
|
||||||
@@ -3557,6 +3569,7 @@ export type VideoGql = {
|
|||||||
medianRun?: Maybe<Scalars["Float"]["output"]>;
|
medianRun?: Maybe<Scalars["Float"]["output"]>;
|
||||||
name?: Maybe<Scalars["String"]["output"]>;
|
name?: Maybe<Scalars["String"]["output"]>;
|
||||||
owner?: Maybe<UserGql>;
|
owner?: Maybe<UserGql>;
|
||||||
|
playerSummaries: Array<PlayerSummaryGql>;
|
||||||
playlist?: Maybe<HlsPlaylistGql>;
|
playlist?: Maybe<HlsPlaylistGql>;
|
||||||
pocketSize?: Maybe<Scalars["Float"]["output"]>;
|
pocketSize?: Maybe<Scalars["Float"]["output"]>;
|
||||||
private: Scalars["Boolean"]["output"];
|
private: Scalars["Boolean"]["output"];
|
||||||
@@ -4174,7 +4187,22 @@ export type GetFeedQuery = {
|
|||||||
lastIntendedSegmentBound?: number | null;
|
lastIntendedSegmentBound?: number | null;
|
||||||
streamSegmentType: StreamSegmentTypeEnum;
|
streamSegmentType: StreamSegmentTypeEnum;
|
||||||
} | null;
|
} | null;
|
||||||
tags: Array<{ __typename?: "VideoTag"; name: string }>;
|
tags: Array<{
|
||||||
|
__typename?: "VideoTag";
|
||||||
|
name: string;
|
||||||
|
tagClasses: Array<{ __typename?: "VideoTagClass"; name: string }>;
|
||||||
|
}>;
|
||||||
|
playerSummaries: Array<{
|
||||||
|
__typename?: "PlayerSummaryGQL";
|
||||||
|
clusterId: number;
|
||||||
|
userId?: number | null;
|
||||||
|
username?: string | null;
|
||||||
|
profileImageUri?: string | null;
|
||||||
|
representativeFullFrameUrl?: string | null;
|
||||||
|
totalShots: number;
|
||||||
|
totalShotsMade: number;
|
||||||
|
makePercentage: number;
|
||||||
|
}>;
|
||||||
currentProcessing?: {
|
currentProcessing?: {
|
||||||
__typename?: "VideoProcessingGQL";
|
__typename?: "VideoProcessingGQL";
|
||||||
id: number;
|
id: number;
|
||||||
@@ -4259,7 +4287,22 @@ export type VideoCardFieldsFragment = {
|
|||||||
lastIntendedSegmentBound?: number | null;
|
lastIntendedSegmentBound?: number | null;
|
||||||
streamSegmentType: StreamSegmentTypeEnum;
|
streamSegmentType: StreamSegmentTypeEnum;
|
||||||
} | null;
|
} | null;
|
||||||
tags: Array<{ __typename?: "VideoTag"; name: string }>;
|
tags: Array<{
|
||||||
|
__typename?: "VideoTag";
|
||||||
|
name: string;
|
||||||
|
tagClasses: Array<{ __typename?: "VideoTagClass"; name: string }>;
|
||||||
|
}>;
|
||||||
|
playerSummaries: Array<{
|
||||||
|
__typename?: "PlayerSummaryGQL";
|
||||||
|
clusterId: number;
|
||||||
|
userId?: number | null;
|
||||||
|
username?: string | null;
|
||||||
|
profileImageUri?: string | null;
|
||||||
|
representativeFullFrameUrl?: string | null;
|
||||||
|
totalShots: number;
|
||||||
|
totalShotsMade: number;
|
||||||
|
makePercentage: number;
|
||||||
|
}>;
|
||||||
currentProcessing?: {
|
currentProcessing?: {
|
||||||
__typename?: "VideoProcessingGQL";
|
__typename?: "VideoProcessingGQL";
|
||||||
id: number;
|
id: number;
|
||||||
@@ -4358,7 +4401,22 @@ export type GetVideoFeedQuery = {
|
|||||||
lastIntendedSegmentBound?: number | null;
|
lastIntendedSegmentBound?: number | null;
|
||||||
streamSegmentType: StreamSegmentTypeEnum;
|
streamSegmentType: StreamSegmentTypeEnum;
|
||||||
} | null;
|
} | null;
|
||||||
tags: Array<{ __typename?: "VideoTag"; name: string }>;
|
tags: Array<{
|
||||||
|
__typename?: "VideoTag";
|
||||||
|
name: string;
|
||||||
|
tagClasses: Array<{ __typename?: "VideoTagClass"; name: string }>;
|
||||||
|
}>;
|
||||||
|
playerSummaries: Array<{
|
||||||
|
__typename?: "PlayerSummaryGQL";
|
||||||
|
clusterId: number;
|
||||||
|
userId?: number | null;
|
||||||
|
username?: string | null;
|
||||||
|
profileImageUri?: string | null;
|
||||||
|
representativeFullFrameUrl?: string | null;
|
||||||
|
totalShots: number;
|
||||||
|
totalShotsMade: number;
|
||||||
|
makePercentage: number;
|
||||||
|
}>;
|
||||||
currentProcessing?: {
|
currentProcessing?: {
|
||||||
__typename?: "VideoProcessingGQL";
|
__typename?: "VideoProcessingGQL";
|
||||||
id: number;
|
id: number;
|
||||||
@@ -4929,6 +4987,18 @@ export type GetRunsWithTimestampsQuery = {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type PlayerSummaryFieldsFragment = {
|
||||||
|
__typename?: "PlayerSummaryGQL";
|
||||||
|
clusterId: number;
|
||||||
|
userId?: number | null;
|
||||||
|
username?: string | null;
|
||||||
|
profileImageUri?: string | null;
|
||||||
|
representativeFullFrameUrl?: string | null;
|
||||||
|
totalShots: number;
|
||||||
|
totalShotsMade: number;
|
||||||
|
makePercentage: number;
|
||||||
|
};
|
||||||
|
|
||||||
export type PlayerClusterShotFieldsFragment = {
|
export type PlayerClusterShotFieldsFragment = {
|
||||||
__typename?: "PlayerClusterShotGQL";
|
__typename?: "PlayerClusterShotGQL";
|
||||||
shotId: number;
|
shotId: number;
|
||||||
@@ -5955,6 +6025,17 @@ export type GetVideoDetailsQuery = {
|
|||||||
name: string;
|
name: string;
|
||||||
tagClasses: Array<{ __typename?: "VideoTagClass"; name: string }>;
|
tagClasses: Array<{ __typename?: "VideoTagClass"; name: string }>;
|
||||||
}>;
|
}>;
|
||||||
|
playerSummaries: Array<{
|
||||||
|
__typename?: "PlayerSummaryGQL";
|
||||||
|
clusterId: number;
|
||||||
|
userId?: number | null;
|
||||||
|
username?: string | null;
|
||||||
|
profileImageUri?: string | null;
|
||||||
|
representativeFullFrameUrl?: string | null;
|
||||||
|
totalShots: number;
|
||||||
|
totalShotsMade: number;
|
||||||
|
makePercentage: number;
|
||||||
|
}>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -6612,6 +6693,18 @@ export type GetUploadStreamsWithDetailsQuery = {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const PlayerSummaryFieldsFragmentDoc = gql`
|
||||||
|
fragment PlayerSummaryFields on PlayerSummaryGQL {
|
||||||
|
clusterId
|
||||||
|
userId
|
||||||
|
username
|
||||||
|
profileImageUri
|
||||||
|
representativeFullFrameUrl
|
||||||
|
totalShots
|
||||||
|
totalShotsMade
|
||||||
|
makePercentage
|
||||||
|
}
|
||||||
|
`;
|
||||||
export const UserSocialsFieldsFragmentDoc = gql`
|
export const UserSocialsFieldsFragmentDoc = gql`
|
||||||
fragment UserSocialsFields on UserGQL {
|
fragment UserSocialsFields on UserGQL {
|
||||||
id
|
id
|
||||||
@@ -6646,6 +6739,12 @@ export const VideoCardFieldsFragmentDoc = gql`
|
|||||||
pocketSize
|
pocketSize
|
||||||
tags {
|
tags {
|
||||||
name
|
name
|
||||||
|
tagClasses {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
playerSummaries {
|
||||||
|
...PlayerSummaryFields
|
||||||
}
|
}
|
||||||
currentProcessing {
|
currentProcessing {
|
||||||
id
|
id
|
||||||
@@ -6673,6 +6772,7 @@ export const VideoCardFieldsFragmentDoc = gql`
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
${PlayerSummaryFieldsFragmentDoc}
|
||||||
${UserSocialsFieldsFragmentDoc}
|
${UserSocialsFieldsFragmentDoc}
|
||||||
`;
|
`;
|
||||||
export const MedalFieldsFragmentDoc = gql`
|
export const MedalFieldsFragmentDoc = gql`
|
||||||
@@ -12666,8 +12766,12 @@ export const GetVideoDetailsDocument = gql`
|
|||||||
}
|
}
|
||||||
name
|
name
|
||||||
}
|
}
|
||||||
|
playerSummaries {
|
||||||
|
...PlayerSummaryFields
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
${PlayerSummaryFieldsFragmentDoc}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -47,6 +47,12 @@ fragment VideoCardFields on VideoGQL {
|
|||||||
pocketSize
|
pocketSize
|
||||||
tags {
|
tags {
|
||||||
name
|
name
|
||||||
|
tagClasses {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
playerSummaries {
|
||||||
|
...PlayerSummaryFields
|
||||||
}
|
}
|
||||||
currentProcessing {
|
currentProcessing {
|
||||||
id
|
id
|
||||||
|
|||||||
@@ -1,3 +1,14 @@
|
|||||||
|
fragment PlayerSummaryFields on PlayerSummaryGQL {
|
||||||
|
clusterId
|
||||||
|
userId
|
||||||
|
username
|
||||||
|
profileImageUri
|
||||||
|
representativeFullFrameUrl
|
||||||
|
totalShots
|
||||||
|
totalShotsMade
|
||||||
|
makePercentage
|
||||||
|
}
|
||||||
|
|
||||||
fragment PlayerClusterShotFields on PlayerClusterShotGQL {
|
fragment PlayerClusterShotFields on PlayerClusterShotGQL {
|
||||||
shotId
|
shotId
|
||||||
bboxX1
|
bboxX1
|
||||||
|
|||||||
@@ -83,6 +83,9 @@ query GetVideoDetails($videoId: Int!) {
|
|||||||
}
|
}
|
||||||
name
|
name
|
||||||
}
|
}
|
||||||
|
playerSummaries {
|
||||||
|
...PlayerSummaryFields
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -406,6 +406,7 @@ type VideoGQL {
|
|||||||
currentProcessing: VideoProcessingGQL
|
currentProcessing: VideoProcessingGQL
|
||||||
reactions: [ReactionGQL!]!
|
reactions: [ReactionGQL!]!
|
||||||
comments: [CommentGQL!]!
|
comments: [CommentGQL!]!
|
||||||
|
playerSummaries: [PlayerSummaryGQL!]!
|
||||||
}
|
}
|
||||||
|
|
||||||
type ShotGQL {
|
type ShotGQL {
|
||||||
@@ -665,6 +666,17 @@ type CommentGQL {
|
|||||||
replies: [CommentGQL!]!
|
replies: [CommentGQL!]!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type PlayerSummaryGQL {
|
||||||
|
clusterId: Int!
|
||||||
|
userId: Int
|
||||||
|
username: String
|
||||||
|
profileImageUri: String
|
||||||
|
representativeFullFrameUrl: String
|
||||||
|
totalShots: Int!
|
||||||
|
totalShotsMade: Int!
|
||||||
|
makePercentage: Float!
|
||||||
|
}
|
||||||
|
|
||||||
type DeployedConfigGQL {
|
type DeployedConfigGQL {
|
||||||
allowNewUsers: Boolean!
|
allowNewUsers: Boolean!
|
||||||
firebase: Boolean!
|
firebase: Boolean!
|
||||||
|
|||||||
Reference in New Issue
Block a user