Compare commits

..

113 Commits

Author SHA1 Message Date
492178455c Add getUsersMatching 2025-06-25 15:08:19 -07:00
55a2edb042 Merge pull request 'Add bannerMessages to getDeployedConfig operation' (#187) from loewy/banner-on-deployed-config-ops into master
Reviewed-on: #187
2025-06-13 11:19:59 -06:00
31cf492889 add bannerMessages to getDeployedConfig operation
All checks were successful
Tests / Tests (pull_request) Successful in 7s
2025-06-13 10:12:39 -07:00
de7dc675a1 Merge pull request 'Reverting config operation until BE deployed' (#186) from loewy/revert-config-operations into master
Reviewed-on: #186
2025-06-12 15:12:48 -06:00
f8f00d9c24 revert changes
All checks were successful
Tests / Tests (pull_request) Successful in 6s
2025-06-12 14:09:20 -07:00
dc207bce55 Merge pull request 'Add banners to config operations' (#185) from loewy/update-config-operations into master
Reviewed-on: #185
2025-06-12 14:30:17 -06:00
2e5b8d2563 add banners to config operations
All checks were successful
Tests / Tests (pull_request) Successful in 6s
2025-06-12 13:29:24 -07:00
46bcd08ae1 Merge pull request 'Add banner messages to DeployedConfigGql' (#184) from loewy/add-banner-to-config into master
Reviewed-on: #184
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2025-06-12 14:27:36 -06:00
bd383b1d55 add banner messages to deployedConfigGql
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2025-06-12 10:21:24 -07:00
2459cb78f8 Merge pull request 'Add comments operations' (#183) from loewy/add-comments-feed-operation into master
Reviewed-on: #183
2025-05-16 18:34:07 -06:00
8859ad8951 add lightweight query to refetch social interractions on comment mutation completion
All checks were successful
Tests / Tests (pull_request) Successful in 16s
2025-05-16 17:31:58 -07:00
bdc3961e46 add mutations for comments 2025-05-16 14:43:16 -07:00
7c8c932a78 connect gql 2025-05-16 12:25:27 -07:00
ae746ccac0 Add getTableState 2025-05-15 12:26:18 -07:00
98266c7775 Merge pull request 'add comments' (#182) from add-comments into master
Reviewed-on: #182
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2025-05-13 18:51:51 -06:00
Will Gester
4918720ae3 add comments
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2025-05-13 17:40:09 -07:00
8463ebf0e7 Merge pull request 'Add streamSegmentType to feed and playlist shot operations' (#181) from loewy/add-stream-type-to-get-shots into master
Reviewed-on: #181
2025-05-08 16:19:06 -06:00
753179ca58 add streamsegmentType to get feed
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2025-05-08 14:15:57 -07:00
9ee5c721c1 add stream type to get shost for playlist 2025-05-08 13:44:58 -07:00
00cca10cb3 Merge pull request 'Use pocketing intention fragment to prevent cache merge issues' (#180) from loewy/update-runs-operations into master
Reviewed-on: #180
2025-04-30 15:58:46 -06:00
ad704cad75 use entire fragment to prevent cache merge issues
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2025-04-30 14:57:54 -07:00
e2743abb59 Merge pull request 'update runs' (#179) from dean/update-run-gql into master
Reviewed-on: #179
Reviewed-by: loewy <loewymalkov@gmail.com>
2025-04-30 12:39:23 -06:00
e109e89a40 update runs
All checks were successful
Tests / Tests (pull_request) Successful in 16s
2025-04-30 18:18:40 +00:00
67bad20d24 Merge pull request 'Add limit and countRespectsLimit args' (#178) from loewy/add-limit-args-to-get-runs into master
Reviewed-on: #178
2025-04-24 13:48:12 -06:00
0160455b9f add limit and countRespectsLimit args
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2025-04-24 12:43:07 -07:00
170ff70b7a Merge pull request 'Add required types to followers in feed operation' (#177) from loewy/add-required-types-to-feed-operation into master
Reviewed-on: #177
2025-04-09 12:48:35 -06:00
8df09b8c93 run just gql
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2025-04-09 11:47:16 -07:00
644ea66e98 add required types to followers in feed operation
Some checks failed
Tests / Tests (pull_request) Failing after 17s
2025-04-09 11:43:27 -07:00
0a5097c5c0 Merge pull request 'Add followers to feed operation for reactions' (#176) from loewy/add-followers-in-reactions into master
Reviewed-on: #176
2025-04-08 18:21:33 -06:00
f4445f7ecb add followers to feed operation for reactions
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2025-04-08 16:48:12 -07:00
b18fedae8e Merge pull request 'Add reactions gql to feed and react mutation operation' (#175) from loewy/add-react-to-video into master
Reviewed-on: #175
2025-04-07 11:33:55 -06:00
31baa2b096 add profile image uri
All checks were successful
Tests / Tests (pull_request) Successful in 7s
2025-04-04 13:19:42 -07:00
85cd37f70f add gql to fragment
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2025-04-04 12:30:02 -07:00
b53aa172fa Add reactions mutation to operations 2025-04-04 12:18:20 -07:00
df2e534745 Merge pull request 'add reaction gql' (#174) from add-reactions into master
Reviewed-on: #174
2025-04-03 18:42:46 -06:00
Will Gester
ea4980947f add reaction gql
All checks were successful
Tests / Tests (pull_request) Successful in 16s
2025-04-03 17:42:20 -07:00
65475bca9b Merge pull request 'Add delete tags operation' (#173) from loewy/delete-tags-operation into master
Reviewed-on: #173
2025-03-31 13:47:46 -06:00
280f5a66bd add delete tags operation"
All checks were successful
Tests / Tests (pull_request) Successful in 6s
2025-03-27 11:38:26 -07:00
84daf2d136 Reintroduce retireTags 2025-03-25 14:31:19 -06:00
6558fb60e9 Add break heuristic 2025-03-25 14:05:12 -06:00
6462a6a464 Merge pull request 'Add delete tags' (#170) from mk/delete-tag into master
Reviewed-on: #170
2025-03-21 18:26:33 -06:00
41a5bb7609 Add delete tags
All checks were successful
Tests / Tests (pull_request) Successful in 16s
2025-03-21 17:22:24 -07:00
b8aaabea8b Merge pull request 'RetireTags mutation operation' (#169) from loewy/retire-tags-operation into master
Reviewed-on: #169
2025-03-21 15:50:59 -06:00
2745521664 add operations to retire tag
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2025-03-21 14:38:37 -07:00
8efa2e067c Merge pull request 'Add functionality to retire tags' (#167) from mk/retire-tags-gql into master
Reviewed-on: #167
2025-03-21 14:39:27 -06:00
919fe5ba24 Merge branch 'master' into mk/retire-tags-gql
All checks were successful
Tests / Tests (pull_request) Successful in 16s
2025-03-19 15:08:46 -06:00
7ff60dc9c5 Merge pull request 'Revert "Merge pull request 'Add functionality for retiring tags' (#165) from mk/retire-tags-gql into master"' (#166) from mk/revert-retire-tags into master
Reviewed-on: #166
2025-03-19 15:08:16 -06:00
7e0d8a84ee Add functionality to retire tags
All checks were successful
Tests / Tests (pull_request) Successful in 6s
2025-03-19 14:07:15 -07:00
9f26b5aa0f Revert "Merge pull request 'Add functionality for retiring tags' (#165) from mk/retire-tags-gql into master"
All checks were successful
Tests / Tests (pull_request) Successful in 8s
This reverts commit 70303b9363042078997f3bb22adadaad5636690a, reversing
changes made to 7a9d2545c45db9e7149433512dd80ec7fd674bb9.
2025-03-19 14:05:41 -07:00
70303b9363 Merge pull request 'Add functionality for retiring tags' (#165) from mk/retire-tags-gql into master
Reviewed-on: #165
2025-03-17 15:09:54 -06:00
9ee1422d3e Add functionality for retiring tags
All checks were successful
Tests / Tests (pull_request) Successful in 7s
2025-03-17 14:09:19 -07:00
7a9d2545c4 Merge pull request 'Add average time field to video in feed operation' (#164) from loewy/add-average-time-per-shot-in-feed-operation into master
Reviewed-on: #164
2025-03-11 14:42:24 -06:00
c561ea20ab add average difficulty
All checks were successful
Tests / Tests (pull_request) Successful in 7s
2025-03-11 13:41:37 -07:00
7ce0c058b7 add average time field to video in feed operation
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2025-03-11 13:10:34 -07:00
c399edd882 Merge pull request 'Add average difficulty in VideoGql' (#163) from loewy/average-difficulty-in-video-gql into master
Reviewed-on: #163
2025-03-07 17:18:36 -07:00
32d8cb0d41 add average diff in videogql
All checks were successful
Tests / Tests (pull_request) Successful in 20s
2025-03-07 16:16:42 -08:00
9d912ed21e Add time to segment information 2025-02-26 20:30:39 -07:00
0bcfd32b14 Add start segment and end segment client side fields 2025-02-26 19:29:15 -07:00
9b27d288da Merge pull request 'Add shots to runs operation to get the id' (#162) from loewy/add-shots-in-runs into master
Reviewed-on: #162
2025-02-20 15:02:43 -07:00
b0f94f5ea8 add shots to runs to get id
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2025-02-20 12:37:52 -08:00
de653ba54c Merge pull request 'Add tagClasses to getUserTags operation' (#161) from loewy/getUserTags-operation into master
Reviewed-on: #161
2025-02-05 13:51:14 -07:00
2657628a54 add tagClasses to operation
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2025-02-05 12:48:56 -08:00
cd20cfcb40 Add get runs for highlights 2025-02-04 20:57:22 -07:00
2657a9baf7 Merge pull request 'Return tag classes with tag' (#160) from kat/return-tag-classes-with-tag into master
Reviewed-on: #160
2025-02-04 19:16:15 -07:00
9bb4b7c513 Return tag classes with tag
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2025-02-04 19:14:55 -07:00
a5050ed08d Merge pull request 'Revert previous commit 021cd35278ea74f6971ae021b33ddc1bba020e6d' (#159) from loewy/revert-adding-group into master
Reviewed-on: #159
2025-02-04 15:42:41 -07:00
b9e26243e9 revert
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2025-02-04 14:41:11 -08:00
021cd35278 Merge pull request 'Add group in return for user tags' (#158) from loewy/add-group-to-get-user-tags into master
Reviewed-on: #158
2025-02-04 14:48:11 -07:00
8dda81236a add group to return for user tags
All checks were successful
Tests / Tests (pull_request) Successful in 16s
2025-02-04 13:44:58 -08:00
c7ff615fe4 Create tags in video metadata (#157)
Reviewed-on: #157
2025-02-03 16:43:25 -07:00
365cbb5f70 Merge pull request 'Create upload stream named fragment' (#156) from kat/named-fragment-mini-video into master
Reviewed-on: #156
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2025-01-28 21:31:23 -07:00
194d0dcd22 Create upload stream named fragment
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2025-01-28 21:28:31 -07:00
8fcaa1397a Merge pull request 'Add query to get info for banner component' (#155) from loewy/get-banner-info-by-video-id into master
Reviewed-on: #155
2025-01-21 14:20:42 -07:00
e8e318b919 add query to get info for banner component
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2025-01-20 15:04:23 -08:00
ff0a11ea0d Merge pull request 'Add last intended segment bound in fragment for VideoFeed stream obj' (#154) from loewy/add-last-intended-segment-bound-to-stream into master
Reviewed-on: #154
2025-01-16 23:03:42 -07:00
84192d1387 add last intended segment bound
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2025-01-16 22:01:57 -08:00
f1ae2b62d6 Add limit parameter 2025-01-16 20:16:29 -07:00
4f78cd94ab Add video info to longest runs leaderboard 2025-01-16 17:01:32 -07:00
bfdda67d1a Add run filter and run fields 2025-01-16 15:44:11 -07:00
881350619a Add get longest runs operation 2024-12-23 13:55:14 -07:00
8bc67f75b0 Use RunGQL directly for run leaderboard 2024-12-22 23:30:01 -07:00
df8495df77 Add proportion and total made to leaderboard query 2024-12-22 17:12:24 -07:00
0c45855f7d Add video count 2024-12-22 15:37:06 -07:00
a2e659dfcb Add runs leaderboard 2024-12-22 15:00:19 -07:00
2a36a392ce Merge pull request 'Leaderboards operation' (#153) from loewy/leaderboard-operations into master
Reviewed-on: #153
2024-12-20 14:14:24 -07:00
145c2f9558 leaderboards operation
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-12-20 13:13:30 -08:00
3f2e5d331f Add makes leaderboard 2024-12-19 17:48:29 -07:00
bf8e851139 Merge pull request 'Add profile image for followers' (#152) from loewy/add-profile-image-for-followers into master
Reviewed-on: #152
2024-12-19 17:36:44 -07:00
eb15f4f3b8 add profile image to user relationship
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-12-19 16:33:48 -08:00
82ff8546d4 add profile image for followers 2024-12-19 16:31:46 -08:00
284334606d Merge pull request 'GetUser operation + fragment' (#151) from loewy/get-user-operation-and-fragment into master
Reviewed-on: #151
2024-12-19 12:47:20 -07:00
a883bc3e2f getUser by user id query
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2024-12-19 10:28:41 -08:00
b50ea5b573 Merge pull request 'Sync Apollo version w/ mobile to prevent ts errors' (#150) from loewy/sync-apollo-version-w-mobile into master
Reviewed-on: #150
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-12-19 11:28:04 -07:00
de17659dbb sync apollo version w/ mobile to prevent ts errors
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-12-19 10:26:09 -08:00
33886b4e9e Update getFeed operation 2024-12-17 18:07:00 -07:00
9d0ba908dc Generalize getFeed 2024-12-17 17:35:38 -07:00
7b4880a990 Add all videos 2024-12-17 14:12:25 -07:00
8ed177b0f3 Merge pull request 'Add EditShot operation' (#149) from loewy/add-edit-shot-operation into master
Reviewed-on: #149
2024-12-09 14:33:47 -07:00
976cc66ccb add editshot operation
All checks were successful
Tests / Tests (pull_request) Successful in 17s
2024-12-09 14:00:36 -07:00
af461fff00 Merge pull request 'Add Difficulty ShotOrdering' (#148) from mk/shots-ordering-by-difficulty into master
Reviewed-on: #148
2024-12-07 15:27:08 -07:00
7a39b4ca60 Add Difficulty ShotOrdering
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-12-07 14:25:08 -08:00
9befbe3833 Merge pull request 'Add private field to video endpoints' (#147) from loewy/add-private-to-operations into master
Reviewed-on: #147
2024-12-05 16:31:25 -07:00
68a4c064f3 add private field to video endpoints
All checks were successful
Tests / Tests (pull_request) Successful in 16s
2024-12-05 15:30:16 -08:00
54fd741670 Merge pull request 'Request additional medals in operations' (#146) from loewy/request-new-medals-in-operation into master
Reviewed-on: #146
2024-12-05 14:57:41 -07:00
2f9e630de4 new assets for medals
All checks were successful
Tests / Tests (pull_request) Successful in 17s
2024-12-05 13:47:47 -08:00
5efd8ef8e5 Merge pull request 'Remove distance 60 from operation' (#145) from loewy/remove-distance-60-from-request into master
Reviewed-on: #145
2024-12-04 15:00:27 -07:00
6ad3d449d8 remove distance 60 from operation
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-12-04 13:59:51 -08:00
8fe20d1c41 Merge pull request 'Add editShotData types' (#144) from mk/edit-shot-data into master
Reviewed-on: #144
2024-12-02 20:01:53 -07:00
e151f39582 Add edit shot data stuff
All checks were successful
Tests / Tests (pull_request) Successful in 5s
2024-12-02 18:57:36 -08:00
f136ddb9ca Merge pull request 'Replaces interval with datetime range' (#143) from mk/fix-medal-time-input into master
Reviewed-on: #143
2024-11-26 14:21:16 -07:00
5d05614e07 Replaces interval with datetime range
All checks were successful
Tests / Tests (pull_request) Successful in 17s
2024-11-26 13:19:33 -08:00
c4c3ccde00 id in homography 2024-11-25 14:53:41 -08:00
e137ce8ad1 Request id in Homography info 2024-11-21 17:59:29 -07:00
17 changed files with 2909 additions and 218 deletions

View File

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

View File

@ -1,9 +1,16 @@
# see: https://www.apollographql.com/docs/react/local-state/managing-state-with-field-policies/
directive @client on FIELD
type SegmentInfo {
index: Int!
time: Float!
}
extend type ShotGQL {
startTime: Float!
endTime: Float!
startSegment: SegmentInfo!
endSegment: SegmentInfo!
}
extend type UploadStreamGQL {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
mutation CommentOnVideo(
$videoId: Int!
$message: String!
$parentCommentId: Int
) {
commentOnVideo(
videoId: $videoId
message: $message
parentCommentId: $parentCommentId
)
}
mutation EditComment($videoId: Int!, $commentId: Int!, $newMessage: String!) {
editComment(videoId: $videoId, commentId: $commentId, newMessage: $newMessage)
}
mutation DeleteComment($videoId: Int!, $commentId: Int!) {
deleteComment(videoId: $videoId, commentId: $commentId)
}

View File

@ -5,5 +5,13 @@ query getDeployedConfig {
environment
firebase
minimumAllowedAppVersion
bannerMessages {
color
dismissible
id
kind
message
priority
}
}
}

View File

@ -15,6 +15,17 @@ query GetFeed(
}
}
fragment UserSocialsFields on UserGQL {
id
username
profileImageUri
followers {
id
username
profileImageUri
}
}
fragment VideoCardFields on VideoGQL {
id
owner {
@ -27,6 +38,8 @@ fragment VideoCardFields on VideoGQL {
totalShotsMade
totalShots
makePercentage
averageTimeBetweenShots
averageDifficulty
createdAt
updatedAt
startTime
@ -36,7 +49,9 @@ fragment VideoCardFields on VideoGQL {
screenshotUri
stream {
id
lastIntendedSegmentBound
isCompleted
streamSegmentType
}
tableSize
tags {
@ -55,6 +70,27 @@ fragment VideoCardFields on VideoGQL {
status
}
}
reactions {
videoId
user {
...UserSocialsFields
}
reaction
}
comments {
id
message
user {
...UserSocialsFields
}
replies {
id
message
user {
...UserSocialsFields
}
}
}
}
query GetVideoFeed(
@ -62,12 +98,16 @@ query GetVideoFeed(
$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

View File

@ -0,0 +1,32 @@
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

@ -5,9 +5,6 @@ fragment MedalFields on MedalGQL {
query getMedals($scope: MedalScope!, $userId: Int) {
getMedals(scope: $scope, userId: $userId) {
distanceOver66 {
...MedalFields
}
distanceOver78 {
...MedalFields
}
@ -47,19 +44,18 @@ query getMedals($scope: MedalScope!, $userId: Int) {
totalMakes100 {
...MedalFields
}
# missing assets
# totalMakes500 {
# ...MedalFields
# }
# totalMakes1000 {
# ...MedalFields
# }
# totalMakes5000 {
# ...MedalFields
# }
# totalMakes10000 {
# ...MedalFields
# }
totalMakes500 {
...MedalFields
}
totalMakes1000 {
...MedalFields
}
totalMakes5000 {
...MedalFields
}
totalMakes10000 {
...MedalFields
}
dailyMakes50 {
...MedalFields
}
@ -72,9 +68,8 @@ query getMedals($scope: MedalScope!, $userId: Int) {
dailyMakes200 {
...MedalFields
}
# missing asset
# dailyMakes250 {
# ...MedalFields
# }
dailyMakes250 {
...MedalFields
}
}
}

View File

@ -0,0 +1,3 @@
mutation ReactToVideo($videoId: Int!, $reaction: ReactionEnum) {
reactToVideo(videoId: $videoId, reaction: $reaction)
}

67
src/operations/runs.gql Normal file
View File

@ -0,0 +1,67 @@
query GetRunsForHighlights(
$filterInput: RunFilterInput!
$runIds: [Int!] = null
$runsOrdering: GetRunsOrdering
$limit: Int! = 500
$countRespectsLimit: Boolean! = false
) {
getRuns(
filterInput: $filterInput
runIds: $runIds
runsOrdering: $runsOrdering
limit: $limit
countRespectsLimit: $countRespectsLimit
) {
count
runs {
id
runLength
userId
videoId
shots {
videoId
id
}
}
runIds
}
}
fragment PocketingIntentionFragment on PocketingIntentionFeaturesGQL {
make
targetPocketDistance
targetPocketAngle
targetPocketAngleDirection
marginOfErrorInDegrees
intendedPocketType
difficulty
}
query GetRunsWithTimestamps(
$filterInput: RunFilterInput!
$runIds: [Int!] = null
$runsOrdering: GetRunsOrdering
) {
getRuns(
filterInput: $filterInput
runIds: $runIds
runsOrdering: $runsOrdering
) {
count
runs {
id
runLength
userId
videoId
shots {
videoId
id
createdAt
pocketingIntentionFeatures {
...PocketingIntentionFragment
}
}
}
runIds
}
}

View File

@ -139,6 +139,14 @@ fragment ShotWithAllFeatures on ShotGQL {
endFrame
startTime @client
endTime @client
startSegment @client {
index
time
}
endSegment @client {
index
time
}
user {
id
}
@ -177,4 +185,23 @@ fragment ShotWithAllFeatures on ShotGQL {
}
notes
}
video {
id
stream {
id
streamSegmentType
}
}
}
mutation EditShot($shotId: Int!, $fieldsToEdit: EditableShotFieldInputGQL!) {
editShot(shotId: $shotId, fieldsToEdit: $fieldsToEdit) {
error {
shotId
msg
}
shot {
...ShotWithAllFeatures
}
}
}

7
src/operations/tags.gql Normal file
View File

@ -0,0 +1,7 @@
mutation RetireTags($tagIds: [Int!]!) {
retireTags(tagIds: $tagIds)
}
mutation DeleteTags($videoId: Int!, $tagsToDelete: [VideoTagInput!]!) {
deleteTags(videoId: $videoId, tagsToDelete: $tagsToDelete)
}

View File

@ -21,27 +21,19 @@ mutation getProfileImageUploadLink($fileExt: String = ".png") {
mutation editProfileImageUri($profileImageUri: String!) {
editProfileImageUri(profileImageUri: $profileImageUri) {
id
firebaseUid
username
profileImageUri
createdAt
updatedAt
...UserFragment
}
}
query getLoggedInUser {
getLoggedInUser {
id
firebaseUid
username
isAdmin
profileImageUri
fargoRating
activeVideoId
createdAt
updatedAt
videosPrivateByDefault
...UserFragment
}
}
query GetUser($userId: Int!) {
getUser(userId: $userId) {
...UserFragment
}
}
@ -74,6 +66,7 @@ query getUserRelationshipsMatching(
relationships {
toUser {
username
profileImageUri
id
}
toUserFollows
@ -86,6 +79,10 @@ query GetUserTags {
getUserTags {
id
name
tagClasses {
id
name
}
}
}
@ -125,10 +122,12 @@ query getUserFollowingFollowers {
following {
id
username
profileImageUri
}
followers {
id
username
profileImageUri
}
}
}
@ -157,3 +156,16 @@ mutation editUser(
videosPrivateByDefault
}
}
fragment UserFragment on UserGQL {
id
firebaseUid
username
isAdmin
profileImageUri
fargoRating
activeVideoId
createdAt
updatedAt
videosPrivateByDefault
}

View File

@ -36,6 +36,7 @@ query GetVideoUpdatePageDetails($videoId: Int!) {
makePercentage
elapsedTime
tableSize
private
tags {
tagClasses {
name
@ -65,6 +66,7 @@ query GetVideoDetails($videoId: Int!) {
createdAt
updatedAt
tableSize
private
owner {
id
firebaseUid
@ -80,6 +82,57 @@ query GetVideoDetails($videoId: Int!) {
}
}
fragment UserSocialsFields on UserGQL {
id
username
profileImageUri
followers {
id
username
profileImageUri
}
}
query GetVideoSocialDetailsById($videoId: Int!) {
getVideo(videoId: $videoId) {
id
name
owner {
id
firebaseUid
username
profileImageUri
}
tags {
tagClasses {
name
}
name
}
reactions {
videoId
user {
...UserSocialsFields
}
reaction
}
comments {
id
message
user {
...UserSocialsFields
}
replies {
id
message
user {
...UserSocialsFields
}
}
}
}
}
query GetVideos($videoIds: [Int!]!) {
getVideos(videoIds: $videoIds) {
...VideoStreamMetadata
@ -214,6 +267,23 @@ query GetHeaderInfoByVideoId($videoId: Int!) {
startTime
}
}
query GetBannerInfoByVideoId($videoId: Int!) {
getVideo(videoId: $videoId) {
id
name
stream {
id
lastIntendedSegmentBound
}
owner {
id
}
currentProcessing {
id
status
}
}
}
mutation FindPrerecordTableLayout($b64Image: String!, $videoId: Int!) {
findPrerecordTableLayout(b64Image: $b64Image, videoId: $videoId) {

View File

@ -101,6 +101,19 @@ query GetUploadStreams(
}
}
}
fragment UploadStreamWithDetails on VideoGQL {
id
name
startTime
stream {
isCompleted
lastIntendedSegmentBound
uploadCompletionCursor
uploadsCompleted
}
}
query GetUploadStreamsWithDetails(
$limit: Int! = 5
$after: String = null
@ -108,15 +121,7 @@ query GetUploadStreamsWithDetails(
) {
getUserVideos(limit: $limit, after: $after, filters: $filters) {
videos {
id
name
startTime
stream {
isCompleted
lastIntendedSegmentBound
uploadCompletionCursor
uploadsCompleted
}
...UploadStreamWithDetails
}
pageInfo {
hasNextPage

View File

@ -5,10 +5,28 @@ type Query {
getBucketSet(keyName: String!): BucketSetGQL
getDeployedConfig: DeployedConfigGQL!
waitFor(duration: Float!): Float!
getFeedVideos(
limit: Int! = 5
after: String = null
includePrivate: IncludePrivateEnum! = MINE
includeCallersVideos: Boolean = true
filters: VideoFilterInput = null
feedInput: VideoFeedInputGQL = null
): VideoHistoryGQL!
getVideoMakePercentageIntervals(
videoId: ID!
intervalDuration: Int! = 300
): [MakePercentageIntervalGQL!]!
getLongestRunsLeaderboard(
interval: TimeInterval = null
when: DateTime = null
limit: Int! = 100
requiredTags: [String!] = null
): RunLeaderboardGQL!
getMakesLeaderboard(
interval: TimeInterval = null
when: DateTime = null
): CountLeaderboardGQL!
getMedals(scope: MedalScope!, userId: Int = null): RequestedMedalsGQL!
getRuns(
filterInput: RunFilterInput!
@ -17,6 +35,12 @@ type Query {
limit: Int! = 500
countRespectsLimit: Boolean! = false
): GetRunsResult!
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
getTableState(
b64Image: String!
tableSize: Float = 100
useHomography: HomographyInputGQL = null
): TableStateGQL!
getOrderedShots(
filterInput: FilterInput!
ids: [Int!] = null
@ -38,7 +62,6 @@ type Query {
countRespectsLimit: Boolean! = false
): [ShotGQL!]!
getShotsByIds(ids: [Int!]!): [ShotGQL!]!
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
getUser(userId: Int!): UserGQL
doesUsernameExist(candidateUsername: String!): Boolean!
getLoggedInUser: UserGQL
@ -47,6 +70,11 @@ type Query {
limit: Int = null
after: String = null
): [String!]!
getUsersMatching(
matchString: String = null
limit: Int = null
after: String = null
): [UserGQL!]!
getUserRelationshipsMatching(
userId: Int!
matchString: String = null
@ -60,15 +88,9 @@ type Query {
after: String = null
filters: VideoFilterInput = null
): VideoHistoryGQL!
getUserTags: [TagGQL!]!
getUserTags(includeRetiredTags: Boolean = false): [TagGQL!]!
getVideo(videoId: Int!, debuggingJson: JSON = null): VideoGQL!
getVideos(videoIds: [Int!]!): [VideoGQL!]!
getFeedVideos(
limit: Int! = 5
after: String = null
includeCallersVideos: Boolean = true
filters: VideoFilterInput = null
): VideoHistoryGQL!
}
type AggregateResultGQL {
@ -171,6 +193,7 @@ input FilterInput @oneOf {
shotDirection: [ShotDirectionEnum!]
videoId: [Int!]
userId: [Int!]
runId: [Int!]
username: [String!]
fargoRating: FloatRangeFilter
make: [Boolean!]
@ -182,6 +205,7 @@ input FilterInput @oneOf {
isLeftMiss: [Boolean!]
isRightMiss: [Boolean!]
isDirect: [Boolean!]
isBreakHeuristic: [Boolean!]
tableSize: FloatRangeFilter
bankAngle: FloatRangeFilter
bankDistance: FloatRangeFilter
@ -272,68 +296,72 @@ type DeployedConfigGQL {
devMode: Boolean!
environment: String!
minimumAllowedAppVersion: String!
bannerMessages: [BannerGQL!]!
}
type MakePercentageIntervalGQL {
makePercentage: Float!
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
}
type GetRunsResult {
runs: [RunGQL!]!
count: Int
runIds: [Int!]!
}
type RunGQL {
type BannerGQL {
id: Int!
runLength: Int!
videoId: Int!
userId: Int!
message: String!
color: String!
kind: BannerKindEnum!
dismissible: Boolean!
priority: Int!
}
enum BannerKindEnum {
INFO
WARNING
ERROR
}
type VideoHistoryGQL {
videos: [VideoGQL!]!
pageInfo: PageInfoGQL!
}
type VideoGQL {
id: Int!
owner: UserGQL
name: String
screenshotUri: String
totalShotsMade: Int!
totalShots: Int!
makePercentage: Float!
medianRun: Float
averageTimeBetweenShots: Float
averageDifficulty: Float
createdAt: DateTime
updatedAt: DateTime
shots: [ShotGQL!]!
startTime: DateTime
endTime: DateTime
elapsedTime: Float
framesPerSecond: Float!
tableSize: Float!
private: Boolean!
stream: UploadStreamGQL
playlist: HLSPlaylistGQL
tags: [VideoTag!]!
currentHomography: HomographyInfoGQL
homographyHistory: [HomographyInfoGQL!]!
currentProcessing: VideoProcessingGQL
reactions: [ReactionGQL!]!
comments: [CommentGQL!]!
}
type UserGQL {
id: Int!
firebaseUid: String
username: String!
isAdmin: Boolean
fargoRating: Int
activeVideoId: Int
profileImageUri: String
createdAt: DateTime
updatedAt: DateTime
videosPrivateByDefault: Boolean
following: [UserGQL!]
followers: [UserGQL!]
}
type ShotGQL {
@ -352,6 +380,8 @@ type ShotGQL {
annotations: [ShotAnnotationGQL!]!
falsePositiveScore: Float
video: VideoGQL
run: RunGQL
runFeatures: RunFeaturesGQL
}
type CueObjectFeaturesGQL {
@ -403,21 +433,6 @@ type SerializedShotPathsGQL {
b64EncodedBuffer: String
}
type UserGQL {
id: Int!
firebaseUid: String
username: String!
isAdmin: Boolean
fargoRating: Int
activeVideoId: Int
profileImageUri: String
createdAt: DateTime
updatedAt: DateTime
videosPrivateByDefault: Boolean
following: [UserGQL!]
followers: [UserGQL!]
}
type ShotAnnotationGQL {
shotId: Int!
type: ShotAnnotationTypeGQL!
@ -433,31 +448,19 @@ type ShotAnnotationTypeGQL {
name: String!
}
type VideoGQL {
type RunGQL {
id: Int!
owner: UserGQL
name: String
screenshotUri: String
totalShotsMade: Int!
totalShots: Int!
makePercentage: Float!
medianRun: Float
averageTimeBetweenShots: Float
createdAt: DateTime
updatedAt: DateTime
runLength: Int!
videoId: Int!
userId: Int!
shots: [ShotGQL!]!
startTime: DateTime
endTime: DateTime
elapsedTime: Float
framesPerSecond: Float!
tableSize: Float!
private: Boolean!
stream: UploadStreamGQL
playlist: HLSPlaylistGQL
tags: [VideoTag!]!
currentHomography: HomographyInfoGQL
homographyHistory: [HomographyInfoGQL!]!
currentProcessing: VideoProcessingGQL
video: VideoGQL!
user: UserGQL!
}
type RunFeaturesGQL {
runId: Int!
indexInRun: Int!
}
type UploadStreamGQL {
@ -591,6 +594,124 @@ type VideoProcessingStatusGQL {
updatedAt: DateTime
}
type ReactionGQL {
videoId: Int!
user: UserGQL!
reaction: ReactionEnum!
createdAt: DateTime
updatedAt: DateTime
}
enum ReactionEnum {
LIKE
HEART
BULLSEYE
HUNDRED
}
type CommentGQL {
id: Int!
user: UserGQL!
message: String!
replies: [CommentGQL!]!
}
type PageInfoGQL {
hasNextPage: Boolean!
endCursor: String
}
enum IncludePrivateEnum {
ALL
MINE
NONE
}
input VideoFilterInput {
isStreamCompleted: Boolean = null
requireCursorCompletion: Boolean! = true
createdAt: DateRangeFilter = null
excludeVideosWithNoShots: Boolean = null
}
input VideoFeedInputGQL @oneOf {
followedByUserId: Int
userId: Int
allUsers: Boolean
}
type MakePercentageIntervalGQL {
makePercentage: Float!
elapsedTime: Float!
}
type RunLeaderboardGQL {
entries: [RunGQL!]!
}
type CountLeaderboardGQL {
entries: [UserShotCountEntry!]!
}
type UserShotCountEntry {
user: UserGQL!
value: Int!
total: Int!
proportionMade: Float!
videos: Int!
}
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!]!
}
input RunFilterInput {
videoId: [Int!]
userId: [Int!]
@ -623,6 +744,39 @@ input DatetimeOrdering {
startingAt: DateTime = null
}
type TableStateGQL {
identifierToPosition: [[Float!]!]!
homography: HomographyInfoGQL
}
input HomographyInputGQL {
crop: BoundingBoxInputGQL!
pockets: [BoundingBoxInputGQL!]!
sourcePoints: PocketPointsInputGQL!
destPoints: PocketPointsInputGQL!
}
input BoundingBoxInputGQL {
left: Float!
top: Float!
width: Float!
height: Float!
}
input PocketPointsInputGQL {
topLeft: IntPoint2DInput!
topSide: IntPoint2DInput!
topRight: IntPoint2DInput!
bottomLeft: IntPoint2DInput!
bottomSide: IntPoint2DInput!
bottomRight: IntPoint2DInput!
}
input IntPoint2DInput {
x: Int!
y: Int!
}
type GetShotsResult {
shots: [ShotGQL!]!
count: Int
@ -636,6 +790,7 @@ input GetShotsOrdering {
input ShotsOrderingComponent @oneOf {
videoCreation: DatetimeOrdering
marginOfError: FloatOrdering
difficulty: FloatOrdering
videoId: IntOrdering
startFrame: IntOrdering
runLength: IntOrdering
@ -671,27 +826,16 @@ type UserPlayTimeGQL {
totalSeconds: Float!
}
input VideoFilterInput {
isStreamCompleted: Boolean = null
requireCursorCompletion: Boolean! = true
createdAt: DateRangeFilter = null
excludeVideosWithNoShots: Boolean = null
}
type VideoHistoryGQL {
videos: [VideoGQL!]!
pageInfo: PageInfoGQL!
}
type PageInfoGQL {
hasNextPage: Boolean!
endCursor: String
}
type TagGQL {
name: String!
id: Int!
group: String
name: String!
tagClasses: [TagClassGQL!]
retired: Boolean!
}
type TagClassGQL {
id: Int!
name: String!
}
"""
@ -705,6 +849,14 @@ scalar JSON
type Mutation {
createBucketSet(params: CreateBucketSetInput!): BucketSetGQL!
setLoggerLevel(path: String!, level: String!): Boolean!
reactToVideo(videoId: Int!, reaction: ReactionEnum): Boolean!
commentOnVideo(
videoId: Int!
message: String!
parentCommentId: Int
): Boolean!
editComment(videoId: Int!, commentId: Int!, newMessage: String!): Boolean!
deleteComment(videoId: Int!, commentId: Int!): Boolean!
addAnnotationToShot(
shotId: Int!
annotationName: String!
@ -714,6 +866,10 @@ type Mutation {
shotId: Int!
annotations: [UpdateAnnotationInputGQL!]!
): UpdateShotAnnotationReturn!
editShot(
shotId: Int!
fieldsToEdit: EditableShotFieldInputGQL!
): EditShotReturn!
getProfileImageUploadLink(
fileExt: String = ".png"
): GetProfileUploadLinkReturn!
@ -721,6 +877,7 @@ type Mutation {
editUser(input: EditUserInputGQL!): UserGQL!
followUser(followedUserId: Int!): UserGQL!
unfollowUser(followedUserId: Int!): UserGQL!
retireTags(tagIds: [Int!]!): Boolean!
findPrerecordTableLayout(b64Image: String!, videoId: Int!): HomographyInfoGQL
createUploadStream(
videoMetadata: VideoMetadataInput!
@ -734,6 +891,7 @@ type Mutation {
): Boolean!
editUploadStream(videoId: Int!, videoMetadata: VideoMetadataInput!): Boolean!
deleteVideo(videoId: Int!): Boolean!
deleteTags(videoId: Int!, tagsToDelete: [VideoTagInput!]!): Boolean!
}
input CreateBucketSetInput {
@ -781,6 +939,22 @@ input UpdateAnnotationInputGQL {
notes: String = null
}
type EditShotReturn {
shot: ShotGQL
error: DoesNotOwnShotErr
}
input EditableShotFieldInputGQL {
intendedPocketType: PocketEnum
shotDirection: ShotDirectionEnum
spinType: SpinTypeEnum
targetPocketAngleDirection: ShotDirectionEnum
make: Boolean
backcut: Boolean
excludeFromStats: Boolean
notes: String
}
type GetProfileUploadLinkReturn {
value: UploadLinkGetProfileUploadLinkErrors!
}
@ -822,6 +996,12 @@ input VideoMetadataInput {
startTime: DateTime = null
endTime: DateTime = null
gameType: String = null
@deprecated(reason: "`game_type` is deprecated. Use `tags` instead.")
"""
A list of tags associated with the video. Replace `game_type`
"""
tags: [VideoTagInput!] = null
tableSize: Float = null
lastIntendedSegmentBound: Int = null
streamSegmentType: StreamSegmentTypeEnum = null

View File

@ -10,10 +10,10 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
"@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==
"@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==
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.0.3"
rehackt "^0.1.0"
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.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.0.3.tgz#1ea454620d4641db8342e2db44595cf0e7ac6aa0"
integrity sha512-aBRHudKhOWwsTvCbSoinzq+Lej/7R8e8UoPvLZo5HirZIIBLGAgdG7SL9QpdcBoQ7+3QYPi3lRLknAzXBlhZ7g==
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==
relay-runtime@12.0.0:
version "12.0.0"