Compare commits

..

26 Commits

Author SHA1 Message Date
4f1a4c2cc1 Merge branch 'master' into mk/video-reaction
All checks were successful
Tests / Tests (pull_request) Successful in 6s
2025-03-19 15:14:45 -06:00
8fe84521c3 Add support for video reactions
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2025-03-19 14:14:23 -07: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
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 70303b9363, reversing
changes made to 7a9d2545c4.
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
7 changed files with 279 additions and 6 deletions

View File

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

View File

@@ -2153,6 +2153,7 @@ export type Mutation = {
getHlsInitUploadLink: GetUploadLinkReturn; getHlsInitUploadLink: GetUploadLinkReturn;
getProfileImageUploadLink: GetProfileUploadLinkReturn; getProfileImageUploadLink: GetProfileUploadLinkReturn;
getUploadLink: GetUploadLinkReturn; getUploadLink: GetUploadLinkReturn;
reactToVideo: Scalars["Boolean"]["output"];
setLoggerLevel: Scalars["Boolean"]["output"]; setLoggerLevel: Scalars["Boolean"]["output"];
setSegmentDuration: Scalars["Boolean"]["output"]; setSegmentDuration: Scalars["Boolean"]["output"];
unfollowUser: UserGql; unfollowUser: UserGql;
@@ -2217,6 +2218,11 @@ export type MutationGetUploadLinkArgs = {
videoId: Scalars["Int"]["input"]; videoId: Scalars["Int"]["input"];
}; };
export type MutationReactToVideoArgs = {
reaction: ReactionEnum;
videoId: Scalars["Int"]["input"];
};
export type MutationSetLoggerLevelArgs = { export type MutationSetLoggerLevelArgs = {
level: Scalars["String"]["input"]; level: Scalars["String"]["input"];
path: Scalars["String"]["input"]; path: Scalars["String"]["input"];
@@ -2465,6 +2471,23 @@ export type QueryWaitForArgs = {
duration: Scalars["Float"]["input"]; duration: Scalars["Float"]["input"];
}; };
export enum ReactionEnum {
Bullseye = "BULLSEYE",
Heart = "HEART",
Hundred = "HUNDRED",
Like = "LIKE",
None = "NONE",
}
export type ReactionGql = {
__typename?: "ReactionGQL";
createdAt?: Maybe<Scalars["DateTime"]["output"]>;
reaction: ReactionEnum;
updatedAt?: Maybe<Scalars["DateTime"]["output"]>;
user: UserGql;
videoId: Scalars["Int"]["output"];
};
export type RequestedMedalsGql = { export type RequestedMedalsGql = {
__typename?: "RequestedMedalsGQL"; __typename?: "RequestedMedalsGQL";
dailyMakes50?: Maybe<MedalGql>; dailyMakes50?: Maybe<MedalGql>;
@@ -2556,6 +2579,12 @@ export type SegmentEndFramesGql = {
segmentEndFrames: Array<Scalars["Int"]["output"]>; segmentEndFrames: Array<Scalars["Int"]["output"]>;
}; };
export type SegmentInfo = {
__typename?: "SegmentInfo";
index: Scalars["Int"]["output"];
time: Scalars["Float"]["output"];
};
export type SegmentStartTimesGql = { export type SegmentStartTimesGql = {
__typename?: "SegmentStartTimesGQL"; __typename?: "SegmentStartTimesGQL";
id: Scalars["Int"]["output"]; id: Scalars["Int"]["output"];
@@ -2608,6 +2637,7 @@ export type ShotGql = {
createdAt?: Maybe<Scalars["DateTime"]["output"]>; createdAt?: Maybe<Scalars["DateTime"]["output"]>;
cueObjectFeatures?: Maybe<CueObjectFeaturesGql>; cueObjectFeatures?: Maybe<CueObjectFeaturesGql>;
endFrame: Scalars["Int"]["output"]; endFrame: Scalars["Int"]["output"];
endSegment: SegmentInfo;
endTime: Scalars["Float"]["output"]; endTime: Scalars["Float"]["output"];
falsePositiveScore?: Maybe<Scalars["Float"]["output"]>; falsePositiveScore?: Maybe<Scalars["Float"]["output"]>;
id: Scalars["Int"]["output"]; id: Scalars["Int"]["output"];
@@ -2617,6 +2647,7 @@ export type ShotGql = {
runFeatures?: Maybe<RunFeaturesGql>; runFeatures?: Maybe<RunFeaturesGql>;
serializedShotPaths?: Maybe<SerializedShotPathsGql>; serializedShotPaths?: Maybe<SerializedShotPathsGql>;
startFrame: Scalars["Int"]["output"]; startFrame: Scalars["Int"]["output"];
startSegment: SegmentInfo;
startTime: Scalars["Float"]["output"]; startTime: Scalars["Float"]["output"];
updatedAt?: Maybe<Scalars["DateTime"]["output"]>; updatedAt?: Maybe<Scalars["DateTime"]["output"]>;
user?: Maybe<UserGql>; user?: Maybe<UserGql>;
@@ -2708,13 +2739,19 @@ export type SuccessfulAddAddShotAnnotationErrors =
| AddShotAnnotationErrors | AddShotAnnotationErrors
| SuccessfulAdd; | SuccessfulAdd;
export type TagGql = { export type TagClassGql = {
__typename?: "TagGQL"; __typename?: "TagClassGQL";
group?: Maybe<Scalars["String"]["output"]>;
id: Scalars["Int"]["output"]; id: Scalars["Int"]["output"];
name: Scalars["String"]["output"]; name: Scalars["String"]["output"];
}; };
export type TagGql = {
__typename?: "TagGQL";
id: Scalars["Int"]["output"];
name: Scalars["String"]["output"];
tagClasses?: Maybe<Array<TagClassGql>>;
};
export type TargetMetricsGql = { export type TargetMetricsGql = {
__typename?: "TargetMetricsGQL"; __typename?: "TargetMetricsGQL";
averageDifficulty?: Maybe<Scalars["Float"]["output"]>; averageDifficulty?: Maybe<Scalars["Float"]["output"]>;
@@ -2869,6 +2906,7 @@ export type VideoFilterInput = {
export type VideoGql = { export type VideoGql = {
__typename?: "VideoGQL"; __typename?: "VideoGQL";
averageDifficulty?: Maybe<Scalars["Float"]["output"]>;
averageTimeBetweenShots?: Maybe<Scalars["Float"]["output"]>; averageTimeBetweenShots?: Maybe<Scalars["Float"]["output"]>;
createdAt?: Maybe<Scalars["DateTime"]["output"]>; createdAt?: Maybe<Scalars["DateTime"]["output"]>;
currentHomography?: Maybe<HomographyInfoGql>; currentHomography?: Maybe<HomographyInfoGql>;
@@ -2884,6 +2922,7 @@ export type VideoGql = {
owner?: Maybe<UserGql>; owner?: Maybe<UserGql>;
playlist?: Maybe<HlsPlaylistGql>; playlist?: Maybe<HlsPlaylistGql>;
private: Scalars["Boolean"]["output"]; private: Scalars["Boolean"]["output"];
reactions: Array<ReactionGql>;
screenshotUri?: Maybe<Scalars["String"]["output"]>; screenshotUri?: Maybe<Scalars["String"]["output"]>;
shots: Array<ShotGql>; shots: Array<ShotGql>;
startTime?: Maybe<Scalars["DateTime"]["output"]>; startTime?: Maybe<Scalars["DateTime"]["output"]>;
@@ -2906,6 +2945,7 @@ export type VideoMetadataInput = {
endStream?: Scalars["Boolean"]["input"]; endStream?: Scalars["Boolean"]["input"];
endTime?: InputMaybe<Scalars["DateTime"]["input"]>; endTime?: InputMaybe<Scalars["DateTime"]["input"]>;
framesPerSecond?: InputMaybe<Scalars["Float"]["input"]>; framesPerSecond?: InputMaybe<Scalars["Float"]["input"]>;
/** @deprecated `game_type` is deprecated. Use `tags` instead. */
gameType?: InputMaybe<Scalars["String"]["input"]>; gameType?: InputMaybe<Scalars["String"]["input"]>;
lastIntendedSegmentBound?: InputMaybe<Scalars["Int"]["input"]>; lastIntendedSegmentBound?: InputMaybe<Scalars["Int"]["input"]>;
private?: InputMaybe<Scalars["Boolean"]["input"]>; private?: InputMaybe<Scalars["Boolean"]["input"]>;
@@ -2913,6 +2953,8 @@ export type VideoMetadataInput = {
startTime?: InputMaybe<Scalars["DateTime"]["input"]>; startTime?: InputMaybe<Scalars["DateTime"]["input"]>;
streamSegmentType?: InputMaybe<StreamSegmentTypeEnum>; streamSegmentType?: InputMaybe<StreamSegmentTypeEnum>;
tableSize?: InputMaybe<Scalars["Float"]["input"]>; tableSize?: InputMaybe<Scalars["Float"]["input"]>;
/** A list of tags associated with the video. Replace `game_type` */
tags?: InputMaybe<Array<VideoTagInput>>;
videoName?: InputMaybe<Scalars["String"]["input"]>; videoName?: InputMaybe<Scalars["String"]["input"]>;
}; };
@@ -3029,6 +3071,8 @@ export type GetFeedQuery = {
totalShotsMade: number; totalShotsMade: number;
totalShots: number; totalShots: number;
makePercentage: number; makePercentage: number;
averageTimeBetweenShots?: number | null;
averageDifficulty?: number | null;
createdAt?: any | null; createdAt?: any | null;
updatedAt?: any | null; updatedAt?: any | null;
startTime?: any | null; startTime?: any | null;
@@ -3083,6 +3127,8 @@ export type VideoCardFieldsFragment = {
totalShotsMade: number; totalShotsMade: number;
totalShots: number; totalShots: number;
makePercentage: number; makePercentage: number;
averageTimeBetweenShots?: number | null;
averageDifficulty?: number | null;
createdAt?: any | null; createdAt?: any | null;
updatedAt?: any | null; updatedAt?: any | null;
startTime?: any | null; startTime?: any | null;
@@ -3140,6 +3186,8 @@ export type GetVideoFeedQuery = {
totalShotsMade: number; totalShotsMade: number;
totalShots: number; totalShots: number;
makePercentage: number; makePercentage: number;
averageTimeBetweenShots?: number | null;
averageDifficulty?: number | null;
createdAt?: any | null; createdAt?: any | null;
updatedAt?: any | null; updatedAt?: any | null;
startTime?: any | null; startTime?: any | null;
@@ -3380,6 +3428,29 @@ export type GetMedalsQuery = {
}; };
}; };
export type GetRunsForHighlightsQueryVariables = Exact<{
filterInput: RunFilterInput;
runIds?: InputMaybe<Array<Scalars["Int"]["input"]> | Scalars["Int"]["input"]>;
runsOrdering?: InputMaybe<GetRunsOrdering>;
}>;
export type GetRunsForHighlightsQuery = {
__typename?: "Query";
getRuns: {
__typename?: "GetRunsResult";
count?: number | null;
runIds: Array<number>;
runs: Array<{
__typename?: "RunGQL";
id: number;
runLength: number;
userId: number;
videoId: number;
shots: Array<{ __typename?: "ShotGQL"; videoId: number; id: number }>;
}>;
};
};
export type GetSerializedShotPathsQueryVariables = Exact<{ export type GetSerializedShotPathsQueryVariables = Exact<{
filterInput: FilterInput; filterInput: FilterInput;
}>; }>;
@@ -3507,6 +3578,8 @@ export type GetShotsWithMetadataFilterResultQuery = {
falsePositiveScore?: number | null; falsePositiveScore?: number | null;
createdAt?: any | null; createdAt?: any | null;
updatedAt?: any | null; updatedAt?: any | null;
startSegment: { __typename?: "SegmentInfo"; index: number; time: number };
endSegment: { __typename?: "SegmentInfo"; index: number; time: number };
user?: { __typename?: "UserGQL"; id: number } | null; user?: { __typename?: "UserGQL"; id: number } | null;
cueObjectFeatures?: { cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL"; __typename?: "CueObjectFeaturesGQL";
@@ -3574,6 +3647,8 @@ export type GetShotsWithMetadataQuery = {
falsePositiveScore?: number | null; falsePositiveScore?: number | null;
createdAt?: any | null; createdAt?: any | null;
updatedAt?: any | null; updatedAt?: any | null;
startSegment: { __typename?: "SegmentInfo"; index: number; time: number };
endSegment: { __typename?: "SegmentInfo"; index: number; time: number };
user?: { __typename?: "UserGQL"; id: number } | null; user?: { __typename?: "UserGQL"; id: number } | null;
cueObjectFeatures?: { cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL"; __typename?: "CueObjectFeaturesGQL";
@@ -3634,6 +3709,8 @@ export type GetShotsByIdsQuery = {
falsePositiveScore?: number | null; falsePositiveScore?: number | null;
createdAt?: any | null; createdAt?: any | null;
updatedAt?: any | null; updatedAt?: any | null;
startSegment: { __typename?: "SegmentInfo"; index: number; time: number };
endSegment: { __typename?: "SegmentInfo"; index: number; time: number };
user?: { __typename?: "UserGQL"; id: number } | null; user?: { __typename?: "UserGQL"; id: number } | null;
cueObjectFeatures?: { cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL"; __typename?: "CueObjectFeaturesGQL";
@@ -3683,6 +3760,8 @@ export type ShotWithAllFeaturesFragment = {
falsePositiveScore?: number | null; falsePositiveScore?: number | null;
createdAt?: any | null; createdAt?: any | null;
updatedAt?: any | null; updatedAt?: any | null;
startSegment: { __typename?: "SegmentInfo"; index: number; time: number };
endSegment: { __typename?: "SegmentInfo"; index: number; time: number };
user?: { __typename?: "UserGQL"; id: number } | null; user?: { __typename?: "UserGQL"; id: number } | null;
cueObjectFeatures?: { cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL"; __typename?: "CueObjectFeaturesGQL";
@@ -3745,6 +3824,8 @@ export type EditShotMutation = {
falsePositiveScore?: number | null; falsePositiveScore?: number | null;
createdAt?: any | null; createdAt?: any | null;
updatedAt?: any | null; updatedAt?: any | null;
startSegment: { __typename?: "SegmentInfo"; index: number; time: number };
endSegment: { __typename?: "SegmentInfo"; index: number; time: number };
user?: { __typename?: "UserGQL"; id: number } | null; user?: { __typename?: "UserGQL"; id: number } | null;
cueObjectFeatures?: { cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL"; __typename?: "CueObjectFeaturesGQL";
@@ -3927,7 +4008,16 @@ export type GetUserTagsQueryVariables = Exact<{ [key: string]: never }>;
export type GetUserTagsQuery = { export type GetUserTagsQuery = {
__typename?: "Query"; __typename?: "Query";
getUserTags: Array<{ __typename?: "TagGQL"; id: number; name: string }>; getUserTags: Array<{
__typename?: "TagGQL";
id: number;
name: string;
tagClasses?: Array<{
__typename?: "TagClassGQL";
id: number;
name: string;
}> | null;
}>;
}; };
export type FollowUserMutationVariables = Exact<{ export type FollowUserMutationVariables = Exact<{
@@ -4766,6 +4856,8 @@ export const VideoCardFieldsFragmentDoc = gql`
totalShotsMade totalShotsMade
totalShots totalShots
makePercentage makePercentage
averageTimeBetweenShots
averageDifficulty
createdAt createdAt
updatedAt updatedAt
startTime startTime
@@ -4811,6 +4903,14 @@ export const ShotWithAllFeaturesFragmentDoc = gql`
endFrame endFrame
startTime @client startTime @client
endTime @client endTime @client
startSegment @client {
index
time
}
endSegment @client {
index
time
}
user { user {
id id
} }
@@ -5712,6 +5812,100 @@ export type GetMedalsQueryResult = Apollo.QueryResult<
GetMedalsQuery, GetMedalsQuery,
GetMedalsQueryVariables GetMedalsQueryVariables
>; >;
export const GetRunsForHighlightsDocument = gql`
query GetRunsForHighlights(
$filterInput: RunFilterInput!
$runIds: [Int!] = null
$runsOrdering: GetRunsOrdering
) {
getRuns(
filterInput: $filterInput
runIds: $runIds
runsOrdering: $runsOrdering
) {
count
runs {
id
runLength
userId
videoId
shots {
videoId
id
}
}
runIds
}
}
`;
/**
* __useGetRunsForHighlightsQuery__
*
* To run a query within a React component, call `useGetRunsForHighlightsQuery` and pass it any options that fit your needs.
* When your component renders, `useGetRunsForHighlightsQuery` returns an object from Apollo Client that contains loading, error, and data properties
* you can use to render your UI.
*
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
*
* @example
* const { data, loading, error } = useGetRunsForHighlightsQuery({
* variables: {
* filterInput: // value for 'filterInput'
* runIds: // value for 'runIds'
* runsOrdering: // value for 'runsOrdering'
* },
* });
*/
export function useGetRunsForHighlightsQuery(
baseOptions: Apollo.QueryHookOptions<
GetRunsForHighlightsQuery,
GetRunsForHighlightsQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useQuery<
GetRunsForHighlightsQuery,
GetRunsForHighlightsQueryVariables
>(GetRunsForHighlightsDocument, options);
}
export function useGetRunsForHighlightsLazyQuery(
baseOptions?: Apollo.LazyQueryHookOptions<
GetRunsForHighlightsQuery,
GetRunsForHighlightsQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useLazyQuery<
GetRunsForHighlightsQuery,
GetRunsForHighlightsQueryVariables
>(GetRunsForHighlightsDocument, options);
}
export function useGetRunsForHighlightsSuspenseQuery(
baseOptions?: Apollo.SuspenseQueryHookOptions<
GetRunsForHighlightsQuery,
GetRunsForHighlightsQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useSuspenseQuery<
GetRunsForHighlightsQuery,
GetRunsForHighlightsQueryVariables
>(GetRunsForHighlightsDocument, options);
}
export type GetRunsForHighlightsQueryHookResult = ReturnType<
typeof useGetRunsForHighlightsQuery
>;
export type GetRunsForHighlightsLazyQueryHookResult = ReturnType<
typeof useGetRunsForHighlightsLazyQuery
>;
export type GetRunsForHighlightsSuspenseQueryHookResult = ReturnType<
typeof useGetRunsForHighlightsSuspenseQuery
>;
export type GetRunsForHighlightsQueryResult = Apollo.QueryResult<
GetRunsForHighlightsQuery,
GetRunsForHighlightsQueryVariables
>;
export const GetSerializedShotPathsDocument = gql` export const GetSerializedShotPathsDocument = gql`
query GetSerializedShotPaths($filterInput: FilterInput!) { query GetSerializedShotPaths($filterInput: FilterInput!) {
getShots(filterInput: $filterInput) { getShots(filterInput: $filterInput) {
@@ -6932,6 +7126,10 @@ export const GetUserTagsDocument = gql`
getUserTags { getUserTags {
id id
name name
tagClasses {
id
name
}
} }
} }
`; `;

View File

@@ -27,6 +27,8 @@ fragment VideoCardFields on VideoGQL {
totalShotsMade totalShotsMade
totalShots totalShots
makePercentage makePercentage
averageTimeBetweenShots
averageDifficulty
createdAt createdAt
updatedAt updatedAt
startTime startTime

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

@@ -0,0 +1,24 @@
query GetRunsForHighlights(
$filterInput: RunFilterInput!
$runIds: [Int!] = null
$runsOrdering: GetRunsOrdering
) {
getRuns(
filterInput: $filterInput
runIds: $runIds
runsOrdering: $runsOrdering
) {
count
runs {
id
runLength
userId
videoId
shots {
videoId
id
}
}
runIds
}
}

View File

@@ -139,6 +139,14 @@ fragment ShotWithAllFeatures on ShotGQL {
endFrame endFrame
startTime @client startTime @client
endTime @client endTime @client
startSegment @client {
index
time
}
endSegment @client {
index
time
}
user { user {
id id
} }

View File

@@ -79,6 +79,10 @@ query GetUserTags {
getUserTags { getUserTags {
id id
name name
tagClasses {
id
name
}
} }
} }

View File

@@ -462,6 +462,7 @@ type VideoGQL {
makePercentage: Float! makePercentage: Float!
medianRun: Float medianRun: Float
averageTimeBetweenShots: Float averageTimeBetweenShots: Float
averageDifficulty: Float
createdAt: DateTime createdAt: DateTime
updatedAt: DateTime updatedAt: DateTime
shots: [ShotGQL!]! shots: [ShotGQL!]!
@@ -477,6 +478,7 @@ type VideoGQL {
currentHomography: HomographyInfoGQL currentHomography: HomographyInfoGQL
homographyHistory: [HomographyInfoGQL!]! homographyHistory: [HomographyInfoGQL!]!
currentProcessing: VideoProcessingGQL currentProcessing: VideoProcessingGQL
reactions: [ReactionGQL!]!
} }
type UploadStreamGQL { type UploadStreamGQL {
@@ -610,6 +612,22 @@ type VideoProcessingStatusGQL {
updatedAt: DateTime updatedAt: DateTime
} }
type ReactionGQL {
videoId: Int!
user: UserGQL!
reaction: ReactionEnum!
createdAt: DateTime
updatedAt: DateTime
}
enum ReactionEnum {
LIKE
HEART
BULLSEYE
HUNDRED
NONE
}
type RunFeaturesGQL { type RunFeaturesGQL {
runId: Int! runId: Int!
indexInRun: Int! indexInRun: Int!
@@ -714,9 +732,14 @@ type PageInfoGQL {
} }
type TagGQL { type TagGQL {
name: String!
id: Int! id: Int!
group: String name: String!
tagClasses: [TagClassGQL!]
}
type TagClassGQL {
id: Int!
name: String!
} }
""" """
@@ -791,6 +814,7 @@ type Mutation {
): Boolean! ): Boolean!
editUploadStream(videoId: Int!, videoMetadata: VideoMetadataInput!): Boolean! editUploadStream(videoId: Int!, videoMetadata: VideoMetadataInput!): Boolean!
deleteVideo(videoId: Int!): Boolean! deleteVideo(videoId: Int!): Boolean!
reactToVideo(videoId: Int!, reaction: ReactionEnum!): Boolean!
} }
input CreateBucketSetInput { input CreateBucketSetInput {
@@ -895,6 +919,12 @@ input VideoMetadataInput {
startTime: DateTime = null startTime: DateTime = null
endTime: DateTime = null endTime: DateTime = null
gameType: String = 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 tableSize: Float = null
lastIntendedSegmentBound: Int = null lastIntendedSegmentBound: Int = null
streamSegmentType: StreamSegmentTypeEnum = null streamSegmentType: StreamSegmentTypeEnum = null