This commit is contained in:
parent
0defdf0892
commit
49d1dc0f4d
@ -183,7 +183,7 @@ export type DoesNotOwnShotErrOtherErrorNeedsNote =
|
|||||||
| OtherErrorNeedsNote;
|
| OtherErrorNeedsNote;
|
||||||
|
|
||||||
export type EditUserInputGql = {
|
export type EditUserInputGql = {
|
||||||
fargoRating?: InputMaybe<Scalars["String"]["input"]>;
|
fargoRating?: InputMaybe<Scalars["Int"]["input"]>;
|
||||||
username?: InputMaybe<Scalars["String"]["input"]>;
|
username?: InputMaybe<Scalars["String"]["input"]>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
743
src/schema.gql
743
src/schema.gql
@ -0,0 +1,743 @@
|
|||||||
|
type Query {
|
||||||
|
getAggregatedShotMetrics(
|
||||||
|
aggregateInput: AggregateInputGQL!
|
||||||
|
): [AggregateResultGQL!]!
|
||||||
|
getBucketSet(keyName: String!): BucketSetGQL
|
||||||
|
getDeployedConfig: DeployedConfigGQL!
|
||||||
|
waitFor(duration: Float!): Float!
|
||||||
|
getVideoMakePercentageIntervals(
|
||||||
|
videoId: ID!
|
||||||
|
intervalDuration: Int! = 300
|
||||||
|
): [MakePercentageIntervalGQL!]!
|
||||||
|
getShotsWithMetadata(
|
||||||
|
filterInput: FilterInput!
|
||||||
|
ids: [Int!] = null
|
||||||
|
shotsPagination: GetShotsPagination = null
|
||||||
|
limit: Int! = 500
|
||||||
|
): GetShotsResult!
|
||||||
|
getShots(
|
||||||
|
filterInput: FilterInput!
|
||||||
|
shotsPagination: GetShotsPagination = null
|
||||||
|
limit: Int! = 500
|
||||||
|
): [ShotGQL!]!
|
||||||
|
getShotsByIds(ids: [Int!]!): [ShotGQL!]!
|
||||||
|
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
|
||||||
|
getUser(userId: Int!): UserGQL
|
||||||
|
getLoggedInUser: UserGQL
|
||||||
|
getUsernames(
|
||||||
|
matchString: String = null
|
||||||
|
limit: Int = null
|
||||||
|
after: String = null
|
||||||
|
): [String!]!
|
||||||
|
getPlayTime(userId: Int!): UserPlayTimeGQL!
|
||||||
|
getUserVideos(
|
||||||
|
userId: Int = null
|
||||||
|
limit: Int! = 5
|
||||||
|
after: String = null
|
||||||
|
filters: VideoFilterInput = null
|
||||||
|
): VideoHistoryGQL!
|
||||||
|
getUserTags: [TagGQL!]!
|
||||||
|
getVideo(videoId: Int!, debuggingJson: JSON = null): VideoGQL!
|
||||||
|
getVideos(videoIds: [Int!]!): [VideoGQL!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type AggregateResultGQL {
|
||||||
|
aggregationIdentifiers: [AggregationIdentifierGQL!]!
|
||||||
|
targetMetrics: TargetMetricsGQL!
|
||||||
|
}
|
||||||
|
|
||||||
|
type AggregationIdentifierGQL {
|
||||||
|
featureName: String!
|
||||||
|
groupName: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type TargetMetricsGQL {
|
||||||
|
count: Int!
|
||||||
|
makePercentage: Float
|
||||||
|
averageDifficulty: Float
|
||||||
|
spinTypeCounts: SpinTypeCountsGQL
|
||||||
|
shotDirectionCounts: ShotDirectionCountsGQL
|
||||||
|
}
|
||||||
|
|
||||||
|
type SpinTypeCountsGQL {
|
||||||
|
follow: Int!
|
||||||
|
draw: Int!
|
||||||
|
center: Int!
|
||||||
|
unknown: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
type ShotDirectionCountsGQL {
|
||||||
|
left: Int!
|
||||||
|
right: Int!
|
||||||
|
straight: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
input AggregateInputGQL {
|
||||||
|
aggregations: [AggregationInput!]!
|
||||||
|
filterInput: FilterInput
|
||||||
|
}
|
||||||
|
|
||||||
|
input AggregationInput @oneOf {
|
||||||
|
bucketSet: BucketSetInputGQL
|
||||||
|
enum: EnumAggregation
|
||||||
|
datetimeRange: DatetimeRangeAggregationInput
|
||||||
|
}
|
||||||
|
|
||||||
|
input BucketSetInputGQL {
|
||||||
|
feature: String!
|
||||||
|
buckets: [BucketInputGQL!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
input BucketInputGQL {
|
||||||
|
rangeKey: String!
|
||||||
|
lowerBound: Float!
|
||||||
|
}
|
||||||
|
|
||||||
|
input EnumAggregation {
|
||||||
|
feature: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
input DatetimeRangeAggregationInput {
|
||||||
|
startDatetime: DateTime = null
|
||||||
|
endDatetime: DateTime = null
|
||||||
|
interval: TimeInterval!
|
||||||
|
feature: String! = "created_at"
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
Date with time (isoformat)
|
||||||
|
"""
|
||||||
|
scalar DateTime
|
||||||
|
|
||||||
|
input TimeInterval @oneOf {
|
||||||
|
timedelta: TimeDeltaGQL
|
||||||
|
aligned: AlignedIntervalEnum
|
||||||
|
}
|
||||||
|
|
||||||
|
input TimeDeltaGQL {
|
||||||
|
days: Int = 0
|
||||||
|
weeks: Int = 0
|
||||||
|
months: Int = 0
|
||||||
|
years: Int = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
enum AlignedIntervalEnum {
|
||||||
|
MONTH
|
||||||
|
YEAR
|
||||||
|
WEEK
|
||||||
|
DAY
|
||||||
|
}
|
||||||
|
|
||||||
|
input FilterInput @oneOf {
|
||||||
|
andFilters: [FilterInput!]
|
||||||
|
orFilters: [FilterInput!]
|
||||||
|
notFilter: FilterInput
|
||||||
|
cueObjectDistance: FloatRangeFilter
|
||||||
|
targetPocketDistance: FloatRangeFilter
|
||||||
|
cueObjectAngle: FloatRangeFilter
|
||||||
|
cueBallSpeed: FloatRangeFilter
|
||||||
|
difficulty: FloatRangeFilter
|
||||||
|
intendedPocketType: [PocketEnum!]
|
||||||
|
shotDirection: [ShotDirectionEnum!]
|
||||||
|
videoId: [Int!]
|
||||||
|
userId: [Int!]
|
||||||
|
username: [String!]
|
||||||
|
make: [Boolean!]
|
||||||
|
tags: [VideoTagInput!]
|
||||||
|
annotations: [ShotAnnotationInput!]
|
||||||
|
isStraight: [Boolean!]
|
||||||
|
isRight: [Boolean!]
|
||||||
|
isLeft: [Boolean!]
|
||||||
|
isLeftMiss: [Boolean!]
|
||||||
|
isRightMiss: [Boolean!]
|
||||||
|
isDirect: [Boolean!]
|
||||||
|
tableSize: FloatRangeFilter
|
||||||
|
bankAngle: FloatRangeFilter
|
||||||
|
bankDistance: FloatRangeFilter
|
||||||
|
kickAngle: FloatRangeFilter
|
||||||
|
kickDistance: FloatRangeFilter
|
||||||
|
cueAngleAfterObject: FloatRangeFilter
|
||||||
|
spinType: [SpinTypeEnum!]
|
||||||
|
cueSpeedAfterObject: FloatRangeFilter
|
||||||
|
falsePositiveScore: FloatRangeFilter
|
||||||
|
backcut: [Boolean!]
|
||||||
|
targetPocketAngleDirection: [ShotDirectionEnum!]
|
||||||
|
targetPocketAngle: FloatRangeFilter
|
||||||
|
missAngleInDegrees: FloatRangeFilter
|
||||||
|
marginOfErrorInDegrees: FloatRangeFilter
|
||||||
|
createdAt: DateRangeFilter
|
||||||
|
}
|
||||||
|
|
||||||
|
input FloatRangeFilter {
|
||||||
|
lessThan: Float = null
|
||||||
|
greaterThanEqualTo: Float = null
|
||||||
|
greaterThan: Float = null
|
||||||
|
includeOnNone: Boolean! = false
|
||||||
|
lessThanInclusive: Boolean! = false
|
||||||
|
greaterThanInclusive: Boolean! = true
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PocketEnum {
|
||||||
|
CORNER
|
||||||
|
SIDE
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ShotDirectionEnum {
|
||||||
|
LEFT
|
||||||
|
RIGHT
|
||||||
|
STRAIGHT
|
||||||
|
}
|
||||||
|
|
||||||
|
input VideoTagInput {
|
||||||
|
tagClasses: [VideoTagClassInput!]! = []
|
||||||
|
name: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
input VideoTagClassInput {
|
||||||
|
name: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
input ShotAnnotationInput {
|
||||||
|
name: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
enum SpinTypeEnum {
|
||||||
|
DRAW
|
||||||
|
FOLLOW
|
||||||
|
CENTER
|
||||||
|
UNKNOWN
|
||||||
|
}
|
||||||
|
|
||||||
|
input DateRangeFilter {
|
||||||
|
lessThan: Date = null
|
||||||
|
greaterThanEqualTo: Date = null
|
||||||
|
greaterThan: Date = null
|
||||||
|
includeOnNone: Boolean! = false
|
||||||
|
lessThanInclusive: Boolean! = false
|
||||||
|
greaterThanInclusive: Boolean! = true
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
Date (isoformat)
|
||||||
|
"""
|
||||||
|
scalar Date
|
||||||
|
|
||||||
|
type BucketSetGQL {
|
||||||
|
keyName: String!
|
||||||
|
feature: String!
|
||||||
|
buckets: [BucketGQL!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type BucketGQL {
|
||||||
|
rangeKey: String!
|
||||||
|
lowerBound: Float!
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeployedConfigGQL {
|
||||||
|
allowNewUsers: Boolean!
|
||||||
|
firebase: Boolean!
|
||||||
|
devMode: Boolean!
|
||||||
|
environment: String!
|
||||||
|
minimumAllowedAppVersion: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type MakePercentageIntervalGQL {
|
||||||
|
makePercentage: Float!
|
||||||
|
elapsedTime: Float!
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetShotsResult {
|
||||||
|
shots: [ShotGQL!]!
|
||||||
|
count: Int
|
||||||
|
ids: [Int!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type ShotGQL {
|
||||||
|
id: Int!
|
||||||
|
videoId: Int!
|
||||||
|
startFrame: Int!
|
||||||
|
endFrame: Int!
|
||||||
|
createdAt: DateTime
|
||||||
|
updatedAt: DateTime
|
||||||
|
cueObjectFeatures: CueObjectFeaturesGQL
|
||||||
|
pocketingIntentionFeatures: PocketingIntentionFeaturesGQL
|
||||||
|
pocketingIntentionInfo: PocketingIntentionInfoGQL
|
||||||
|
bankFeatures: BankFeaturesGQL
|
||||||
|
serializedShotPaths: SerializedShotPathsGQL
|
||||||
|
user: UserGQL
|
||||||
|
annotations: [ShotAnnotationGQL!]!
|
||||||
|
falsePositiveScore: Float
|
||||||
|
video: VideoGQL
|
||||||
|
}
|
||||||
|
|
||||||
|
type CueObjectFeaturesGQL {
|
||||||
|
cueObjectDistance: Float
|
||||||
|
cueObjectAngle: Float
|
||||||
|
cueBallSpeed: Float
|
||||||
|
shotDirection: ShotDirectionEnum
|
||||||
|
spinType: SpinTypeEnum
|
||||||
|
}
|
||||||
|
|
||||||
|
type PocketingIntentionFeaturesGQL {
|
||||||
|
targetPocketDistance: Float
|
||||||
|
make: Boolean
|
||||||
|
intendedPocketType: PocketEnum
|
||||||
|
difficulty: Float
|
||||||
|
targetPocketAngle: Float
|
||||||
|
targetPocketAngleDirection: ShotDirectionEnum
|
||||||
|
marginOfErrorInDegrees: Float
|
||||||
|
backcut: Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
type PocketingIntentionInfoGQL {
|
||||||
|
ballId: Int!
|
||||||
|
pocketId: PocketIdentifier!
|
||||||
|
pathMetadataIndex: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PocketIdentifier {
|
||||||
|
TOP_LEFT
|
||||||
|
TOP_SIDE
|
||||||
|
TOP_RIGHT
|
||||||
|
BOTTOM_LEFT
|
||||||
|
BOTTOM_SIDE
|
||||||
|
BOTTOM_RIGHT
|
||||||
|
}
|
||||||
|
|
||||||
|
type BankFeaturesGQL {
|
||||||
|
wallsHit: [WallTypeEnum!]!
|
||||||
|
bankAngle: Float!
|
||||||
|
distance: Float!
|
||||||
|
}
|
||||||
|
|
||||||
|
enum WallTypeEnum {
|
||||||
|
LONG
|
||||||
|
SHORT
|
||||||
|
}
|
||||||
|
|
||||||
|
type SerializedShotPathsGQL {
|
||||||
|
b64EncodedBuffer: String
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserGQL {
|
||||||
|
id: Int!
|
||||||
|
firebaseUid: String!
|
||||||
|
username: String!
|
||||||
|
isAdmin: Boolean!
|
||||||
|
fargoRating: Int
|
||||||
|
activeVideoId: Int
|
||||||
|
profileImageUri: String
|
||||||
|
createdAt: DateTime
|
||||||
|
updatedAt: DateTime
|
||||||
|
}
|
||||||
|
|
||||||
|
type ShotAnnotationGQL {
|
||||||
|
shotId: Int!
|
||||||
|
type: ShotAnnotationTypeGQL!
|
||||||
|
creator: UserGQL!
|
||||||
|
notes: String!
|
||||||
|
errorDefault: Boolean!
|
||||||
|
createdAt: DateTime
|
||||||
|
updatedAt: DateTime
|
||||||
|
}
|
||||||
|
|
||||||
|
type ShotAnnotationTypeGQL {
|
||||||
|
id: Int!
|
||||||
|
name: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type VideoGQL {
|
||||||
|
id: Int!
|
||||||
|
owner: UserGQL
|
||||||
|
name: String
|
||||||
|
screenshotUri: String
|
||||||
|
totalShotsMade: Int!
|
||||||
|
totalShots: Int!
|
||||||
|
makePercentage: Float!
|
||||||
|
medianRun: Float
|
||||||
|
averageTimeBetweenShots: Float
|
||||||
|
createdAt: DateTime
|
||||||
|
updatedAt: DateTime
|
||||||
|
shots: [ShotGQL!]!
|
||||||
|
startTime: DateTime
|
||||||
|
endTime: DateTime
|
||||||
|
elapsedTime: Float
|
||||||
|
framesPerSecond: Float!
|
||||||
|
tableSize: Float!
|
||||||
|
stream: UploadStreamGQL
|
||||||
|
playlist: HLSPlaylistGQL
|
||||||
|
tags: [VideoTag!]!
|
||||||
|
currentHomography: HomographyInfoGQL
|
||||||
|
homographyHistory: [HomographyInfoGQL!]!
|
||||||
|
currentProcessing: VideoProcessingGQL
|
||||||
|
}
|
||||||
|
|
||||||
|
type UploadStreamGQL {
|
||||||
|
id: ID!
|
||||||
|
linksRequested: Int!
|
||||||
|
uploadsCompleted: Int!
|
||||||
|
segmentProcessingCursor: Int!
|
||||||
|
lastIntendedSegmentBound: Int
|
||||||
|
isCompleted: Boolean!
|
||||||
|
initPlaylistUploadStatus: InitPlaylistUploadStatusEnum
|
||||||
|
lowestUnuploadedSegmentIndex: Int!
|
||||||
|
uploadCompletionCursor: Int!
|
||||||
|
errors: [StreamErrorGQL!]!
|
||||||
|
createdAt: DateTime!
|
||||||
|
updatedAt: DateTime!
|
||||||
|
segments: [UploadSegmentGQL!]!
|
||||||
|
resolution: VideoResolutionGQL!
|
||||||
|
streamSegmentType: StreamSegmentTypeEnum!
|
||||||
|
}
|
||||||
|
|
||||||
|
enum InitPlaylistUploadStatusEnum {
|
||||||
|
NOT_APPLICABLE
|
||||||
|
NOT_UPLOADED
|
||||||
|
UPLOADED
|
||||||
|
}
|
||||||
|
|
||||||
|
type StreamErrorGQL {
|
||||||
|
message: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type UploadSegmentGQL {
|
||||||
|
segmentIndex: Int!
|
||||||
|
uploaded: Boolean!
|
||||||
|
valid: Boolean!
|
||||||
|
endFrameIndex: Int
|
||||||
|
framesPerSecond: Float
|
||||||
|
durationInSeconds: Float
|
||||||
|
linksRequested: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
type VideoResolutionGQL {
|
||||||
|
width: Int
|
||||||
|
height: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
enum StreamSegmentTypeEnum {
|
||||||
|
FRAGMENTED_MP4
|
||||||
|
RB_CHUNKED_MP4
|
||||||
|
}
|
||||||
|
|
||||||
|
type HLSPlaylistGQL {
|
||||||
|
videoId: Int!
|
||||||
|
m3u8Text: String!
|
||||||
|
segmentDurations: [Float!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type VideoTag {
|
||||||
|
tagClasses: [VideoTagClass!]!
|
||||||
|
name: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type VideoTagClass {
|
||||||
|
name: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type HomographyInfoGQL {
|
||||||
|
frameIndex: Int!
|
||||||
|
crop: BoundingBoxGQL!
|
||||||
|
pockets: [BoundingBoxGQL!]!
|
||||||
|
sourcePoints: PocketPointsGQL!
|
||||||
|
destPoints: PocketPointsGQL!
|
||||||
|
}
|
||||||
|
|
||||||
|
type BoundingBoxGQL {
|
||||||
|
left: Float!
|
||||||
|
top: Float!
|
||||||
|
width: Float!
|
||||||
|
height: Float!
|
||||||
|
}
|
||||||
|
|
||||||
|
type PocketPointsGQL {
|
||||||
|
topLeft: IntPoint2D!
|
||||||
|
topSide: IntPoint2D!
|
||||||
|
topRight: IntPoint2D!
|
||||||
|
bottomLeft: IntPoint2D!
|
||||||
|
bottomSide: IntPoint2D!
|
||||||
|
bottomRight: IntPoint2D!
|
||||||
|
}
|
||||||
|
|
||||||
|
type IntPoint2D {
|
||||||
|
x: Int!
|
||||||
|
y: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
type VideoProcessingGQL {
|
||||||
|
errors: [VideoProcessingErrorGQL!]!
|
||||||
|
status: ProcessingStatusEnum!
|
||||||
|
statuses: [VideoProcessingStatusGQL!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type VideoProcessingErrorGQL {
|
||||||
|
message: String!
|
||||||
|
startSegmentIndex: Int
|
||||||
|
endSegmentIndex: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ProcessingStatusEnum {
|
||||||
|
STARTED
|
||||||
|
FAILED
|
||||||
|
SUCCEEDED
|
||||||
|
SUSPENDED
|
||||||
|
CREATED
|
||||||
|
QUEUED
|
||||||
|
RUNNING
|
||||||
|
REEXTRACTING_FEATURES
|
||||||
|
}
|
||||||
|
|
||||||
|
type VideoProcessingStatusGQL {
|
||||||
|
status: ProcessingStatusEnum!
|
||||||
|
appVersion: String!
|
||||||
|
sequenceId: Int!
|
||||||
|
createdAt: DateTime
|
||||||
|
updatedAt: DateTime
|
||||||
|
}
|
||||||
|
|
||||||
|
input GetShotsPagination {
|
||||||
|
createdAfter: CreatedAfter!
|
||||||
|
startFrameAfter: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
input CreatedAfter @oneOf {
|
||||||
|
videoId: Int
|
||||||
|
createdAt: DateTime
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserPlayTimeGQL {
|
||||||
|
totalSeconds: Float!
|
||||||
|
}
|
||||||
|
|
||||||
|
type VideoHistoryGQL {
|
||||||
|
videos: [VideoGQL!]!
|
||||||
|
pageInfo: PageInfoGQL!
|
||||||
|
}
|
||||||
|
|
||||||
|
type PageInfoGQL {
|
||||||
|
hasNextPage: Boolean!
|
||||||
|
endCursor: String
|
||||||
|
}
|
||||||
|
|
||||||
|
input VideoFilterInput {
|
||||||
|
isStreamCompleted: Boolean = null
|
||||||
|
requireCursorCompletion: Boolean! = true
|
||||||
|
}
|
||||||
|
|
||||||
|
type TagGQL {
|
||||||
|
name: String!
|
||||||
|
id: Int!
|
||||||
|
group: String
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf).
|
||||||
|
"""
|
||||||
|
scalar JSON
|
||||||
|
@specifiedBy(
|
||||||
|
url: "https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Mutation {
|
||||||
|
createBucketSet(params: CreateBucketSetInput!): BucketSetGQL!
|
||||||
|
setLoggerLevel(path: String!, level: String!): Boolean!
|
||||||
|
addAnnotationToShot(
|
||||||
|
shotId: Int!
|
||||||
|
annotationName: String!
|
||||||
|
notes: String = null
|
||||||
|
): AddShotAnnotationReturn!
|
||||||
|
updateShotAnnotations(
|
||||||
|
shotId: Int!
|
||||||
|
annotations: [UpdateAnnotationInputGQL!]!
|
||||||
|
): UpdateShotAnnotationReturn!
|
||||||
|
getProfileImageUploadLink(
|
||||||
|
fileExt: String = ".png"
|
||||||
|
): GetProfileUploadLinkReturn!
|
||||||
|
editProfileImageUri(profileImageUri: String!): UserGQL!
|
||||||
|
editUser(input: EditUserInputGQL!): UserGQL!
|
||||||
|
createUploadStream(
|
||||||
|
videoMetadata: VideoMetadataInput!
|
||||||
|
): CreateUploadStreamReturn!
|
||||||
|
getUploadLink(videoId: Int!, segmentIndex: Int!): GetUploadLinkReturn!
|
||||||
|
getHlsInitUploadLink(videoId: Int!): GetUploadLinkReturn!
|
||||||
|
setSegmentDuration(
|
||||||
|
videoId: Int!
|
||||||
|
segmentIndex: Int!
|
||||||
|
duration: Float!
|
||||||
|
): Boolean!
|
||||||
|
editUploadStream(videoId: Int!, videoMetadata: VideoMetadataInput!): Boolean!
|
||||||
|
deleteVideo(videoId: Int!): Boolean!
|
||||||
|
}
|
||||||
|
|
||||||
|
input CreateBucketSetInput {
|
||||||
|
keyName: String!
|
||||||
|
feature: String!
|
||||||
|
buckets: [BucketInputGQL!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddShotAnnotationReturn {
|
||||||
|
value: SuccessfulAddAddShotAnnotationErrors!
|
||||||
|
}
|
||||||
|
|
||||||
|
union SuccessfulAddAddShotAnnotationErrors =
|
||||||
|
SuccessfulAdd
|
||||||
|
| AddShotAnnotationErrors
|
||||||
|
|
||||||
|
type SuccessfulAdd {
|
||||||
|
value: Boolean!
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddShotAnnotationErrors {
|
||||||
|
error: DoesNotOwnShotErrOtherErrorNeedsNote!
|
||||||
|
}
|
||||||
|
|
||||||
|
union DoesNotOwnShotErrOtherErrorNeedsNote =
|
||||||
|
DoesNotOwnShotErr
|
||||||
|
| OtherErrorNeedsNote
|
||||||
|
|
||||||
|
type DoesNotOwnShotErr {
|
||||||
|
shotId: Int!
|
||||||
|
msg: String
|
||||||
|
}
|
||||||
|
|
||||||
|
type OtherErrorNeedsNote {
|
||||||
|
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 {
|
||||||
|
value: UploadLinkGetProfileUploadLinkErrors!
|
||||||
|
}
|
||||||
|
|
||||||
|
union UploadLinkGetProfileUploadLinkErrors =
|
||||||
|
UploadLink
|
||||||
|
| GetProfileUploadLinkErrors
|
||||||
|
|
||||||
|
type UploadLink {
|
||||||
|
uploadUrl: String!
|
||||||
|
headers: [Header]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type Header {
|
||||||
|
key: String!
|
||||||
|
value: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetProfileUploadLinkErrors {
|
||||||
|
error: TooManyProfileImageUploadsErr!
|
||||||
|
}
|
||||||
|
|
||||||
|
type TooManyProfileImageUploadsErr {
|
||||||
|
linksRequested: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
input EditUserInputGQL {
|
||||||
|
username: String = null
|
||||||
|
fargoRating: Int = null
|
||||||
|
}
|
||||||
|
|
||||||
|
type CreateUploadStreamReturn {
|
||||||
|
videoId: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
input VideoMetadataInput {
|
||||||
|
videoName: String = null
|
||||||
|
startTime: DateTime = null
|
||||||
|
endTime: DateTime = null
|
||||||
|
gameType: String = null
|
||||||
|
tableSize: Float = null
|
||||||
|
uploadStreamMetadataInput: UploadStreamMetadataInput = null
|
||||||
|
lastIntendedSegmentBound: Int = null
|
||||||
|
streamSegmentType: StreamSegmentTypeEnum = null
|
||||||
|
endStream: Boolean! = false
|
||||||
|
resolution: VideoResolution = 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 {
|
||||||
|
width: Int!
|
||||||
|
height: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetUploadLinkReturn {
|
||||||
|
value: UploadLinkGetUploadLinkErrors!
|
||||||
|
stream: UploadStreamGQL
|
||||||
|
}
|
||||||
|
|
||||||
|
union UploadLinkGetUploadLinkErrors = UploadLink | GetUploadLinkErrors
|
||||||
|
|
||||||
|
type GetUploadLinkErrors {
|
||||||
|
error: MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailedErrNoInitForChunkedUploadErrTooManyProfileImageUploadsErrInitUploadAlreadyCompletedErrTooManyInitUploadsErr!
|
||||||
|
}
|
||||||
|
|
||||||
|
union MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailedErrNoInitForChunkedUploadErrTooManyProfileImageUploadsErrInitUploadAlreadyCompletedErrTooManyInitUploadsErr =
|
||||||
|
MustHaveSetForUploadLinkErr
|
||||||
|
| SegmentAlreadyUploadedErr
|
||||||
|
| ProcessingFailedErr
|
||||||
|
| NoInitForChunkedUploadErr
|
||||||
|
| TooManyProfileImageUploadsErr
|
||||||
|
| InitUploadAlreadyCompletedErr
|
||||||
|
| TooManyInitUploadsErr
|
||||||
|
|
||||||
|
type MustHaveSetForUploadLinkErr {
|
||||||
|
resolution: Boolean
|
||||||
|
framesPerSecond: Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
type SegmentAlreadyUploadedErr {
|
||||||
|
segmentId: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProcessingFailedErr {
|
||||||
|
processing: VideoProcessingGQL!
|
||||||
|
}
|
||||||
|
|
||||||
|
type NoInitForChunkedUploadErr {
|
||||||
|
segmentType: StreamSegmentTypeEnum!
|
||||||
|
}
|
||||||
|
|
||||||
|
type InitUploadAlreadyCompletedErr {
|
||||||
|
segmentType: StreamSegmentTypeEnum!
|
||||||
|
}
|
||||||
|
|
||||||
|
type TooManyInitUploadsErr {
|
||||||
|
linksRequested: Int!
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user