Compare commits

..

1 Commits

Author SHA1 Message Date
Dean Wenstrand
fd6ee4f182 Declare taxonomy filter variables on the makes/runs leaderboards
The backend leaderboard resolvers gained game_type, table size and pocket
size filters, but GetMakesLeaderboard and GetRunsLeaderboard never declared
them — GraphQL silently drops undeclared variables, so anything the client
passed was ignored and both boards stayed global.

Declare and forward the five filter args on both queries, matching the
names the drill run leaderboard already uses.
2026-07-20 22:35:48 -07:00
8 changed files with 97 additions and 854 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -78,7 +78,6 @@ fragment VideoCardFields on VideoGQL {
replies { replies {
id id
message message
replyToCommentId
user { user {
...UserSocialsFields ...UserSocialsFields
} }

View File

@@ -1,25 +0,0 @@
# Legacy shot-sim operations still used by mobile master's
# LiveStreamPicker / RecordedShotPicker; remove when those are deleted.
query GetRecordedStreams($limit: Int! = 25) {
getFeedVideos(
limit: $limit
filters: { isStreamCompleted: true, excludeVideosWithNoShots: true }
includePrivate: MINE
feedInput: { allUsers: true }
) {
videos {
id
name
createdAt
screenshotUri
framesPerSecond
totalShots
owner {
id
username
profileImageUri
}
}
}
}

View File

@@ -1,12 +1,10 @@
# Lightweight two-step picker data for Shot Lab's video-first source: the # Lightweight two-step picker data for loading a recorded shot into Shot Lab.
# caller's recent videos (completed or still uploading), then that video's query GetRecordedStreams($limit: Int! = 25) {
# shots. The stream fields hint at "actively updating" without gating.
query GetShotLabVideos($userId: Int!, $limit: Int! = 25) {
getFeedVideos( getFeedVideos(
limit: $limit limit: $limit
includeCallersVideos: false filters: { isStreamCompleted: true, excludeVideosWithNoShots: true }
includePrivate: MINE includePrivate: MINE
feedInput: { userId: $userId } feedInput: { allUsers: true }
) { ) {
videos { videos {
id id
@@ -20,11 +18,6 @@ query GetShotLabVideos($userId: Int!, $limit: Int! = 25) {
username username
profileImageUri profileImageUri
} }
stream {
id
isCompleted
lastSegmentUploadedAt
}
} }
} }
} }
@@ -43,11 +36,26 @@ query GetRecordedStreamShots($videoId: Int!, $limit: Int! = 200) {
serializedShotPaths { serializedShotPaths {
b64EncodedBuffer b64EncodedBuffer
} }
cueObjectFeatures {
cueObjectDistance
cueObjectAngle
cueBallSpeed
shotDirection
spinType
}
pocketingIntentionFeatures { pocketingIntentionFeatures {
make make
targetPocketDistance
targetPocketAngle
targetPocketAngleDirection
marginOfErrorInDegrees
intendedPocketType
difficulty
} }
pocketingIntentionInfo { pocketingIntentionInfo {
ballId
pocketId pocketId
pathMetadataIndex
} }
} }
} }

View File

@@ -20,18 +20,6 @@ query GetSessionCoach($videoId: Int!) {
candidates { candidates {
...SessionCoachCandidateFields ...SessionCoachCandidateFields
} }
agentGeneration {
...SessionCoachGenerationFields
}
}
}
mutation RequestSessionCoachGeneration($videoId: Int!) {
requestSessionCoachGeneration(videoId: $videoId) {
state
agentGeneration {
...SessionCoachGenerationFields
}
} }
} }
@@ -61,39 +49,3 @@ fragment SessionCoachCandidateFields on SessionCoachCandidateGQL {
rankReason rankReason
} }
} }
fragment SessionCoachGenerationFields on SessionCoachGenerationGQL {
id
state
createdAt
completedAt
decision {
selectedCandidateId
title
body
suggestedAction
drillId
drillReason
practiceAttemptCount
practiceTarget
}
diagnostics {
analysisVersion
promptVersion
providerKey
modelName
inputHash
attemptCount
maxAttempts
enqueueCount
latencyMs
inputTokens
cachedInputTokens
outputTokens
failureCode
updatedAt
startedAt
lastEnqueuedAt
abstentionReason
}
}

View File

@@ -131,7 +131,6 @@ query GetVideoSocialDetailsById($videoId: Int!) {
replies { replies {
id id
message message
replyToCommentId
user { user {
...UserSocialsFields ...UserSocialsFields
} }

View File

@@ -48,52 +48,6 @@ mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) {
} }
} }
stream { stream {
id
uploadCompletionCursor
}
}
}
mutation GetUploadLinks($videoId: Int!, $segmentIndexes: [Int!]!) {
getUploadLinks(videoId: $videoId, segmentIndexes: $segmentIndexes) {
value {
... on UploadLinkBatch {
links {
segmentIndex
uploadUrl
headers {
key
value
}
}
alreadyUploaded
}
... on GetUploadLinkErrors {
error {
... on MustHaveSetForUploadLinkErr {
resolution
framesPerSecond
}
... on ProcessingFailedErr {
processing {
status
errors {
message
}
}
}
... on StorageLimitExceededErr {
reason
tierName
retainedStorageUsedBytes
retainedStorageLimitBytes
remainingStorageBytes
}
}
}
}
stream {
id
uploadCompletionCursor uploadCompletionCursor
} }
} }
@@ -173,7 +127,6 @@ fragment UploadStreamWithDetails on VideoGQL {
name name
startTime startTime
stream { stream {
id
isCompleted isCompleted
lastIntendedSegmentBound lastIntendedSegmentBound
uploadCompletionCursor uploadCompletionCursor

View File

@@ -221,7 +221,6 @@ type CommentGQL {
user: UserGQL! user: UserGQL!
message: String! message: String!
replies: [CommentGQL!]! replies: [CommentGQL!]!
replyToCommentId: Int
} }
type CountLeaderboardGQL { type CountLeaderboardGQL {
@@ -526,24 +525,6 @@ type GetUploadLinkReturn {
stream: UploadStreamGQL stream: UploadStreamGQL
} }
type GetUploadLinksReturn {
value: UploadLinkBatchGetUploadLinkErrors!
stream: UploadStreamGQL
}
type SegmentUploadLink {
segmentIndex: Int!
uploadUrl: String!
headers: [Header]!
}
type UploadLinkBatch {
links: [SegmentUploadLink!]!
alreadyUploaded: [Int!]!
}
union UploadLinkBatchGetUploadLinkErrors = UploadLinkBatch | GetUploadLinkErrors
type HLSPlaylistGQL { type HLSPlaylistGQL {
videoId: Int! videoId: Int!
m3u8Text: String! m3u8Text: String!
@@ -735,7 +716,6 @@ type Mutation {
shotId: Int! shotId: Int!
fieldsToEdit: EditableShotFieldInputGQL! fieldsToEdit: EditableShotFieldInputGQL!
): EditShotReturn! ): EditShotReturn!
requestSessionCoachGeneration(videoId: Int!): SessionCoachGQL!
getProfileImageUploadLink( getProfileImageUploadLink(
fileExt: String = ".png" fileExt: String = ".png"
): GetProfileUploadLinkReturn! ): GetProfileUploadLinkReturn!
@@ -773,7 +753,6 @@ type Mutation {
expectedDurationSeconds: Float = null expectedDurationSeconds: Float = null
): CreateUploadStreamReturn! ): CreateUploadStreamReturn!
getUploadLink(videoId: Int!, segmentIndex: Int!): GetUploadLinkReturn! getUploadLink(videoId: Int!, segmentIndex: Int!): GetUploadLinkReturn!
getUploadLinks(videoId: Int!, segmentIndexes: [Int!]!): GetUploadLinksReturn!
getHlsInitUploadLink(videoId: Int!): GetUploadLinkReturn! getHlsInitUploadLink(videoId: Int!): GetUploadLinkReturn!
setSegmentDuration( setSegmentDuration(
videoId: Int! videoId: Int!
@@ -1341,17 +1320,6 @@ enum SessionCoachCandidateKindEnum {
USAGE_PATTERN USAGE_PATTERN
} }
type SessionCoachDecisionGQL {
selectedCandidateId: ID
title: String
body: String
suggestedAction: String
drillId: String
drillReason: String
practiceAttemptCount: Int
practiceTarget: String
}
type SessionCoachEvidenceGQL { type SessionCoachEvidenceGQL {
bucketKey: String! bucketKey: String!
bucketLabel: String! bucketLabel: String!
@@ -1384,43 +1352,6 @@ type SessionCoachGQL {
makePercentage: Float makePercentage: Float
primaryCandidate: SessionCoachCandidateGQL primaryCandidate: SessionCoachCandidateGQL
candidates: [SessionCoachCandidateGQL!]! candidates: [SessionCoachCandidateGQL!]!
agentGeneration: SessionCoachGenerationGQL
}
type SessionCoachGenerationDiagnosticsGQL {
analysisVersion: String!
promptVersion: String!
providerKey: String!
modelName: String!
inputHash: String!
attemptCount: Int!
maxAttempts: Int!
enqueueCount: Int!
latencyMs: Int
inputTokens: Int
cachedInputTokens: Int
outputTokens: Int
failureCode: String
updatedAt: DateTime!
startedAt: DateTime
lastEnqueuedAt: DateTime
abstentionReason: String
}
type SessionCoachGenerationGQL {
id: ID!
state: SessionCoachGenerationStateEnum!
createdAt: DateTime!
completedAt: DateTime
decision: SessionCoachDecisionGQL
diagnostics: SessionCoachGenerationDiagnosticsGQL
}
enum SessionCoachGenerationStateEnum {
QUEUED
RUNNING
READY
FAILED
} }
enum SessionCoachIneligibilityReasonEnum { enum SessionCoachIneligibilityReasonEnum {
@@ -1949,7 +1880,7 @@ type VideoGQL {
startTime: DateTime startTime: DateTime
endTime: DateTime endTime: DateTime
elapsedTime: Float elapsedTime: Float
framesPerSecond: Float framesPerSecond: Float!
tableSize: Float! tableSize: Float!
pocketSize: Float pocketSize: Float
private: Boolean! private: Boolean!