Compare commits

...

53 Commits

Author SHA1 Message Date
f573026853 Create get usernames and followers operation
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-10-23 17:04:25 -06:00
f98c98ecdd Merge pull request 'Add get usernames and following response' (#83) from kat/add-usernames-response into master
Reviewed-on: #83
2024-10-23 16:53:50 -06:00
3f6314aab7 Add get usernames and following response
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-10-23 16:53:26 -06:00
3051c155e2 Merge pull request 'Add mutation, logic needs to have better stateful solution' (#82) from loewy/add-annotations-to-operations into master
Reviewed-on: #82
2024-10-22 18:38:25 -06:00
e686be5acd add mutation, logic needs to have better stateful solution
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2024-10-22 16:58:35 -07:00
d49f9b213a Merge pull request 'Add following followers to user model' (#81) from kat/following-followers into master
Reviewed-on: #81
2024-10-22 00:12:59 -06:00
8f346d7832 Add runLength ordering and filter 2024-10-21 21:35:19 -06:00
163c6a4e0c Add following followers to user model
All checks were successful
Tests / Tests (pull_request) Successful in 7s
2024-10-21 12:08:42 -06:00
b9036001aa Remove user id from feed args 2024-10-21 01:12:17 -06:00
b16b36588f Create feed query 2024-10-20 23:35:52 -06:00
efaaeeaad1 Add totalDistance 2024-10-20 14:38:06 -06:00
5d93f7166e Use getOrderedShots 2024-10-19 21:27:57 -06:00
72ac956758 Add get ordered shots 2024-10-19 20:18:23 -06:00
5cb7df174b Merge pull request 'get rid of metadata input' (#80) from mk/alter-metadata-type into master
Reviewed-on: #80
2024-10-18 12:52:21 -06:00
d15dae23c1 get rid of metadata input
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-10-18 11:51:38 -07:00
c98a65bb6f Merge pull request 'Add fargo filter input' (#79) from mk/fargo-filter into master
Reviewed-on: #79
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-10-17 16:26:09 -06:00
e701c79469 Add fargo filter input
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2024-10-17 15:24:56 -07:00
18cd3efe80 Dumb bug, nuked the schema lol (#78)
Alter fargo type, restore schema :O
Reviewed-on: #78
Co-authored-by: Mike Kalange <countablecloud@gmail.com>
Co-committed-by: Mike Kalange <countablecloud@gmail.com>
2024-10-17 15:15:54 -06:00
d71974d385 Merge pull request 'Add editUser mutation and input' (#77) from mk/edit-user into master
Reviewed-on: #77
2024-10-17 15:11:40 -06:00
0defdf0892 Add editUser mutation and input
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-10-17 14:10:43 -07:00
8d1f79b8a8 GQL for caching hack 2024-10-17 01:28:14 -06:00
9dc426ea0f Moar fragments! 2024-10-16 23:39:14 -06:00
19a63b9d19 Move segment start times 2024-10-16 18:52:18 -06:00
ae97f956b3 Add segmentDurations and segmentStartFrames 2024-10-16 16:46:29 -06:00
d619751144 Add client side start and end time 2024-10-16 15:24:08 -06:00
e431a1751f Merge pull request 'Create get video for shot time conversion query' (#76) from kat/get-video-metadata into master
Reviewed-on: #76
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-10-16 00:03:39 -06:00
209f0aa019 Create get video for shot time conversion query
All checks were successful
Tests / Tests (pull_request) Successful in 16s
2024-10-15 23:41:04 -06:00
70015a942c Merge pull request 'Add updateAnnotation interfaces' (#75) from mk/update-annotations into master
Reviewed-on: #75
2024-10-14 18:41:08 -06:00
91cfcb28e7 Add updateAnnotation interfaces
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2024-10-14 17:27:07 -07:00
b2a09c1b8c Create reserved query for get shots with metadata (#74)
Reviewed-on: #74
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-10-11 18:46:46 -06:00
59aaf47cbe Merge pull request 'Add a lightweight GQL call to get video header info' (#73) from loewy/add-lightweight-get-video-with-just-header-info into master
Reviewed-on: #73
2024-10-10 18:33:42 -06:00
c426e753cd add lightweigth gql call to get video header info
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-10-10 17:02:18 -07:00
c8cf97421b Merge pull request 'Add id to shots: video items to prevent cache merge issues' (#72) from loewy/add-id-to-fix-cache-merging-issue into master
Reviewed-on: #72
2024-10-07 22:15:38 -06:00
9718137ad3 add id to prevent cache merge issues
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2024-10-07 21:14:47 -07:00
af1fb3fee7 Merge pull request 'Add a lightweight query to get video thumbnail and info from getShotsResultGql' (#71) from loewy/get-shots-with-video into master
Reviewed-on: #71
Reviewed-by: Kat Huang <kkathuang@gmail.com>
2024-10-07 20:19:14 -06:00
025baf257a add a lightweight query to get video thumbnail and info from getShotsResultGql
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-10-07 16:51:53 -07:00
8239ab6e1b Add a username filter 2024-10-06 13:44:53 -06:00
1f018f954e Add all targetPocketIntention features to shot retrieval 2024-10-06 13:16:39 -06:00
fd78ddf641 Add marginOfErrorInDegrees 2024-10-06 12:52:13 -06:00
7662f1f050 Merge pull request 'Add day back' (#70) from kat/add-day-back into master
Reviewed-on: #70
2024-10-05 14:44:27 -06:00
890bea2571 Add day back
All checks were successful
Tests / Tests (pull_request) Successful in 7s
2024-10-05 14:33:39 -06:00
f57f6dc32d Merge pull request 'Add day' (#69) from kat/update-gql into master
Reviewed-on: #69
2024-10-04 23:49:52 -06:00
14863e3357 Add day
All checks were successful
Tests / Tests (pull_request) Successful in 6s
2024-10-04 22:56:58 -06:00
Your Name
58f01c567c Add day alignment 2024-10-03 21:57:07 -06:00
937368c753 GetShotsWithMetadata accepts ids (#68)
Reviewed-on: #68
2024-10-03 12:36:35 -06:00
d8c11875d4 Merge pull request 'Update get shots with metadata' (#67) from kat/update-gql into master
Reviewed-on: #67
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-10-03 11:47:20 -06:00
bacd9e77f0 Update get shots with metadata
All checks were successful
Tests / Tests (pull_request) Successful in 14s
2024-10-03 11:42:39 -06:00
69d755ba32 Merge pull request 'Use ShotWithAllFeatures in getAllShots' (#66) from kat/use-fragment-get-shots into master
Reviewed-on: #66
2024-10-02 19:09:50 -06:00
31fb95e3b0 Use ShotWithAllFeatures in getAllShots
All checks were successful
Tests / Tests (pull_request) Successful in 13s
2024-10-02 18:15:00 -06:00
7d0f9870dd Merge pull request 'Delete unused get shots operation' (#65) from kat/delete-unused-get-shots into master
Reviewed-on: #65
2024-10-02 17:46:26 -06:00
4a493b4e8d Delete unused get shots operation
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-10-02 17:43:06 -06:00
341dc819a0 Merge pull request 'Use shot fragment in getShots to cache normalized shots' (#64) from kat/create-shot-fragment into master
Reviewed-on: #64
2024-10-02 17:37:59 -06:00
b58aecf7a5 Crate shot with all features fragment (#63)
Reviewed-on: #63
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-10-01 19:19:39 -06:00
7 changed files with 1811 additions and 589 deletions

View File

@@ -1,5 +1,7 @@
overwrite: true overwrite: true
schema: "src/schema.gql" schema:
- "src/schema.gql"
- "src/client-schema.gql"
documents: "src/**/*.gql" documents: "src/**/*.gql"
generates: generates:
src/index.tsx: src/index.tsx:

25
src/client-schema.gql Normal file
View File

@@ -0,0 +1,25 @@
# see: https://www.apollographql.com/docs/react/local-state/managing-state-with-field-policies/
directive @client on FIELD
extend type ShotGQL {
startTime: Float!
endTime: Float!
}
extend type UploadStreamGQL {
segmentEndFrames: [Int!]!
}
extend type HLSPlaylistGQL {
segmentStartTimes: [Float!]!
}
type SegmentEndFramesGQL {
id: Int!
segmentEndFrames: [Int!]!
}
type SegmentStartTimesGQL {
id: Int!
segmentStartTimes: [Float!]!
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,59 +1,3 @@
query GetShots(
$filterInput: FilterInput!
$shotsPagination: GetShotsPagination
$limit: Int
$includeCreatedAt: Boolean! = false
$includeUpdatedAt: Boolean! = false
$includeCueObjectFeatures: Boolean! = false
$includePocketingIntentionFeatures: Boolean! = false
$includeCueObjectDistance: Boolean! = false
$includeCueObjectAngle: Boolean! = false
$includeCueBallSpeed: Boolean! = false
$includeSpinType: Boolean! = false
$includeShotDirection: Boolean! = false
$includeTargetPocketDistance: Boolean! = false
$includeMake: Boolean! = false
$includeIntendedPocketType: Boolean! = false
) {
getShots(
filterInput: $filterInput
shotsPagination: $shotsPagination
limit: $limit
) {
id
videoId
startFrame
endFrame
user {
id
}
falsePositiveScore
video {
stream {
resolution {
width
height
}
}
}
createdAt @include(if: $includeCreatedAt)
updatedAt @include(if: $includeUpdatedAt)
cueObjectFeatures @include(if: $includeCueObjectFeatures) {
cueObjectDistance @include(if: $includeCueObjectDistance)
cueObjectAngle @include(if: $includeCueObjectAngle)
cueBallSpeed @include(if: $includeCueBallSpeed)
shotDirection @include(if: $includeShotDirection)
spinType @include(if: $includeSpinType)
}
pocketingIntentionFeatures
@include(if: $includePocketingIntentionFeatures) {
targetPocketDistance @include(if: $includeTargetPocketDistance)
make @include(if: $includeMake)
intendedPocketType @include(if: $includeIntendedPocketType)
}
}
}
query GetSerializedShotPaths($filterInput: FilterInput!) { query GetSerializedShotPaths($filterInput: FilterInput!) {
getShots(filterInput: $filterInput) { getShots(filterInput: $filterInput) {
id id
@@ -73,104 +17,78 @@ query GetShotAnnotationTypes {
} }
} }
query GetShotsWithMetadata( mutation UpdateShotAnnotations(
$filterInput: FilterInput! $shotId: Int!
$shotsPagination: GetShotsPagination $annotations: [UpdateAnnotationInputGQL!]!
$limit: Int
$includeCreatedAt: Boolean! = false
$includeUpdatedAt: Boolean! = false
$includeCueObjectFeatures: Boolean! = false
$includePocketingIntentionFeatures: Boolean! = false
$includeCueObjectDistance: Boolean! = false
$includeCueObjectAngle: Boolean! = false
$includeCueBallSpeed: Boolean! = false
$includeSpinType: Boolean! = false
$includeShotDirection: Boolean! = false
$includeTargetPocketDistance: Boolean! = false
$includeMake: Boolean! = false
$includeIntendedPocketType: Boolean! = false
) { ) {
getShotsWithMetadata( updateShotAnnotations(shotId: $shotId, annotations: $annotations) {
filterInput: $filterInput value {
shotsPagination: $shotsPagination ... on SuccessfulUpdate {
limit: $limit value
) {
count
shots {
id
videoId
startFrame
endFrame
user {
id
} }
falsePositiveScore ... on UpdateShotAnnotationErrors {
video { error {
stream { shotId
resolution { msg
width
height
}
} }
} }
createdAt @include(if: $includeCreatedAt)
updatedAt @include(if: $includeUpdatedAt)
cueObjectFeatures @include(if: $includeCueObjectFeatures) {
cueObjectDistance @include(if: $includeCueObjectDistance)
cueObjectAngle @include(if: $includeCueObjectAngle)
cueBallSpeed @include(if: $includeCueBallSpeed)
shotDirection @include(if: $includeShotDirection)
spinType @include(if: $includeSpinType)
}
pocketingIntentionFeatures
@include(if: $includePocketingIntentionFeatures) {
targetPocketDistance @include(if: $includeTargetPocketDistance)
make @include(if: $includeMake)
intendedPocketType @include(if: $includeIntendedPocketType)
}
pocketingIntentionInfo @include(if: $includePocketingIntentionFeatures) {
ballId
pocketId
pathMetadataIndex
}
serializedShotPaths @include(if: $includePocketingIntentionFeatures) {
b64EncodedBuffer
}
} }
} }
} }
fragment ShotWithAllFeatures on ShotGQL { query GetShotsWithVideoGql($filterInput: FilterInput!, $limit: Int) {
id getShotsWithMetadata(filterInput: $filterInput, limit: $limit) {
videoId ids
startFrame shots {
endFrame id
falsePositiveScore videoId
createdAt video {
updatedAt screenshotUri
user { endTime
id
}
video {
id
stream {
resolution {
width
height
} }
} }
} }
cueObjectFeatures { }
cueObjectDistance
cueObjectAngle ## Reserved for playlists (which are created from a filter)
cueBallSpeed query GetShotsWithMetadataFilterResult(
shotDirection $filterInput: FilterInput!
spinType $shotsOrdering: GetShotsOrdering
$limit: Int
$ids: [Int!]
) {
getOrderedShots(
filterInput: $filterInput
shotsOrdering: $shotsOrdering
limit: $limit
ids: $ids
) {
count
shots {
...ShotWithAllFeatures
}
ids
} }
pocketingIntentionFeatures { }
targetPocketDistance
make # TODO: Delete
intendedPocketType query GetShotsWithMetadata(
$filterInput: FilterInput!
$shotsPagination: GetShotsPagination
$limit: Int
$ids: [Int!]
) {
getShotsWithMetadata(
filterInput: $filterInput
shotsPagination: $shotsPagination
limit: $limit
ids: $ids
) {
count
shots {
...ShotWithAllFeatures
}
ids
} }
} }
@@ -179,3 +97,49 @@ query GetShotsByIds($ids: [Int!]!) {
...ShotWithAllFeatures ...ShotWithAllFeatures
} }
} }
fragment ShotWithAllFeatures on ShotGQL {
id
videoId
startFrame
endFrame
startTime @client
endTime @client
user {
id
}
falsePositiveScore
createdAt
updatedAt
cueObjectFeatures {
cueObjectDistance
cueObjectAngle
cueBallSpeed
shotDirection
spinType
}
pocketingIntentionFeatures {
make
targetPocketDistance
targetPocketAngle
targetPocketAngleDirection
marginOfErrorInDegrees
intendedPocketType
}
pocketingIntentionInfo {
ballId
pocketId
pathMetadataIndex
}
serializedShotPaths {
b64EncodedBuffer
}
annotations {
shotId
type {
id
name
}
notes
}
}

View File

@@ -57,6 +57,24 @@ query getUsernames(
getUsernames(matchString: $matchString, limit: $limit, after: $after) getUsernames(matchString: $matchString, limit: $limit, after: $after)
} }
query getUsernamesAndFollowing(
$userId: Int!
$matchString: String!
$limit: Int = null
$after: String = null
) {
getUsernamesAndFollowing(
userId: $userId
matchString: $matchString
limit: $limit
after: $after
) {
followers
following
usernames
}
}
query GetUserTags { query GetUserTags {
getUserTags { getUserTags {
id id

View File

@@ -117,23 +117,33 @@ query GetVideoDetails($videoId: Int!) {
query GetVideos($videoIds: [Int!]!) { query GetVideos($videoIds: [Int!]!) {
getVideos(videoIds: $videoIds) { getVideos(videoIds: $videoIds) {
...VideoStreamMetadata
}
}
fragment VideoStreamMetadata on VideoGQL {
id
framesPerSecond
stream {
id id
framesPerSecond streamSegmentType
stream { segments {
id uploaded
streamSegmentType valid
segments { segmentIndex
uploaded endFrameIndex
valid framesPerSecond
segmentIndex
endFrameIndex
framesPerSecond
}
}
playlist {
segmentDurations
} }
} }
playlist {
segmentDurations
}
}
query GetVideoForShotTime($videoId: Int!) {
getVideo(videoId: $videoId) {
...VideoStreamMetadata
}
} }
query GetVideo($videoId: Int!) { query GetVideo($videoId: Int!) {
@@ -204,12 +214,14 @@ query GetAverageTimePerShotForVideo($videoId: Int!) {
averageTimeBetweenShots averageTimeBetweenShots
} }
} }
query GetElapsedTimeForVideo($videoId: Int!) { query GetElapsedTimeForVideo($videoId: Int!) {
getVideo(videoId: $videoId) { getVideo(videoId: $videoId) {
id id
elapsedTime elapsedTime
} }
} }
query GetMedianRunForVideo($videoId: Int!) { query GetMedianRunForVideo($videoId: Int!) {
getVideo(videoId: $videoId) { getVideo(videoId: $videoId) {
id id
@@ -217,23 +229,60 @@ query GetMedianRunForVideo($videoId: Int!) {
} }
} }
query GetVideoForClipTimes($videoId: Int!) { fragment StreamWithEndFrames on UploadStreamGQL {
getVideo(videoId: $videoId) { id
id streamSegmentType
segmentEndFrames @client
resolution {
width
height
}
segments {
uploaded
valid
segmentIndex
endFrameIndex
framesPerSecond framesPerSecond
playlist { }
segmentDurations }
}
stream { fragment SegmentEndFrames on SegmentEndFramesGQL {
id id
streamSegmentType segmentEndFrames
segments { }
uploaded
valid fragment SegmentStartTimes on SegmentStartTimesGQL {
segmentIndex id
endFrameIndex segmentStartTimes
framesPerSecond }
}
} fragment PlaylistWithSegmentStartTimes on HLSPlaylistGQL {
videoId
segmentDurations
segmentStartTimes @client
}
fragment VideoDurationData on VideoGQL {
id
framesPerSecond
playlist {
...PlaylistWithSegmentStartTimes
}
stream {
...StreamWithEndFrames
}
}
query GetVideoForClipTimes($videoId: Int!) {
getVideo(videoId: $videoId) {
...VideoDurationData
}
}
query GetHeaderInfoByVideoId($videoId: Int!) {
getVideo(videoId: $videoId) {
id
name
startTime
} }
} }

View File

@@ -9,8 +9,15 @@ type Query {
videoId: ID! videoId: ID!
intervalDuration: Int! = 300 intervalDuration: Int! = 300
): [MakePercentageIntervalGQL!]! ): [MakePercentageIntervalGQL!]!
getOrderedShots(
filterInput: FilterInput!
ids: [Int!] = null
shotsOrdering: GetShotsOrdering = null
limit: Int! = 500
): GetShotsResult!
getShotsWithMetadata( getShotsWithMetadata(
filterInput: FilterInput! filterInput: FilterInput!
ids: [Int!] = null
shotsPagination: GetShotsPagination = null shotsPagination: GetShotsPagination = null
limit: Int! = 500 limit: Int! = 500
): GetShotsResult! ): GetShotsResult!
@@ -28,6 +35,12 @@ type Query {
limit: Int = null limit: Int = null
after: String = null after: String = null
): [String!]! ): [String!]!
getUsernamesAndFollowing(
userId: Int!
matchString: String = null
limit: Int = 100
after: String = null
): UsernamesAndFollowingResponse!
getPlayTime(userId: Int!): UserPlayTimeGQL! getPlayTime(userId: Int!): UserPlayTimeGQL!
getUserVideos( getUserVideos(
userId: Int = null userId: Int = null
@@ -38,6 +51,11 @@ type Query {
getUserTags: [TagGQL!]! getUserTags: [TagGQL!]!
getVideo(videoId: Int!, debuggingJson: JSON = null): VideoGQL! getVideo(videoId: Int!, debuggingJson: JSON = null): VideoGQL!
getVideos(videoIds: [Int!]!): [VideoGQL!]! getVideos(videoIds: [Int!]!): [VideoGQL!]!
getFeedVideos(
limit: Int! = 5
after: String = null
filters: VideoFilterInput = null
): VideoHistoryGQL!
} }
type AggregateResultGQL { type AggregateResultGQL {
@@ -124,6 +142,7 @@ enum AlignedIntervalEnum {
MONTH MONTH
YEAR YEAR
WEEK WEEK
DAY
} }
input FilterInput @oneOf { input FilterInput @oneOf {
@@ -139,6 +158,8 @@ input FilterInput @oneOf {
shotDirection: [ShotDirectionEnum!] shotDirection: [ShotDirectionEnum!]
videoId: [Int!] videoId: [Int!]
userId: [Int!] userId: [Int!]
username: [String!]
fargoRating: FloatRangeFilter
make: [Boolean!] make: [Boolean!]
tags: [VideoTagInput!] tags: [VideoTagInput!]
annotations: [ShotAnnotationInput!] annotations: [ShotAnnotationInput!]
@@ -161,7 +182,10 @@ input FilterInput @oneOf {
targetPocketAngleDirection: [ShotDirectionEnum!] targetPocketAngleDirection: [ShotDirectionEnum!]
targetPocketAngle: FloatRangeFilter targetPocketAngle: FloatRangeFilter
missAngleInDegrees: FloatRangeFilter missAngleInDegrees: FloatRangeFilter
marginOfErrorInDegrees: FloatRangeFilter
createdAt: DateRangeFilter createdAt: DateRangeFilter
totalDistance: FloatRangeFilter
runLength: FloatRangeFilter
} }
input FloatRangeFilter { input FloatRangeFilter {
@@ -281,6 +305,7 @@ type PocketingIntentionFeaturesGQL {
difficulty: Float difficulty: Float
targetPocketAngle: Float targetPocketAngle: Float
targetPocketAngleDirection: ShotDirectionEnum targetPocketAngleDirection: ShotDirectionEnum
marginOfErrorInDegrees: Float
backcut: Boolean backcut: Boolean
} }
@@ -319,10 +344,13 @@ type UserGQL {
firebaseUid: String! firebaseUid: String!
username: String! username: String!
isAdmin: Boolean! isAdmin: Boolean!
fargoRating: Int
activeVideoId: Int activeVideoId: Int
profileImageUri: String profileImageUri: String
createdAt: DateTime createdAt: DateTime
updatedAt: DateTime updatedAt: DateTime
following: [Int!]
followers: [Int!]
} }
type ShotAnnotationGQL { type ShotAnnotationGQL {
@@ -489,6 +517,33 @@ type VideoProcessingStatusGQL {
updatedAt: DateTime updatedAt: DateTime
} }
input GetShotsOrdering {
orderings: [ShotsOrderingComponent!]!
}
input ShotsOrderingComponent @oneOf {
videoCreation: DatetimeShotOrdering
marginOfError: FloatShotOrdering
videoId: IntShotOrdering
startFrame: IntShotOrdering
runLength: IntShotOrdering
}
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 { input GetShotsPagination {
createdAfter: CreatedAfter! createdAfter: CreatedAfter!
startFrameAfter: Int! startFrameAfter: Int!
@@ -499,6 +554,12 @@ input CreatedAfter @oneOf {
createdAt: DateTime createdAt: DateTime
} }
type UsernamesAndFollowingResponse {
usernames: [String!]!
following: [Int!]!
followers: [Int!]!
}
type UserPlayTimeGQL { type UserPlayTimeGQL {
totalSeconds: Float! totalSeconds: Float!
} }
@@ -540,10 +601,17 @@ type Mutation {
annotationName: String! annotationName: String!
notes: String = null notes: String = null
): AddShotAnnotationReturn! ): AddShotAnnotationReturn!
updateShotAnnotations(
shotId: Int!
annotations: [UpdateAnnotationInputGQL!]!
): UpdateShotAnnotationReturn!
getProfileImageUploadLink( getProfileImageUploadLink(
fileExt: String = ".png" fileExt: String = ".png"
): GetProfileUploadLinkReturn! ): GetProfileUploadLinkReturn!
editProfileImageUri(profileImageUri: String!): UserGQL! editProfileImageUri(profileImageUri: String!): UserGQL!
editUser(input: EditUserInputGQL!): UserGQL!
followUser(followedUserId: Int!): UserGQL!
unfollowUser(followedUserId: Int!): UserGQL!
createUploadStream( createUploadStream(
videoMetadata: VideoMetadataInput! videoMetadata: VideoMetadataInput!
): CreateUploadStreamReturn! ): CreateUploadStreamReturn!
@@ -593,6 +661,27 @@ type OtherErrorNeedsNote {
msg: String msg: String
} }
type UpdateShotAnnotationReturn {
value: SuccessfulUpdateUpdateShotAnnotationErrors!
}
union SuccessfulUpdateUpdateShotAnnotationErrors =
SuccessfulUpdate
| UpdateShotAnnotationErrors
type SuccessfulUpdate {
value: Boolean!
}
type UpdateShotAnnotationErrors {
error: DoesNotOwnShotErr
}
input UpdateAnnotationInputGQL {
name: String!
notes: String = null
}
type GetProfileUploadLinkReturn { type GetProfileUploadLinkReturn {
value: UploadLinkGetProfileUploadLinkErrors! value: UploadLinkGetProfileUploadLinkErrors!
} }
@@ -619,6 +708,11 @@ type TooManyProfileImageUploadsErr {
linksRequested: Int! linksRequested: Int!
} }
input EditUserInputGQL {
username: String = null
fargoRating: Int = null
}
type CreateUploadStreamReturn { type CreateUploadStreamReturn {
videoId: Int! videoId: Int!
} }
@@ -629,7 +723,6 @@ input VideoMetadataInput {
endTime: DateTime = null endTime: DateTime = null
gameType: String = null gameType: String = null
tableSize: Float = null tableSize: Float = null
uploadStreamMetadataInput: UploadStreamMetadataInput = null
lastIntendedSegmentBound: Int = null lastIntendedSegmentBound: Int = null
streamSegmentType: StreamSegmentTypeEnum = null streamSegmentType: StreamSegmentTypeEnum = null
endStream: Boolean! = false endStream: Boolean! = false
@@ -637,24 +730,6 @@ input VideoMetadataInput {
framesPerSecond: Float = null framesPerSecond: Float = null
} }
input UploadStreamMetadataInput {
deviceType: DeviceTypeEnum = null
osVersion: String = null
appVersion: String = null
browserName: String = null
browserVersion: String = null
locale: String = null
timezone: String = null
networkType: String = null
ipAddress: String = null
}
enum DeviceTypeEnum {
IOS
ANDROID
BROWSER
}
input VideoResolution { input VideoResolution {
width: Int! width: Int!
height: Int! height: Int!