Compare commits

..

8 Commits

Author SHA1 Message Date
6a17c8e3cd schema
Some checks failed
Tests / Tests (pull_request) Failing after 3s
2025-04-08 13:21:55 -07:00
653f31e96a WIP: Comment CRUD
Some checks failed
Tests / Tests (pull_request) Failing after 4s
2025-04-08 13:03:34 -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
4 changed files with 161 additions and 0 deletions

View File

@@ -122,6 +122,16 @@ export enum ClientUploadStatusEnum {
UploadEnabled = "UPLOAD_ENABLED", UploadEnabled = "UPLOAD_ENABLED",
} }
export type CommentGql = {
__typename?: "CommentGQL";
createdAt?: Maybe<Scalars["DateTime"]["output"]>;
id: Scalars["Int"]["output"];
message: Scalars["String"]["output"];
replies: Array<CommentGql>;
updatedAt?: Maybe<Scalars["DateTime"]["output"]>;
user: UserGql;
};
export type CountLeaderboardGql = { export type CountLeaderboardGql = {
__typename?: "CountLeaderboardGQL"; __typename?: "CountLeaderboardGQL";
entries: Array<UserShotCountEntry>; entries: Array<UserShotCountEntry>;
@@ -2226,10 +2236,13 @@ export type MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailed
export type Mutation = { export type Mutation = {
__typename?: "Mutation"; __typename?: "Mutation";
addAnnotationToShot: AddShotAnnotationReturn; addAnnotationToShot: AddShotAnnotationReturn;
commentOnVideo: Scalars["Boolean"]["output"];
createBucketSet: BucketSetGql; createBucketSet: BucketSetGql;
createUploadStream: CreateUploadStreamReturn; createUploadStream: CreateUploadStreamReturn;
deleteComment: Scalars["Boolean"]["output"];
deleteTags: Scalars["Boolean"]["output"]; deleteTags: Scalars["Boolean"]["output"];
deleteVideo: Scalars["Boolean"]["output"]; deleteVideo: Scalars["Boolean"]["output"];
editComment: Scalars["Boolean"]["output"];
editProfileImageUri: UserGql; editProfileImageUri: UserGql;
editShot: EditShotReturn; editShot: EditShotReturn;
editUploadStream: Scalars["Boolean"]["output"]; editUploadStream: Scalars["Boolean"]["output"];
@@ -2253,6 +2266,12 @@ export type MutationAddAnnotationToShotArgs = {
shotId: Scalars["Int"]["input"]; shotId: Scalars["Int"]["input"];
}; };
export type MutationCommentOnVideoArgs = {
message: Scalars["String"]["input"];
parentCommentId?: InputMaybe<Scalars["Int"]["input"]>;
videoId: Scalars["Int"]["input"];
};
export type MutationCreateBucketSetArgs = { export type MutationCreateBucketSetArgs = {
params: CreateBucketSetInput; params: CreateBucketSetInput;
}; };
@@ -2261,6 +2280,11 @@ export type MutationCreateUploadStreamArgs = {
videoMetadata: VideoMetadataInput; videoMetadata: VideoMetadataInput;
}; };
export type MutationDeleteCommentArgs = {
commentId: Scalars["Int"]["input"];
videoId: Scalars["Int"]["input"];
};
export type MutationDeleteTagsArgs = { export type MutationDeleteTagsArgs = {
tagsToDelete: Array<VideoTagInput>; tagsToDelete: Array<VideoTagInput>;
videoId: Scalars["Int"]["input"]; videoId: Scalars["Int"]["input"];
@@ -2270,6 +2294,12 @@ export type MutationDeleteVideoArgs = {
videoId: Scalars["Int"]["input"]; videoId: Scalars["Int"]["input"];
}; };
export type MutationEditCommentArgs = {
commentId: Scalars["Int"]["input"];
newMessage: Scalars["String"]["input"];
videoId: Scalars["Int"]["input"];
};
export type MutationEditProfileImageUriArgs = { export type MutationEditProfileImageUriArgs = {
profileImageUri: Scalars["String"]["input"]; profileImageUri: Scalars["String"]["input"];
}; };
@@ -3008,6 +3038,7 @@ export type VideoGql = {
__typename?: "VideoGQL"; __typename?: "VideoGQL";
averageDifficulty?: Maybe<Scalars["Float"]["output"]>; averageDifficulty?: Maybe<Scalars["Float"]["output"]>;
averageTimeBetweenShots?: Maybe<Scalars["Float"]["output"]>; averageTimeBetweenShots?: Maybe<Scalars["Float"]["output"]>;
comments: Array<CommentGql>;
createdAt?: Maybe<Scalars["DateTime"]["output"]>; createdAt?: Maybe<Scalars["DateTime"]["output"]>;
currentHomography?: Maybe<HomographyInfoGql>; currentHomography?: Maybe<HomographyInfoGql>;
currentProcessing?: Maybe<VideoProcessingGql>; currentProcessing?: Maybe<VideoProcessingGql>;
@@ -3210,6 +3241,17 @@ export type GetFeedQuery = {
status: ProcessingStatusEnum; status: ProcessingStatusEnum;
}>; }>;
} | null; } | null;
reactions: Array<{
__typename?: "ReactionGQL";
videoId: number;
reaction: ReactionEnum;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
};
}>;
}>; }>;
pageInfo: { pageInfo: {
__typename?: "PageInfoGQL"; __typename?: "PageInfoGQL";
@@ -3263,6 +3305,17 @@ export type VideoCardFieldsFragment = {
status: ProcessingStatusEnum; status: ProcessingStatusEnum;
}>; }>;
} | null; } | null;
reactions: Array<{
__typename?: "ReactionGQL";
videoId: number;
reaction: ReactionEnum;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
};
}>;
}; };
export type GetVideoFeedQueryVariables = Exact<{ export type GetVideoFeedQueryVariables = Exact<{
@@ -3325,6 +3378,17 @@ export type GetVideoFeedQuery = {
status: ProcessingStatusEnum; status: ProcessingStatusEnum;
}>; }>;
} | null; } | null;
reactions: Array<{
__typename?: "ReactionGQL";
videoId: number;
reaction: ReactionEnum;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
};
}>;
}>; }>;
pageInfo: { pageInfo: {
__typename?: "PageInfoGQL"; __typename?: "PageInfoGQL";
@@ -3528,6 +3592,16 @@ export type GetMedalsQuery = {
}; };
}; };
export type ReactToVideoMutationVariables = Exact<{
videoId: Scalars["Int"]["input"];
reaction?: InputMaybe<ReactionEnum>;
}>;
export type ReactToVideoMutation = {
__typename?: "Mutation";
reactToVideo: boolean;
};
export type GetRunsForHighlightsQueryVariables = Exact<{ export type GetRunsForHighlightsQueryVariables = Exact<{
filterInput: RunFilterInput; filterInput: RunFilterInput;
runIds?: InputMaybe<Array<Scalars["Int"]["input"]> | Scalars["Int"]["input"]>; runIds?: InputMaybe<Array<Scalars["Int"]["input"]> | Scalars["Int"]["input"]>;
@@ -5006,6 +5080,15 @@ export const VideoCardFieldsFragmentDoc = gql`
status status
} }
} }
reactions {
videoId
user {
id
username
profileImageUri
}
reaction
}
} }
`; `;
export const MedalFieldsFragmentDoc = gql` export const MedalFieldsFragmentDoc = gql`
@@ -5931,6 +6014,55 @@ export type GetMedalsQueryResult = Apollo.QueryResult<
GetMedalsQuery, GetMedalsQuery,
GetMedalsQueryVariables GetMedalsQueryVariables
>; >;
export const ReactToVideoDocument = gql`
mutation ReactToVideo($videoId: Int!, $reaction: ReactionEnum) {
reactToVideo(videoId: $videoId, reaction: $reaction)
}
`;
export type ReactToVideoMutationFn = Apollo.MutationFunction<
ReactToVideoMutation,
ReactToVideoMutationVariables
>;
/**
* __useReactToVideoMutation__
*
* To run a mutation, you first call `useReactToVideoMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useReactToVideoMutation` 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 [reactToVideoMutation, { data, loading, error }] = useReactToVideoMutation({
* variables: {
* videoId: // value for 'videoId'
* reaction: // value for 'reaction'
* },
* });
*/
export function useReactToVideoMutation(
baseOptions?: Apollo.MutationHookOptions<
ReactToVideoMutation,
ReactToVideoMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<
ReactToVideoMutation,
ReactToVideoMutationVariables
>(ReactToVideoDocument, options);
}
export type ReactToVideoMutationHookResult = ReturnType<
typeof useReactToVideoMutation
>;
export type ReactToVideoMutationResult =
Apollo.MutationResult<ReactToVideoMutation>;
export type ReactToVideoMutationOptions = Apollo.BaseMutationOptions<
ReactToVideoMutation,
ReactToVideoMutationVariables
>;
export const GetRunsForHighlightsDocument = gql` export const GetRunsForHighlightsDocument = gql`
query GetRunsForHighlights( query GetRunsForHighlights(
$filterInput: RunFilterInput! $filterInput: RunFilterInput!

View File

@@ -58,6 +58,15 @@ fragment VideoCardFields on VideoGQL {
status status
} }
} }
reactions {
videoId
user {
id
username
profileImageUri
}
reaction
}
} }
query GetVideoFeed( query GetVideoFeed(

View File

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

View File

@@ -480,6 +480,7 @@ type VideoGQL {
homographyHistory: [HomographyInfoGQL!]! homographyHistory: [HomographyInfoGQL!]!
currentProcessing: VideoProcessingGQL currentProcessing: VideoProcessingGQL
reactions: [ReactionGQL!]! reactions: [ReactionGQL!]!
comments: [CommentGQL!]!
} }
type UploadStreamGQL { type UploadStreamGQL {
@@ -621,6 +622,15 @@ type ReactionGQL {
updatedAt: DateTime updatedAt: DateTime
} }
type CommentGQL {
id: Int!
user: UserGQL!
message: String!
replies: [CommentGQL!]!
createdAt: DateTime
updatedAt: DateTime
}
enum ReactionEnum { enum ReactionEnum {
LIKE LIKE
HEART HEART
@@ -818,6 +828,13 @@ type Mutation {
deleteVideo(videoId: Int!): Boolean! deleteVideo(videoId: Int!): Boolean!
deleteTags(videoId: Int!, tagsToDelete: [VideoTagInput!]!): Boolean! deleteTags(videoId: Int!, tagsToDelete: [VideoTagInput!]!): Boolean!
reactToVideo(videoId: Int!, reaction: ReactionEnum): 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!
} }
input CreateBucketSetInput { input CreateBucketSetInput {