Compare commits

..

28 Commits

Author SHA1 Message Date
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 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
8 changed files with 310 additions and 7 deletions

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 {

View File

@@ -2153,6 +2153,7 @@ export type Mutation = {
getHlsInitUploadLink: GetUploadLinkReturn;
getProfileImageUploadLink: GetProfileUploadLinkReturn;
getUploadLink: GetUploadLinkReturn;
retireTags: Scalars["Boolean"]["output"];
setLoggerLevel: Scalars["Boolean"]["output"];
setSegmentDuration: Scalars["Boolean"]["output"];
unfollowUser: UserGql;
@@ -2217,6 +2218,10 @@ export type MutationGetUploadLinkArgs = {
videoId: Scalars["Int"]["input"];
};
export type MutationRetireTagsArgs = {
tagIds: Array<Scalars["Int"]["input"]>;
};
export type MutationSetLoggerLevelArgs = {
level: Scalars["String"]["input"];
path: Scalars["String"]["input"];
@@ -2434,6 +2439,10 @@ export type QueryGetUserRelationshipsMatchingArgs = {
userId: Scalars["Int"]["input"];
};
export type QueryGetUserTagsArgs = {
includeRetiredTags?: InputMaybe<Scalars["Boolean"]["input"]>;
};
export type QueryGetUserVideosArgs = {
after?: InputMaybe<Scalars["String"]["input"]>;
filters?: InputMaybe<VideoFilterInput>;
@@ -2556,6 +2565,12 @@ export type SegmentEndFramesGql = {
segmentEndFrames: Array<Scalars["Int"]["output"]>;
};
export type SegmentInfo = {
__typename?: "SegmentInfo";
index: Scalars["Int"]["output"];
time: Scalars["Float"]["output"];
};
export type SegmentStartTimesGql = {
__typename?: "SegmentStartTimesGQL";
id: Scalars["Int"]["output"];
@@ -2608,6 +2623,7 @@ export type ShotGql = {
createdAt?: Maybe<Scalars["DateTime"]["output"]>;
cueObjectFeatures?: Maybe<CueObjectFeaturesGql>;
endFrame: Scalars["Int"]["output"];
endSegment: SegmentInfo;
endTime: Scalars["Float"]["output"];
falsePositiveScore?: Maybe<Scalars["Float"]["output"]>;
id: Scalars["Int"]["output"];
@@ -2617,6 +2633,7 @@ export type ShotGql = {
runFeatures?: Maybe<RunFeaturesGql>;
serializedShotPaths?: Maybe<SerializedShotPathsGql>;
startFrame: Scalars["Int"]["output"];
startSegment: SegmentInfo;
startTime: Scalars["Float"]["output"];
updatedAt?: Maybe<Scalars["DateTime"]["output"]>;
user?: Maybe<UserGql>;
@@ -2708,13 +2725,20 @@ export type SuccessfulAddAddShotAnnotationErrors =
| AddShotAnnotationErrors
| SuccessfulAdd;
export type TagGql = {
__typename?: "TagGQL";
group?: Maybe<Scalars["String"]["output"]>;
export type TagClassGql = {
__typename?: "TagClassGQL";
id: Scalars["Int"]["output"];
name: Scalars["String"]["output"];
};
export type TagGql = {
__typename?: "TagGQL";
id: Scalars["Int"]["output"];
name: Scalars["String"]["output"];
retired: Scalars["Boolean"]["output"];
tagClasses?: Maybe<Array<TagClassGql>>;
};
export type TargetMetricsGql = {
__typename?: "TargetMetricsGQL";
averageDifficulty?: Maybe<Scalars["Float"]["output"]>;
@@ -2869,6 +2893,7 @@ export type VideoFilterInput = {
export type VideoGql = {
__typename?: "VideoGQL";
averageDifficulty?: Maybe<Scalars["Float"]["output"]>;
averageTimeBetweenShots?: Maybe<Scalars["Float"]["output"]>;
createdAt?: Maybe<Scalars["DateTime"]["output"]>;
currentHomography?: Maybe<HomographyInfoGql>;
@@ -2906,6 +2931,7 @@ export type VideoMetadataInput = {
endStream?: Scalars["Boolean"]["input"];
endTime?: InputMaybe<Scalars["DateTime"]["input"]>;
framesPerSecond?: InputMaybe<Scalars["Float"]["input"]>;
/** @deprecated `game_type` is deprecated. Use `tags` instead. */
gameType?: InputMaybe<Scalars["String"]["input"]>;
lastIntendedSegmentBound?: InputMaybe<Scalars["Int"]["input"]>;
private?: InputMaybe<Scalars["Boolean"]["input"]>;
@@ -2913,6 +2939,8 @@ export type VideoMetadataInput = {
startTime?: InputMaybe<Scalars["DateTime"]["input"]>;
streamSegmentType?: InputMaybe<StreamSegmentTypeEnum>;
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"]>;
};
@@ -3029,6 +3057,8 @@ export type GetFeedQuery = {
totalShotsMade: number;
totalShots: number;
makePercentage: number;
averageTimeBetweenShots?: number | null;
averageDifficulty?: number | null;
createdAt?: any | null;
updatedAt?: any | null;
startTime?: any | null;
@@ -3083,6 +3113,8 @@ export type VideoCardFieldsFragment = {
totalShotsMade: number;
totalShots: number;
makePercentage: number;
averageTimeBetweenShots?: number | null;
averageDifficulty?: number | null;
createdAt?: any | null;
updatedAt?: any | null;
startTime?: any | null;
@@ -3140,6 +3172,8 @@ export type GetVideoFeedQuery = {
totalShotsMade: number;
totalShots: number;
makePercentage: number;
averageTimeBetweenShots?: number | null;
averageDifficulty?: number | null;
createdAt?: any | null;
updatedAt?: any | null;
startTime?: any | null;
@@ -3380,6 +3414,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<{
filterInput: FilterInput;
}>;
@@ -3507,6 +3564,8 @@ export type GetShotsWithMetadataFilterResultQuery = {
falsePositiveScore?: number | null;
createdAt?: 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;
cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL";
@@ -3574,6 +3633,8 @@ export type GetShotsWithMetadataQuery = {
falsePositiveScore?: number | null;
createdAt?: 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;
cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL";
@@ -3634,6 +3695,8 @@ export type GetShotsByIdsQuery = {
falsePositiveScore?: number | null;
createdAt?: 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;
cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL";
@@ -3683,6 +3746,8 @@ export type ShotWithAllFeaturesFragment = {
falsePositiveScore?: number | null;
createdAt?: 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;
cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL";
@@ -3745,6 +3810,8 @@ export type EditShotMutation = {
falsePositiveScore?: number | null;
createdAt?: 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;
cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL";
@@ -3788,6 +3855,15 @@ export type EditShotMutation = {
};
};
export type RetireTagsMutationVariables = Exact<{
tagIds: Array<Scalars["Int"]["input"]> | Scalars["Int"]["input"];
}>;
export type RetireTagsMutation = {
__typename?: "Mutation";
retireTags: boolean;
};
export type GetProfileImageUploadLinkMutationVariables = Exact<{
fileExt?: InputMaybe<Scalars["String"]["input"]>;
}>;
@@ -3927,7 +4003,16 @@ export type GetUserTagsQueryVariables = Exact<{ [key: string]: never }>;
export type GetUserTagsQuery = {
__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<{
@@ -4766,6 +4851,8 @@ export const VideoCardFieldsFragmentDoc = gql`
totalShotsMade
totalShots
makePercentage
averageTimeBetweenShots
averageDifficulty
createdAt
updatedAt
startTime
@@ -4811,6 +4898,14 @@ export const ShotWithAllFeaturesFragmentDoc = gql`
endFrame
startTime @client
endTime @client
startSegment @client {
index
time
}
endSegment @client {
index
time
}
user {
id
}
@@ -5712,6 +5807,100 @@ export type GetMedalsQueryResult = Apollo.QueryResult<
GetMedalsQuery,
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`
query GetSerializedShotPaths($filterInput: FilterInput!) {
getShots(filterInput: $filterInput) {
@@ -6425,6 +6614,54 @@ export type EditShotMutationOptions = Apollo.BaseMutationOptions<
EditShotMutation,
EditShotMutationVariables
>;
export const RetireTagsDocument = gql`
mutation RetireTags($tagIds: [Int!]!) {
retireTags(tagIds: $tagIds)
}
`;
export type RetireTagsMutationFn = Apollo.MutationFunction<
RetireTagsMutation,
RetireTagsMutationVariables
>;
/**
* __useRetireTagsMutation__
*
* To run a mutation, you first call `useRetireTagsMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useRetireTagsMutation` returns a tuple that includes:
* - A mutate function that you can call at any time to execute the mutation
* - An object with fields that represent the current status of the mutation's execution
*
* @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
*
* @example
* const [retireTagsMutation, { data, loading, error }] = useRetireTagsMutation({
* variables: {
* tagIds: // value for 'tagIds'
* },
* });
*/
export function useRetireTagsMutation(
baseOptions?: Apollo.MutationHookOptions<
RetireTagsMutation,
RetireTagsMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<RetireTagsMutation, RetireTagsMutationVariables>(
RetireTagsDocument,
options,
);
}
export type RetireTagsMutationHookResult = ReturnType<
typeof useRetireTagsMutation
>;
export type RetireTagsMutationResult =
Apollo.MutationResult<RetireTagsMutation>;
export type RetireTagsMutationOptions = Apollo.BaseMutationOptions<
RetireTagsMutation,
RetireTagsMutationVariables
>;
export const GetProfileImageUploadLinkDocument = gql`
mutation getProfileImageUploadLink($fileExt: String = ".png") {
getProfileImageUploadLink(fileExt: $fileExt) {
@@ -6932,6 +7169,10 @@ export const GetUserTagsDocument = gql`
getUserTags {
id
name
tagClasses {
id
name
}
}
}
`;

View File

@@ -27,6 +27,8 @@ fragment VideoCardFields on VideoGQL {
totalShotsMade
totalShots
makePercentage
averageTimeBetweenShots
averageDifficulty
createdAt
updatedAt
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
startTime @client
endTime @client
startSegment @client {
index
time
}
endSegment @client {
index
time
}
user {
id
}

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

@@ -0,0 +1,3 @@
mutation RetireTags($tagIds: [Int!]!) {
retireTags(tagIds: $tagIds)
}

View File

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

View File

@@ -60,7 +60,7 @@ 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(
@@ -462,6 +462,7 @@ type VideoGQL {
makePercentage: Float!
medianRun: Float
averageTimeBetweenShots: Float
averageDifficulty: Float
createdAt: DateTime
updatedAt: DateTime
shots: [ShotGQL!]!
@@ -714,9 +715,15 @@ type PageInfoGQL {
}
type TagGQL {
name: String!
id: Int!
group: String
name: String!
tagClasses: [TagClassGQL!]
retired: Boolean!
}
type TagClassGQL {
id: Int!
name: String!
}
"""
@@ -778,6 +785,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!
@@ -895,6 +903,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