Compare commits
1 Commits
dean/batch
...
dean/drill
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb5217e070 |
1177
src/index.tsx
1177
src/index.tsx
File diff suppressed because it is too large
Load Diff
@@ -55,6 +55,14 @@ fragment VideoCardFields on VideoGQL {
|
|||||||
name
|
name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
drillResult {
|
||||||
|
drillTag
|
||||||
|
longestRun
|
||||||
|
longestRunId
|
||||||
|
prRank
|
||||||
|
isPersonalBest
|
||||||
|
attemptCount
|
||||||
|
}
|
||||||
playerSummaries {
|
playerSummaries {
|
||||||
...PlayerSummaryFields
|
...PlayerSummaryFields
|
||||||
}
|
}
|
||||||
@@ -78,7 +86,6 @@ fragment VideoCardFields on VideoGQL {
|
|||||||
replies {
|
replies {
|
||||||
id
|
id
|
||||||
message
|
message
|
||||||
replyToCommentId
|
|
||||||
user {
|
user {
|
||||||
...UserSocialsFields
|
...UserSocialsFields
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,5 @@
|
|||||||
query GetMakesLeaderboard(
|
query GetMakesLeaderboard($interval: TimeInterval, $when: DateTime) {
|
||||||
$interval: TimeInterval
|
getMakesLeaderboard(interval: $interval, when: $when) {
|
||||||
$when: DateTime
|
|
||||||
$gameType: String
|
|
||||||
$tableSizeMin: Float
|
|
||||||
$tableSizeMax: Float
|
|
||||||
$pocketSizeMin: Float
|
|
||||||
$pocketSizeMax: Float
|
|
||||||
) {
|
|
||||||
getMakesLeaderboard(
|
|
||||||
interval: $interval
|
|
||||||
when: $when
|
|
||||||
gameType: $gameType
|
|
||||||
tableSizeMin: $tableSizeMin
|
|
||||||
tableSizeMax: $tableSizeMax
|
|
||||||
pocketSizeMin: $pocketSizeMin
|
|
||||||
pocketSizeMax: $pocketSizeMax
|
|
||||||
) {
|
|
||||||
entries {
|
entries {
|
||||||
user {
|
user {
|
||||||
id
|
id
|
||||||
@@ -29,24 +13,8 @@ query GetMakesLeaderboard(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
query GetRunsLeaderboard(
|
query GetRunsLeaderboard($interval: TimeInterval, $when: DateTime) {
|
||||||
$interval: TimeInterval
|
getLongestRunsLeaderboard(interval: $interval, when: $when) {
|
||||||
$when: DateTime
|
|
||||||
$gameType: String
|
|
||||||
$tableSizeMin: Float
|
|
||||||
$tableSizeMax: Float
|
|
||||||
$pocketSizeMin: Float
|
|
||||||
$pocketSizeMax: Float
|
|
||||||
) {
|
|
||||||
getLongestRunsLeaderboard(
|
|
||||||
interval: $interval
|
|
||||||
when: $when
|
|
||||||
gameType: $gameType
|
|
||||||
tableSizeMin: $tableSizeMin
|
|
||||||
tableSizeMax: $tableSizeMax
|
|
||||||
pocketSizeMin: $pocketSizeMin
|
|
||||||
pocketSizeMax: $pocketSizeMax
|
|
||||||
) {
|
|
||||||
entries {
|
entries {
|
||||||
id
|
id
|
||||||
runLength
|
runLength
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,99 +0,0 @@
|
|||||||
query GetSessionCoach($videoId: Int!) {
|
|
||||||
getSessionCoach(videoId: $videoId) {
|
|
||||||
videoId
|
|
||||||
processingId
|
|
||||||
analysisVersion
|
|
||||||
state
|
|
||||||
generatedAt
|
|
||||||
processingStatus
|
|
||||||
ineligibilityReason
|
|
||||||
summary
|
|
||||||
shotCount
|
|
||||||
madeCount
|
|
||||||
missedCount
|
|
||||||
unknownOutcomeCount
|
|
||||||
analyzedShotCount
|
|
||||||
makePercentage
|
|
||||||
primaryCandidate {
|
|
||||||
...SessionCoachCandidateFields
|
|
||||||
}
|
|
||||||
candidates {
|
|
||||||
...SessionCoachCandidateFields
|
|
||||||
}
|
|
||||||
agentGeneration {
|
|
||||||
...SessionCoachGenerationFields
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mutation RequestSessionCoachGeneration($videoId: Int!) {
|
|
||||||
requestSessionCoachGeneration(videoId: $videoId) {
|
|
||||||
state
|
|
||||||
agentGeneration {
|
|
||||||
...SessionCoachGenerationFields
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fragment SessionCoachCandidateFields on SessionCoachCandidateGQL {
|
|
||||||
id
|
|
||||||
rank
|
|
||||||
family
|
|
||||||
kind
|
|
||||||
title
|
|
||||||
body
|
|
||||||
action
|
|
||||||
supportingShotIds
|
|
||||||
drillId
|
|
||||||
limitations
|
|
||||||
evidence {
|
|
||||||
bucketKey
|
|
||||||
bucketLabel
|
|
||||||
attemptCount
|
|
||||||
madeCount
|
|
||||||
missedCount
|
|
||||||
makePercentage
|
|
||||||
comparisonAttemptCount
|
|
||||||
comparisonMadeCount
|
|
||||||
comparisonMakePercentage
|
|
||||||
patternShotCount
|
|
||||||
score
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -131,7 +131,6 @@ query GetVideoSocialDetailsById($videoId: Int!) {
|
|||||||
replies {
|
replies {
|
||||||
id
|
id
|
||||||
message
|
message
|
||||||
replyToCommentId
|
|
||||||
user {
|
user {
|
||||||
...UserSocialsFields
|
...UserSocialsFields
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
3189
src/schema.gql
3189
src/schema.gql
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user