Compare commits

..

No commits in common. "master" and "kat/use-logged-in-user" have entirely different histories.

10 changed files with 303 additions and 2369 deletions

View File

@ -12,7 +12,7 @@
"author": "Ivan Malison <IvanMalison@gmail.com>",
"license": "MIT",
"dependencies": {
"@apollo/client": "^3.11.10",
"@apollo/client": "^3.9.2",
"@graphql-codegen/cli": "^5.0.0",
"@graphql-codegen/typescript": "^4.0.1",
"@graphql-codegen/typescript-operations": "^4.0.1",

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,3 @@
# DO NOT USE: use getVideoFeed instead
query GetFeed(
$limit: Int! = 5
$after: String = null
@ -6,76 +5,32 @@ query GetFeed(
) {
getUserVideos(limit: $limit, after: $after, filters: $filters) {
videos {
...VideoCardFields
}
pageInfo {
hasNextPage
endCursor
}
}
}
fragment VideoCardFields on VideoGQL {
id
owner {
id
username
profileImageUri
}
name
screenshotUri
totalShotsMade
totalShots
makePercentage
createdAt
updatedAt
startTime
endTime
private
elapsedTime
screenshotUri
stream {
id
lastIntendedSegmentBound
isCompleted
}
tableSize
tags {
tagClasses {
id
owner {
username
}
name
}
name
}
currentProcessing {
id
errors {
message
}
status
statuses {
status
}
}
}
query GetVideoFeed(
$limit: Int! = 5
$after: String = null
$filters: VideoFilterInput = null
$includeCallersVideos: Boolean = null
$includePrivate: IncludePrivateEnum = MINE
$feedInput: VideoFeedInputGQL = null
) {
getFeedVideos(
limit: $limit
after: $after
filters: $filters
includeCallersVideos: $includeCallersVideos
includePrivate: $includePrivate
feedInput: $feedInput
) {
videos {
...VideoCardFields
screenshotUri
totalShotsMade
totalShots
makePercentage
createdAt
updatedAt
startTime
endTime
elapsedTime
screenshotUri
stream {
id
isCompleted
}
tableSize
tags {
tagClasses {
name
}
name
}
}
pageInfo {
hasNextPage

View File

@ -1,32 +0,0 @@
query GetMakesLeaderboard($interval: TimeInterval, $when: DateTime) {
getMakesLeaderboard(interval: $interval, when: $when) {
entries {
user {
id
username
profileImageUri
}
value
proportionMade
total
}
}
}
query GetRunsLeaderboard($interval: TimeInterval, $when: DateTime) {
getLongestRunsLeaderboard(interval: $interval, when: $when) {
entries {
id
runLength
video {
name
createdAt
}
user {
id
username
profileImageUri
}
}
}
}

View File

@ -1,75 +0,0 @@
fragment MedalFields on MedalGQL {
count
nickname
}
query getMedals($scope: MedalScope!, $userId: Int) {
getMedals(scope: $scope, userId: $userId) {
distanceOver78 {
...MedalFields
}
distanceOver90 {
...MedalFields
}
runLength3 {
...MedalFields
}
runLength5 {
...MedalFields
}
runLength8 {
...MedalFields
}
runLength10 {
...MedalFields
}
runLength15 {
...MedalFields
}
runLength20 {
...MedalFields
}
runLength25 {
...MedalFields
}
runLength30 {
...MedalFields
}
runLength40 {
...MedalFields
}
runLength50 {
...MedalFields
}
totalMakes100 {
...MedalFields
}
totalMakes500 {
...MedalFields
}
totalMakes1000 {
...MedalFields
}
totalMakes5000 {
...MedalFields
}
totalMakes10000 {
...MedalFields
}
dailyMakes50 {
...MedalFields
}
dailyMakes100 {
...MedalFields
}
dailyMakes150 {
...MedalFields
}
dailyMakes200 {
...MedalFields
}
dailyMakes250 {
...MedalFields
}
}
}

View File

@ -40,7 +40,6 @@ mutation UpdateShotAnnotations(
}
}
## Should be deprecated
query GetShotsWithVideoGql(
$filterInput: FilterInput!
$shotsOrdering: GetShotsOrdering
@ -62,40 +61,18 @@ query GetShotsWithVideoGql(
}
}
query GetShotsWithJustIds(
$filterInput: FilterInput!
$shotsOrdering: GetShotsOrdering
$limit: Int
$countRespectsLimit: Boolean
) {
getOrderedShots(
filterInput: $filterInput
shotsOrdering: $shotsOrdering
limit: $limit
countRespectsLimit: $countRespectsLimit
) {
count
shots {
id
videoId
}
}
}
## Reserved for playlists (which are created from a filter)
query GetShotsWithMetadataFilterResult(
$filterInput: FilterInput!
$shotsOrdering: GetShotsOrdering
$limit: Int
$ids: [Int!]
$countRespectsLimit: Boolean
) {
getOrderedShots(
filterInput: $filterInput
shotsOrdering: $shotsOrdering
limit: $limit
ids: $ids
countRespectsLimit: $countRespectsLimit
) {
count
shots {
@ -159,7 +136,6 @@ fragment ShotWithAllFeatures on ShotGQL {
targetPocketAngleDirection
marginOfErrorInDegrees
intendedPocketType
difficulty
}
pocketingIntentionInfo {
ballId
@ -178,15 +154,3 @@ fragment ShotWithAllFeatures on ShotGQL {
notes
}
}
mutation EditShot($shotId: Int!, $fieldsToEdit: EditableShotFieldInputGQL!) {
editShot(shotId: $shotId, fieldsToEdit: $fieldsToEdit) {
error {
shotId
msg
}
shot {
...ShotWithAllFeatures
}
}
}

View File

@ -21,24 +21,31 @@ mutation getProfileImageUploadLink($fileExt: String = ".png") {
mutation editProfileImageUri($profileImageUri: String!) {
editProfileImageUri(profileImageUri: $profileImageUri) {
...UserFragment
id
firebaseUid
username
profileImageUri
createdAt
updatedAt
}
}
query getLoggedInUser {
getLoggedInUser {
...UserFragment
id
firebaseUid
username
isAdmin
profileImageUri
fargoRating
activeVideoId
createdAt
updatedAt
}
}
query GetUser($userId: Int!) {
getUser(userId: $userId) {
...UserFragment
}
}
query GetUserPlayTime($userId: Int!, $filters: VideoFilterInput) {
getPlayTime(userId: $userId, filters: $filters) {
query GetUserPlayTime($userId: Int!) {
getPlayTime(userId: $userId) {
totalSeconds
}
}
@ -66,7 +73,6 @@ query getUserRelationshipsMatching(
relationships {
toUser {
username
profileImageUri
id
}
toUserFollows
@ -118,50 +124,10 @@ query getUserFollowingFollowers {
following {
id
username
profileImageUri
}
followers {
id
username
profileImageUri
}
}
}
query doesUsernameExist($candidateUsername: String!) {
doesUsernameExist(candidateUsername: $candidateUsername)
}
mutation editUser(
$username: String
$fargoRating: Int
$videosPrivateByDefault: Boolean
) {
editUser(
input: {
username: $username
fargoRating: $fargoRating
videosPrivateByDefault: $videosPrivateByDefault
}
) {
id
firebaseUid
username
fargoRating
updatedAt
videosPrivateByDefault
}
}
fragment UserFragment on UserGQL {
id
firebaseUid
username
isAdmin
profileImageUri
fargoRating
activeVideoId
createdAt
updatedAt
videosPrivateByDefault
}

View File

@ -5,7 +5,44 @@ query GetStreamMonitoringDetails($videoId: Int!, $debuggingJson: JSON) {
makePercentage
elapsedTime
currentHomography {
...HomographyInfo
crop {
left
top
width
height
}
pockets {
left
top
width
height
}
sourcePoints {
topLeft {
x
y
}
topSide {
x
y
}
topRight {
x
y
}
bottomLeft {
x
y
}
bottomSide {
x
y
}
bottomRight {
x
y
}
}
}
stream {
id
@ -18,7 +55,6 @@ query GetStreamMonitoringDetails($videoId: Int!, $debuggingJson: JSON) {
initPlaylistUploadStatus
}
currentProcessing {
id
errors {
message
startSegmentIndex
@ -36,7 +72,6 @@ query GetVideoUpdatePageDetails($videoId: Int!) {
makePercentage
elapsedTime
tableSize
private
tags {
tagClasses {
name
@ -66,7 +101,6 @@ query GetVideoDetails($videoId: Int!) {
createdAt
updatedAt
tableSize
private
owner {
id
firebaseUid
@ -120,7 +154,45 @@ query GetVideo($videoId: Int!) {
segmentDurations
}
homographyHistory {
...HomographyInfo
frameIndex
crop {
left
top
width
height
}
pockets {
left
top
width
height
}
sourcePoints {
topLeft {
x
y
}
topSide {
x
y
}
topRight {
x
y
}
bottomLeft {
x
y
}
bottomSide {
x
y
}
bottomRight {
x
y
}
}
}
stream {
id
@ -216,52 +288,3 @@ query GetHeaderInfoByVideoId($videoId: Int!) {
startTime
}
}
mutation FindPrerecordTableLayout($b64Image: String!, $videoId: Int!) {
findPrerecordTableLayout(b64Image: $b64Image, videoId: $videoId) {
...HomographyInfo
}
}
fragment HomographyInfo on HomographyInfoGQL {
id
frameIndex
crop {
left
top
width
height
}
pockets {
left
top
width
height
}
sourcePoints {
topLeft {
x
y
}
topSide {
x
y
}
topRight {
x
y
}
bottomLeft {
x
y
}
bottomSide {
x
y
}
bottomRight {
x
y
}
}
}

View File

@ -9,33 +9,22 @@ type Query {
videoId: ID!
intervalDuration: Int! = 300
): [MakePercentageIntervalGQL!]!
getMedals(scope: MedalScope!, userId: Int = null): RequestedMedalsGQL!
getRuns(
filterInput: RunFilterInput!
runIds: [Int!] = null
runsOrdering: GetRunsOrdering = null
limit: Int! = 500
countRespectsLimit: Boolean! = false
): GetRunsResult!
getOrderedShots(
filterInput: FilterInput!
ids: [Int!] = null
shotsOrdering: GetShotsOrdering = null
limit: Int! = 500
countRespectsLimit: Boolean! = false
): GetShotsResult!
getShotsWithMetadata(
filterInput: FilterInput!
ids: [Int!] = null
shotsPagination: GetShotsPagination = null
limit: Int! = 500
countRespectsLimit: Boolean! = false
): GetShotsResult!
getShots(
filterInput: FilterInput!
shotsPagination: GetShotsPagination = null
limit: Int! = 500
countRespectsLimit: Boolean! = false
): [ShotGQL!]!
getShotsByIds(ids: [Int!]!): [ShotGQL!]!
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
@ -53,7 +42,7 @@ type Query {
limit: Int = 100
after: String = null
): UserRelationshipsResult!
getPlayTime(userId: Int!, filters: VideoFilterInput = null): UserPlayTimeGQL!
getPlayTime(userId: Int!): UserPlayTimeGQL!
getUserVideos(
userId: Int = null
limit: Int! = 5
@ -66,21 +55,8 @@ type Query {
getFeedVideos(
limit: Int! = 5
after: String = null
includePrivate: IncludePrivateEnum! = MINE
includeCallersVideos: Boolean = true
filters: VideoFilterInput = null
feedInput: VideoFeedInputGQL = null
): VideoHistoryGQL!
getLongestRunsLeaderboard(
interval: TimeInterval = null
when: DateTime = null
limit: Int! = 100
requiredTags: [String!] = null
): RunLeaderboardGQL!
getMakesLeaderboard(
interval: TimeInterval = null
when: DateTime = null
): CountLeaderboardGQL!
}
type AggregateResultGQL {
@ -183,7 +159,6 @@ input FilterInput @oneOf {
shotDirection: [ShotDirectionEnum!]
videoId: [Int!]
userId: [Int!]
runId: [Int!]
username: [String!]
fargoRating: FloatRangeFilter
make: [Boolean!]
@ -292,65 +267,10 @@ type MakePercentageIntervalGQL {
elapsedTime: Float!
}
type RequestedMedalsGQL {
distanceOver66: MedalGQL
distanceOver78: MedalGQL
distanceOver90: MedalGQL
runLength3: MedalGQL
runLength5: MedalGQL
runLength8: MedalGQL
runLength10: MedalGQL
runLength15: MedalGQL
runLength20: MedalGQL
runLength25: MedalGQL
runLength30: MedalGQL
runLength40: MedalGQL
runLength50: MedalGQL
totalMakes25: MedalGQL @deprecated(reason: "no longer supported")
totalMakes50: MedalGQL @deprecated(reason: "no longer supported")
totalMakes75: MedalGQL @deprecated(reason: "no longer supported")
totalMakes200: MedalGQL @deprecated(reason: "no longer supported")
totalMakes300: MedalGQL @deprecated(reason: "no longer supported")
totalMakes400: MedalGQL @deprecated(reason: "no longer supported")
totalMakes750: MedalGQL @deprecated(reason: "no longer supported")
totalMakes100: MedalGQL
totalMakes500: MedalGQL
totalMakes1000: MedalGQL
totalMakes5000: MedalGQL
totalMakes10000: MedalGQL
dailyMakes50: MedalGQL
dailyMakes100: MedalGQL
dailyMakes150: MedalGQL
dailyMakes200: MedalGQL
dailyMakes250: MedalGQL
}
type MedalGQL {
count: Int!
nickname: String
}
input MedalScope @oneOf {
videoId: Int
interval: TimeInterval
@deprecated(reason: "NO LONGER SUPPORTED, USE DATETIME_RANGE")
datetimeRange: DatetimeRangeAggregationInput
}
type GetRunsResult {
runs: [RunGQL!]!
count: Int
runIds: [Int!]!
}
type RunGQL {
id: Int!
runLength: Int!
videoId: Int!
userId: Int!
type GetShotsResult {
shots: [ShotGQL!]!
video: VideoGQL!
user: UserGQL!
count: Int
ids: [Int!]!
}
type ShotGQL {
@ -369,8 +289,6 @@ type ShotGQL {
annotations: [ShotAnnotationGQL!]!
falsePositiveScore: Float
video: VideoGQL
run: RunGQL
runFeatures: RunFeaturesGQL
}
type CueObjectFeaturesGQL {
@ -432,7 +350,6 @@ type UserGQL {
profileImageUri: String
createdAt: DateTime
updatedAt: DateTime
videosPrivateByDefault: Boolean
following: [UserGQL!]
followers: [UserGQL!]
}
@ -470,7 +387,6 @@ type VideoGQL {
elapsedTime: Float
framesPerSecond: Float!
tableSize: Float!
private: Boolean!
stream: UploadStreamGQL
playlist: HLSPlaylistGQL
tags: [VideoTag!]!
@ -493,7 +409,6 @@ type UploadStreamGQL {
createdAt: DateTime!
updatedAt: DateTime!
segments: [UploadSegmentGQL!]!
clientUploadStatus: ClientUploadStatusEnum
resolution: VideoResolutionGQL!
streamSegmentType: StreamSegmentTypeEnum!
}
@ -518,11 +433,6 @@ type UploadSegmentGQL {
linksRequested: Int!
}
enum ClientUploadStatusEnum {
UPLOAD_ENABLED
UPLOAD_DISABLED
}
type VideoResolutionGQL {
width: Int
height: Int
@ -549,7 +459,6 @@ type VideoTagClass {
}
type HomographyInfoGQL {
id: Int!
frameIndex: Int!
crop: BoundingBoxGQL!
pockets: [BoundingBoxGQL!]!
@ -579,7 +488,6 @@ type IntPoint2D {
}
type VideoProcessingGQL {
id: Int!
errors: [VideoProcessingErrorGQL!]!
status: ProcessingStatusEnum!
statuses: [VideoProcessingStatusGQL!]!
@ -610,67 +518,33 @@ type VideoProcessingStatusGQL {
updatedAt: DateTime
}
type RunFeaturesGQL {
runId: Int!
indexInRun: Int!
}
input RunFilterInput {
videoId: [Int!]
userId: [Int!]
username: [String!]
andFilters: [RunFilterInput!]
orFilters: [RunFilterInput!]
notFilter: RunFilterInput
tableSize: FloatRangeFilter
createdAt: DateRangeFilter
runLength: FloatRangeFilter
}
input GetRunsOrdering {
orderings: [RunsOrderingComponent!]!
}
input RunsOrderingComponent @oneOf {
runLength: IntOrdering
videoId: IntOrdering
videoCreation: DatetimeOrdering
}
input IntOrdering {
descending: Boolean! = true
startingAt: Int = null
}
input DatetimeOrdering {
descending: Boolean! = true
startingAt: DateTime = null
}
type GetShotsResult {
shots: [ShotGQL!]!
count: Int
ids: [Int!]!
}
input GetShotsOrdering {
orderings: [ShotsOrderingComponent!]!
}
input ShotsOrderingComponent @oneOf {
videoCreation: DatetimeOrdering
marginOfError: FloatOrdering
difficulty: FloatOrdering
videoId: IntOrdering
startFrame: IntOrdering
runLength: IntOrdering
videoCreation: DatetimeShotOrdering
marginOfError: FloatShotOrdering
videoId: IntShotOrdering
startFrame: IntShotOrdering
runLength: IntShotOrdering
}
input FloatOrdering {
input DatetimeShotOrdering {
descending: Boolean! = true
startingAt: DateTime = null
}
input FloatShotOrdering {
descending: Boolean! = true
startingAt: Float = null
}
input IntShotOrdering {
descending: Boolean! = true
startingAt: Int = null
}
input GetShotsPagination {
createdAfter: CreatedAfter!
startFrameAfter: Int!
@ -696,13 +570,6 @@ type UserPlayTimeGQL {
totalSeconds: Float!
}
input VideoFilterInput {
isStreamCompleted: Boolean = null
requireCursorCompletion: Boolean! = true
createdAt: DateRangeFilter = null
excludeVideosWithNoShots: Boolean = null
}
type VideoHistoryGQL {
videos: [VideoGQL!]!
pageInfo: PageInfoGQL!
@ -713,6 +580,11 @@ type PageInfoGQL {
endCursor: String
}
input VideoFilterInput {
isStreamCompleted: Boolean = null
requireCursorCompletion: Boolean! = true
}
type TagGQL {
name: String!
id: Int!
@ -727,41 +599,9 @@ scalar JSON
url: "https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf"
)
enum IncludePrivateEnum {
ALL
MINE
NONE
}
input VideoFeedInputGQL @oneOf {
followedByUserId: Int
userId: Int
allUsers: Boolean
}
type RunLeaderboardGQL {
entries: [RunGQL!]!
}
type CountLeaderboardGQL {
entries: [UserShotCountEntry!]!
}
type UserShotCountEntry {
user: UserGQL!
value: Int!
total: Int!
proportionMade: Float!
videos: Int!
}
type Mutation {
createBucketSet(params: CreateBucketSetInput!): BucketSetGQL!
setLoggerLevel(path: String!, level: String!): Boolean!
editShot(
shotId: Int!
fieldsToEdit: EditableShotFieldInputGQL!
): EditShotReturn!
addAnnotationToShot(
shotId: Int!
annotationName: String!
@ -778,7 +618,6 @@ type Mutation {
editUser(input: EditUserInputGQL!): UserGQL!
followUser(followedUserId: Int!): UserGQL!
unfollowUser(followedUserId: Int!): UserGQL!
findPrerecordTableLayout(b64Image: String!, videoId: Int!): HomographyInfoGQL
createUploadStream(
videoMetadata: VideoMetadataInput!
): CreateUploadStreamReturn!
@ -799,27 +638,6 @@ input CreateBucketSetInput {
buckets: [BucketInputGQL!]!
}
type EditShotReturn {
shot: ShotGQL
error: DoesNotOwnShotErr
}
type DoesNotOwnShotErr {
shotId: Int!
msg: String
}
input EditableShotFieldInputGQL {
intendedPocketType: PocketEnum
shotDirection: ShotDirectionEnum
spinType: SpinTypeEnum
targetPocketAngleDirection: ShotDirectionEnum
make: Boolean
backcut: Boolean
excludeFromStats: Boolean
notes: String
}
type AddShotAnnotationReturn {
value: SuccessfulAddAddShotAnnotationErrors!
}
@ -840,6 +658,11 @@ union DoesNotOwnShotErrOtherErrorNeedsNote =
DoesNotOwnShotErr
| OtherErrorNeedsNote
type DoesNotOwnShotErr {
shotId: Int!
msg: String
}
type OtherErrorNeedsNote {
msg: String
}
@ -883,7 +706,6 @@ type TooManyProfileImageUploadsErr {
input EditUserInputGQL {
username: String = null
fargoRating: Int = null
videosPrivateByDefault: Boolean = null
}
type CreateUploadStreamReturn {
@ -898,9 +720,7 @@ input VideoMetadataInput {
tableSize: Float = null
lastIntendedSegmentBound: Int = null
streamSegmentType: StreamSegmentTypeEnum = null
private: Boolean = null
endStream: Boolean! = false
clientUploadStatus: ClientUploadStatusEnum = null
resolution: VideoResolution = null
framesPerSecond: Float = null
}

View File

@ -10,10 +10,10 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
"@apollo/client@^3.11.10":
version "3.12.3"
resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.12.3.tgz#0d252749baad8328e06883fe118dc7e73e3bbb1f"
integrity sha512-KZ5zymRdb8bMbGUb1wP2U04ff7qIGgaC1BCdCVC+IPFiXkxEhHBc5fDEQOwAUT+vUo9KbBh3g7QK/JCOswn59w==
"@apollo/client@^3.9.2":
version "3.9.2"
resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.9.2.tgz#96edf2c212f828bad1ef3d84234fa473c5a27ff8"
integrity sha512-Zw9WvXjqhpbgkvAvnj52vstOWwM0iedKWtn1hSq1cODQyoe1CF2uFwMYFI7l56BrAY9CzLi6MQA0AhxpgJgvxw==
dependencies:
"@graphql-typed-document-node/core" "^3.1.1"
"@wry/caches" "^1.0.0"
@ -23,7 +23,7 @@
hoist-non-react-statics "^3.3.2"
optimism "^0.18.0"
prop-types "^15.7.2"
rehackt "^0.1.0"
rehackt "0.0.3"
response-iterator "^0.2.6"
symbol-observable "^4.0.0"
ts-invariant "^0.10.3"
@ -2633,10 +2633,10 @@ regenerator-runtime@^0.14.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
rehackt@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.1.0.tgz#a7c5e289c87345f70da8728a7eb878e5d03c696b"
integrity sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==
rehackt@0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.0.3.tgz#1ea454620d4641db8342e2db44595cf0e7ac6aa0"
integrity sha512-aBRHudKhOWwsTvCbSoinzq+Lej/7R8e8UoPvLZo5HirZIIBLGAgdG7SL9QpdcBoQ7+3QYPi3lRLknAzXBlhZ7g==
relay-runtime@12.0.0:
version "12.0.0"