Compare commits

...

27 Commits

Author SHA1 Message Date
99f8968a36 Create delete user
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2025-07-09 11:37:25 -06:00
76a98aa0c3 Remove subscription stuff for now 2025-07-09 07:59:08 -06:00
f5177a877c Merge pull request 'add createSubscription' (#191) from loewy/create-checkout-session into master
Reviewed-on: #191
2025-07-09 07:57:38 -06:00
6685849cc2 add available subscription
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2025-07-08 16:40:12 -07:00
567cbc549c add createSubscription
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2025-07-08 16:20:14 -07:00
2b43493a4f Add processing progress fields 2025-07-08 14:12:15 -06:00
358eee2e16 Merge pull request 'Add getAvailableSubscriptionOptions & associated subscription types' (#190) from loewy/available-sub-options into master
Reviewed-on: #190
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2025-07-08 12:52:17 -06:00
a1d3d776aa add to schema
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2025-07-07 14:24:09 -07:00
82af3a3ce9 Merge pull request 'Add operation for ensureStripeCustomerExists' (#189) from loewy/ensure-customer-exists-operations into master
Reviewed-on: #189
2025-07-07 14:27:24 -06:00
7b51c317ca add operation for ensureStripeCustomerExists
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2025-07-07 13:12:36 -07:00
04f1bb4d74 Remove email param from ensureStripeCustomerExists 2025-07-06 16:20:49 -06:00
fbd7c2020b Merge pull request 'Add ensureStripeCustomerExists to schema' (#188) from loewy/get-stripe-customer-mutation into master
Reviewed-on: #188
2025-07-04 12:06:47 -06:00
c0636a8863 ensure stripe customer rename
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2025-07-03 19:43:21 -07:00
7302d6b8b6 get stripe customer mutation, add stripe_customer_id to user gql type
All checks were successful
Tests / Tests (pull_request) Successful in 11s
2025-07-03 15:26:44 -07:00
492178455c Add getUsersMatching 2025-06-25 15:08:19 -07:00
55a2edb042 Merge pull request 'Add bannerMessages to getDeployedConfig operation' (#187) from loewy/banner-on-deployed-config-ops into master
Reviewed-on: #187
2025-06-13 11:19:59 -06:00
31cf492889 add bannerMessages to getDeployedConfig operation
All checks were successful
Tests / Tests (pull_request) Successful in 7s
2025-06-13 10:12:39 -07:00
de7dc675a1 Merge pull request 'Reverting config operation until BE deployed' (#186) from loewy/revert-config-operations into master
Reviewed-on: #186
2025-06-12 15:12:48 -06:00
f8f00d9c24 revert changes
All checks were successful
Tests / Tests (pull_request) Successful in 6s
2025-06-12 14:09:20 -07:00
dc207bce55 Merge pull request 'Add banners to config operations' (#185) from loewy/update-config-operations into master
Reviewed-on: #185
2025-06-12 14:30:17 -06:00
2e5b8d2563 add banners to config operations
All checks were successful
Tests / Tests (pull_request) Successful in 6s
2025-06-12 13:29:24 -07:00
46bcd08ae1 Merge pull request 'Add banner messages to DeployedConfigGql' (#184) from loewy/add-banner-to-config into master
Reviewed-on: #184
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2025-06-12 14:27:36 -06:00
bd383b1d55 add banner messages to deployedConfigGql
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2025-06-12 10:21:24 -07:00
2459cb78f8 Merge pull request 'Add comments operations' (#183) from loewy/add-comments-feed-operation into master
Reviewed-on: #183
2025-05-16 18:34:07 -06:00
8859ad8951 add lightweight query to refetch social interractions on comment mutation completion
All checks were successful
Tests / Tests (pull_request) Successful in 16s
2025-05-16 17:31:58 -07:00
bdc3961e46 add mutations for comments 2025-05-16 14:43:16 -07:00
7c8c932a78 connect gql 2025-05-16 12:25:27 -07:00
7 changed files with 841 additions and 16 deletions

View File

@@ -86,6 +86,22 @@ export type BankFeaturesGql = {
wallsHit: Array<WallTypeEnum>;
};
export type BannerGql = {
__typename?: "BannerGQL";
color: Scalars["String"]["output"];
dismissible: Scalars["Boolean"]["output"];
id: Scalars["Int"]["output"];
kind: BannerKindEnum;
message: Scalars["String"]["output"];
priority: Scalars["Int"]["output"];
};
export enum BannerKindEnum {
Error = "ERROR",
Info = "INFO",
Warning = "WARNING",
}
export type BoundingBoxGql = {
__typename?: "BoundingBoxGQL";
height: Scalars["Float"]["output"];
@@ -190,6 +206,7 @@ export type DatetimeRangeAggregationInput = {
export type DeployedConfigGql = {
__typename?: "DeployedConfigGQL";
allowNewUsers: Scalars["Boolean"]["output"];
bannerMessages: Array<BannerGql>;
devMode: Scalars["Boolean"]["output"];
environment: Scalars["String"]["output"];
firebase: Scalars["Boolean"]["output"];
@@ -2258,12 +2275,14 @@ export type Mutation = {
createUploadStream: CreateUploadStreamReturn;
deleteComment: Scalars["Boolean"]["output"];
deleteTags: Scalars["Boolean"]["output"];
deleteUser: Scalars["Boolean"]["output"];
deleteVideo: Scalars["Boolean"]["output"];
editComment: Scalars["Boolean"]["output"];
editProfileImageUri: UserGql;
editShot: EditShotReturn;
editUploadStream: Scalars["Boolean"]["output"];
editUser: UserGql;
ensureStripeCustomerExists: UserGql;
findPrerecordTableLayout?: Maybe<HomographyInfoGql>;
followUser: UserGql;
getHlsInitUploadLink: GetUploadLinkReturn;
@@ -2474,6 +2493,7 @@ export type Query = {
__typename?: "Query";
doesUsernameExist: Scalars["Boolean"]["output"];
getAggregatedShotMetrics: Array<AggregateResultGql>;
getAvailableSubscriptionOptions: StripeSubscriptionOptionsGql;
getBucketSet?: Maybe<BucketSetGql>;
getDeployedConfig: DeployedConfigGql;
getFeedVideos: VideoHistoryGql;
@@ -2494,6 +2514,7 @@ export type Query = {
getUserTags: Array<TagGql>;
getUserVideos: VideoHistoryGql;
getUsernames: Array<Scalars["String"]["output"]>;
getUsersMatching: Array<UserGql>;
getVideo: VideoGql;
getVideoMakePercentageIntervals: Array<MakePercentageIntervalGql>;
getVideos: Array<VideoGql>;
@@ -2616,6 +2637,12 @@ export type QueryGetUsernamesArgs = {
matchString?: InputMaybe<Scalars["String"]["input"]>;
};
export type QueryGetUsersMatchingArgs = {
after?: InputMaybe<Scalars["String"]["input"]>;
limit?: InputMaybe<Scalars["Int"]["input"]>;
matchString?: InputMaybe<Scalars["String"]["input"]>;
};
export type QueryGetVideoArgs = {
debuggingJson?: InputMaybe<Scalars["JSON"]["input"]>;
videoId: Scalars["Int"]["input"];
@@ -2892,6 +2919,31 @@ export enum StreamSegmentTypeEnum {
RbChunkedMp4 = "RB_CHUNKED_MP4",
}
export type StripePriceGql = {
__typename?: "StripePriceGQL";
active: Scalars["Boolean"]["output"];
currency: Scalars["String"]["output"];
id: Scalars["String"]["output"];
recurringInterval?: Maybe<Scalars["String"]["output"]>;
recurringIntervalCount?: Maybe<Scalars["Int"]["output"]>;
type: Scalars["String"]["output"];
unitAmount?: Maybe<Scalars["Int"]["output"]>;
};
export type StripeProductGql = {
__typename?: "StripeProductGQL";
active: Scalars["Boolean"]["output"];
description?: Maybe<Scalars["String"]["output"]>;
id: Scalars["String"]["output"];
name: Scalars["String"]["output"];
prices: Array<StripePriceGql>;
};
export type StripeSubscriptionOptionsGql = {
__typename?: "StripeSubscriptionOptionsGQL";
products: Array<StripeProductGql>;
};
export type SuccessfulAdd = {
__typename?: "SuccessfulAdd";
value: Scalars["Boolean"]["output"];
@@ -3017,6 +3069,7 @@ export type UserGql = {
id: Scalars["Int"]["output"];
isAdmin?: Maybe<Scalars["Boolean"]["output"]>;
profileImageUri?: Maybe<Scalars["String"]["output"]>;
stripeCustomerId?: Maybe<Scalars["String"]["output"]>;
updatedAt?: Maybe<Scalars["DateTime"]["output"]>;
username: Scalars["String"]["output"];
videosPrivateByDefault?: Maybe<Scalars["Boolean"]["output"]>;
@@ -3137,8 +3190,11 @@ export type VideoProcessingErrorGql = {
export type VideoProcessingGql = {
__typename?: "VideoProcessingGQL";
currentSegment?: Maybe<Scalars["Int"]["output"]>;
errors: Array<VideoProcessingErrorGql>;
framesProcessed?: Maybe<Scalars["Int"]["output"]>;
id: Scalars["Int"]["output"];
progressPercentage?: Maybe<Scalars["Float"]["output"]>;
status: ProcessingStatusEnum;
statuses: Array<VideoProcessingStatusGql>;
};
@@ -3209,6 +3265,38 @@ export type GetAggregatedShotMetricsQuery = {
}>;
};
export type CommentOnVideoMutationVariables = Exact<{
videoId: Scalars["Int"]["input"];
message: Scalars["String"]["input"];
parentCommentId?: InputMaybe<Scalars["Int"]["input"]>;
}>;
export type CommentOnVideoMutation = {
__typename?: "Mutation";
commentOnVideo: boolean;
};
export type EditCommentMutationVariables = Exact<{
videoId: Scalars["Int"]["input"];
commentId: Scalars["Int"]["input"];
newMessage: Scalars["String"]["input"];
}>;
export type EditCommentMutation = {
__typename?: "Mutation";
editComment: boolean;
};
export type DeleteCommentMutationVariables = Exact<{
videoId: Scalars["Int"]["input"];
commentId: Scalars["Int"]["input"];
}>;
export type DeleteCommentMutation = {
__typename?: "Mutation";
deleteComment: boolean;
};
export type GetDeployedConfigQueryVariables = Exact<{ [key: string]: never }>;
export type GetDeployedConfigQuery = {
@@ -3220,6 +3308,15 @@ export type GetDeployedConfigQuery = {
environment: string;
firebase: boolean;
minimumAllowedAppVersion: string;
bannerMessages: Array<{
__typename?: "BannerGQL";
color: string;
dismissible: boolean;
id: number;
kind: BannerKindEnum;
message: string;
priority: number;
}>;
};
};
@@ -3298,6 +3395,40 @@ export type GetFeedQuery = {
}> | null;
};
}>;
comments: Array<{
__typename?: "CommentGQL";
id: number;
message: string;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
}> | null;
};
replies: Array<{
__typename?: "CommentGQL";
id: number;
message: string;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
}> | null;
};
}>;
}>;
}>;
pageInfo: {
__typename?: "PageInfoGQL";
@@ -3307,6 +3438,19 @@ export type GetFeedQuery = {
};
};
export type UserSocialsFieldsFragment = {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
}> | null;
};
export type VideoCardFieldsFragment = {
__typename?: "VideoGQL";
id: number;
@@ -3369,6 +3513,40 @@ export type VideoCardFieldsFragment = {
}> | null;
};
}>;
comments: Array<{
__typename?: "CommentGQL";
id: number;
message: string;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
}> | null;
};
replies: Array<{
__typename?: "CommentGQL";
id: number;
message: string;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
}> | null;
};
}>;
}>;
};
export type GetVideoFeedQueryVariables = Exact<{
@@ -3449,6 +3627,40 @@ export type GetVideoFeedQuery = {
}> | null;
};
}>;
comments: Array<{
__typename?: "CommentGQL";
id: number;
message: string;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
}> | null;
};
replies: Array<{
__typename?: "CommentGQL";
id: number;
message: string;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
}> | null;
};
}>;
}>;
}>;
pageInfo: {
__typename?: "PageInfoGQL";
@@ -3652,6 +3864,27 @@ export type GetMedalsQuery = {
};
};
export type EnsureStripeCustomerExistsMutationVariables = Exact<{
[key: string]: never;
}>;
export type EnsureStripeCustomerExistsMutation = {
__typename?: "Mutation";
ensureStripeCustomerExists: {
__typename?: "UserGQL";
id: number;
firebaseUid?: string | null;
username: string;
stripeCustomerId?: string | null;
profileImageUri?: string | null;
isAdmin?: boolean | null;
fargoRating?: number | null;
videosPrivateByDefault?: boolean | null;
createdAt?: any | null;
updatedAt?: any | null;
};
};
export type ReactToVideoMutationVariables = Exact<{
videoId: Scalars["Int"]["input"];
reaction?: InputMaybe<ReactionEnum>;
@@ -4616,6 +4849,82 @@ export type GetVideoDetailsQuery = {
};
};
export type GetVideoSocialDetailsByIdQueryVariables = Exact<{
videoId: Scalars["Int"]["input"];
}>;
export type GetVideoSocialDetailsByIdQuery = {
__typename?: "Query";
getVideo: {
__typename?: "VideoGQL";
id: number;
name?: string | null;
owner?: {
__typename?: "UserGQL";
id: number;
firebaseUid?: string | null;
username: string;
profileImageUri?: string | null;
} | null;
tags: Array<{
__typename?: "VideoTag";
name: string;
tagClasses: Array<{ __typename?: "VideoTagClass"; name: string }>;
}>;
reactions: Array<{
__typename?: "ReactionGQL";
videoId: number;
reaction: ReactionEnum;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
}> | null;
};
}>;
comments: Array<{
__typename?: "CommentGQL";
id: number;
message: string;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
}> | null;
};
replies: Array<{
__typename?: "CommentGQL";
id: number;
message: string;
user: {
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
followers?: Array<{
__typename?: "UserGQL";
id: number;
username: string;
profileImageUri?: string | null;
}> | null;
};
}>;
}>;
};
};
export type GetVideosQueryVariables = Exact<{
videoIds: Array<Scalars["Int"]["input"]> | Scalars["Int"]["input"];
}>;
@@ -5192,6 +5501,18 @@ export type GetUploadStreamsWithDetailsQuery = {
};
};
export const UserSocialsFieldsFragmentDoc = gql`
fragment UserSocialsFields on UserGQL {
id
username
profileImageUri
followers {
id
username
profileImageUri
}
}
`;
export const VideoCardFieldsFragmentDoc = gql`
fragment VideoCardFields on VideoGQL {
id
@@ -5240,18 +5561,26 @@ export const VideoCardFieldsFragmentDoc = gql`
reactions {
videoId
user {
id
username
profileImageUri
followers {
id
username
profileImageUri
}
...UserSocialsFields
}
reaction
}
comments {
id
message
user {
...UserSocialsFields
}
replies {
id
message
user {
...UserSocialsFields
}
}
}
}
${UserSocialsFieldsFragmentDoc}
`;
export const MedalFieldsFragmentDoc = gql`
fragment MedalFields on MedalGQL {
@@ -5555,6 +5884,167 @@ export type GetAggregatedShotMetricsQueryResult = Apollo.QueryResult<
GetAggregatedShotMetricsQuery,
GetAggregatedShotMetricsQueryVariables
>;
export const CommentOnVideoDocument = gql`
mutation CommentOnVideo(
$videoId: Int!
$message: String!
$parentCommentId: Int
) {
commentOnVideo(
videoId: $videoId
message: $message
parentCommentId: $parentCommentId
)
}
`;
export type CommentOnVideoMutationFn = Apollo.MutationFunction<
CommentOnVideoMutation,
CommentOnVideoMutationVariables
>;
/**
* __useCommentOnVideoMutation__
*
* To run a mutation, you first call `useCommentOnVideoMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useCommentOnVideoMutation` 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 [commentOnVideoMutation, { data, loading, error }] = useCommentOnVideoMutation({
* variables: {
* videoId: // value for 'videoId'
* message: // value for 'message'
* parentCommentId: // value for 'parentCommentId'
* },
* });
*/
export function useCommentOnVideoMutation(
baseOptions?: Apollo.MutationHookOptions<
CommentOnVideoMutation,
CommentOnVideoMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<
CommentOnVideoMutation,
CommentOnVideoMutationVariables
>(CommentOnVideoDocument, options);
}
export type CommentOnVideoMutationHookResult = ReturnType<
typeof useCommentOnVideoMutation
>;
export type CommentOnVideoMutationResult =
Apollo.MutationResult<CommentOnVideoMutation>;
export type CommentOnVideoMutationOptions = Apollo.BaseMutationOptions<
CommentOnVideoMutation,
CommentOnVideoMutationVariables
>;
export const EditCommentDocument = gql`
mutation EditComment($videoId: Int!, $commentId: Int!, $newMessage: String!) {
editComment(
videoId: $videoId
commentId: $commentId
newMessage: $newMessage
)
}
`;
export type EditCommentMutationFn = Apollo.MutationFunction<
EditCommentMutation,
EditCommentMutationVariables
>;
/**
* __useEditCommentMutation__
*
* To run a mutation, you first call `useEditCommentMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useEditCommentMutation` 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 [editCommentMutation, { data, loading, error }] = useEditCommentMutation({
* variables: {
* videoId: // value for 'videoId'
* commentId: // value for 'commentId'
* newMessage: // value for 'newMessage'
* },
* });
*/
export function useEditCommentMutation(
baseOptions?: Apollo.MutationHookOptions<
EditCommentMutation,
EditCommentMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<EditCommentMutation, EditCommentMutationVariables>(
EditCommentDocument,
options,
);
}
export type EditCommentMutationHookResult = ReturnType<
typeof useEditCommentMutation
>;
export type EditCommentMutationResult =
Apollo.MutationResult<EditCommentMutation>;
export type EditCommentMutationOptions = Apollo.BaseMutationOptions<
EditCommentMutation,
EditCommentMutationVariables
>;
export const DeleteCommentDocument = gql`
mutation DeleteComment($videoId: Int!, $commentId: Int!) {
deleteComment(videoId: $videoId, commentId: $commentId)
}
`;
export type DeleteCommentMutationFn = Apollo.MutationFunction<
DeleteCommentMutation,
DeleteCommentMutationVariables
>;
/**
* __useDeleteCommentMutation__
*
* To run a mutation, you first call `useDeleteCommentMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useDeleteCommentMutation` 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 [deleteCommentMutation, { data, loading, error }] = useDeleteCommentMutation({
* variables: {
* videoId: // value for 'videoId'
* commentId: // value for 'commentId'
* },
* });
*/
export function useDeleteCommentMutation(
baseOptions?: Apollo.MutationHookOptions<
DeleteCommentMutation,
DeleteCommentMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<
DeleteCommentMutation,
DeleteCommentMutationVariables
>(DeleteCommentDocument, options);
}
export type DeleteCommentMutationHookResult = ReturnType<
typeof useDeleteCommentMutation
>;
export type DeleteCommentMutationResult =
Apollo.MutationResult<DeleteCommentMutation>;
export type DeleteCommentMutationOptions = Apollo.BaseMutationOptions<
DeleteCommentMutation,
DeleteCommentMutationVariables
>;
export const GetDeployedConfigDocument = gql`
query getDeployedConfig {
getDeployedConfig {
@@ -5563,6 +6053,14 @@ export const GetDeployedConfigDocument = gql`
environment
firebase
minimumAllowedAppVersion
bannerMessages {
color
dismissible
id
kind
message
priority
}
}
}
`;
@@ -6194,6 +6692,65 @@ export type GetMedalsQueryResult = Apollo.QueryResult<
GetMedalsQuery,
GetMedalsQueryVariables
>;
export const EnsureStripeCustomerExistsDocument = gql`
mutation EnsureStripeCustomerExists {
ensureStripeCustomerExists {
id
firebaseUid
username
stripeCustomerId
profileImageUri
isAdmin
fargoRating
videosPrivateByDefault
createdAt
updatedAt
}
}
`;
export type EnsureStripeCustomerExistsMutationFn = Apollo.MutationFunction<
EnsureStripeCustomerExistsMutation,
EnsureStripeCustomerExistsMutationVariables
>;
/**
* __useEnsureStripeCustomerExistsMutation__
*
* To run a mutation, you first call `useEnsureStripeCustomerExistsMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useEnsureStripeCustomerExistsMutation` 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 [ensureStripeCustomerExistsMutation, { data, loading, error }] = useEnsureStripeCustomerExistsMutation({
* variables: {
* },
* });
*/
export function useEnsureStripeCustomerExistsMutation(
baseOptions?: Apollo.MutationHookOptions<
EnsureStripeCustomerExistsMutation,
EnsureStripeCustomerExistsMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<
EnsureStripeCustomerExistsMutation,
EnsureStripeCustomerExistsMutationVariables
>(EnsureStripeCustomerExistsDocument, options);
}
export type EnsureStripeCustomerExistsMutationHookResult = ReturnType<
typeof useEnsureStripeCustomerExistsMutation
>;
export type EnsureStripeCustomerExistsMutationResult =
Apollo.MutationResult<EnsureStripeCustomerExistsMutation>;
export type EnsureStripeCustomerExistsMutationOptions =
Apollo.BaseMutationOptions<
EnsureStripeCustomerExistsMutation,
EnsureStripeCustomerExistsMutationVariables
>;
export const ReactToVideoDocument = gql`
mutation ReactToVideo($videoId: Int!, $reaction: ReactionEnum) {
reactToVideo(videoId: $videoId, reaction: $reaction)
@@ -8495,6 +9052,114 @@ export type GetVideoDetailsQueryResult = Apollo.QueryResult<
GetVideoDetailsQuery,
GetVideoDetailsQueryVariables
>;
export const GetVideoSocialDetailsByIdDocument = gql`
query GetVideoSocialDetailsById($videoId: Int!) {
getVideo(videoId: $videoId) {
id
name
owner {
id
firebaseUid
username
profileImageUri
}
tags {
tagClasses {
name
}
name
}
reactions {
videoId
user {
...UserSocialsFields
}
reaction
}
comments {
id
message
user {
...UserSocialsFields
}
replies {
id
message
user {
...UserSocialsFields
}
}
}
}
}
${UserSocialsFieldsFragmentDoc}
`;
/**
* __useGetVideoSocialDetailsByIdQuery__
*
* To run a query within a React component, call `useGetVideoSocialDetailsByIdQuery` and pass it any options that fit your needs.
* When your component renders, `useGetVideoSocialDetailsByIdQuery` 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 } = useGetVideoSocialDetailsByIdQuery({
* variables: {
* videoId: // value for 'videoId'
* },
* });
*/
export function useGetVideoSocialDetailsByIdQuery(
baseOptions: Apollo.QueryHookOptions<
GetVideoSocialDetailsByIdQuery,
GetVideoSocialDetailsByIdQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useQuery<
GetVideoSocialDetailsByIdQuery,
GetVideoSocialDetailsByIdQueryVariables
>(GetVideoSocialDetailsByIdDocument, options);
}
export function useGetVideoSocialDetailsByIdLazyQuery(
baseOptions?: Apollo.LazyQueryHookOptions<
GetVideoSocialDetailsByIdQuery,
GetVideoSocialDetailsByIdQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useLazyQuery<
GetVideoSocialDetailsByIdQuery,
GetVideoSocialDetailsByIdQueryVariables
>(GetVideoSocialDetailsByIdDocument, options);
}
export function useGetVideoSocialDetailsByIdSuspenseQuery(
baseOptions?: Apollo.SuspenseQueryHookOptions<
GetVideoSocialDetailsByIdQuery,
GetVideoSocialDetailsByIdQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useSuspenseQuery<
GetVideoSocialDetailsByIdQuery,
GetVideoSocialDetailsByIdQueryVariables
>(GetVideoSocialDetailsByIdDocument, options);
}
export type GetVideoSocialDetailsByIdQueryHookResult = ReturnType<
typeof useGetVideoSocialDetailsByIdQuery
>;
export type GetVideoSocialDetailsByIdLazyQueryHookResult = ReturnType<
typeof useGetVideoSocialDetailsByIdLazyQuery
>;
export type GetVideoSocialDetailsByIdSuspenseQueryHookResult = ReturnType<
typeof useGetVideoSocialDetailsByIdSuspenseQuery
>;
export type GetVideoSocialDetailsByIdQueryResult = Apollo.QueryResult<
GetVideoSocialDetailsByIdQuery,
GetVideoSocialDetailsByIdQueryVariables
>;
export const GetVideosDocument = gql`
query GetVideos($videoIds: [Int!]!) {
getVideos(videoIds: $videoIds) {

View File

@@ -0,0 +1,19 @@
mutation CommentOnVideo(
$videoId: Int!
$message: String!
$parentCommentId: Int
) {
commentOnVideo(
videoId: $videoId
message: $message
parentCommentId: $parentCommentId
)
}
mutation EditComment($videoId: Int!, $commentId: Int!, $newMessage: String!) {
editComment(videoId: $videoId, commentId: $commentId, newMessage: $newMessage)
}
mutation DeleteComment($videoId: Int!, $commentId: Int!) {
deleteComment(videoId: $videoId, commentId: $commentId)
}

View File

@@ -5,5 +5,13 @@ query getDeployedConfig {
environment
firebase
minimumAllowedAppVersion
bannerMessages {
color
dismissible
id
kind
message
priority
}
}
}

View File

@@ -15,6 +15,17 @@ query GetFeed(
}
}
fragment UserSocialsFields on UserGQL {
id
username
profileImageUri
followers {
id
username
profileImageUri
}
}
fragment VideoCardFields on VideoGQL {
id
owner {
@@ -62,17 +73,24 @@ fragment VideoCardFields on VideoGQL {
reactions {
videoId
user {
id
username
profileImageUri
followers {
id
username
profileImageUri
}
...UserSocialsFields
}
reaction
}
comments {
id
message
user {
...UserSocialsFields
}
replies {
id
message
user {
...UserSocialsFields
}
}
}
}
query GetVideoFeed(

View File

@@ -0,0 +1,14 @@
mutation EnsureStripeCustomerExists {
ensureStripeCustomerExists {
id
firebaseUid
username
stripeCustomerId
profileImageUri
isAdmin
fargoRating
videosPrivateByDefault
createdAt
updatedAt
}
}

View File

@@ -82,6 +82,57 @@ query GetVideoDetails($videoId: Int!) {
}
}
fragment UserSocialsFields on UserGQL {
id
username
profileImageUri
followers {
id
username
profileImageUri
}
}
query GetVideoSocialDetailsById($videoId: Int!) {
getVideo(videoId: $videoId) {
id
name
owner {
id
firebaseUid
username
profileImageUri
}
tags {
tagClasses {
name
}
name
}
reactions {
videoId
user {
...UserSocialsFields
}
reaction
}
comments {
id
message
user {
...UserSocialsFields
}
replies {
id
message
user {
...UserSocialsFields
}
}
}
}
}
query GetVideos($videoIds: [Int!]!) {
getVideos(videoIds: $videoIds) {
...VideoStreamMetadata

View File

@@ -70,12 +70,18 @@ type Query {
limit: Int = null
after: String = null
): [String!]!
getUsersMatching(
matchString: String = null
limit: Int = null
after: String = null
): [UserGQL!]!
getUserRelationshipsMatching(
userId: Int!
matchString: String = null
limit: Int = 100
after: String = null
): UserRelationshipsResult!
getAvailableSubscriptionOptions: StripeSubscriptionOptionsGQL!
getPlayTime(userId: Int!, filters: VideoFilterInput = null): UserPlayTimeGQL!
getUserVideos(
userId: Int = null
@@ -291,6 +297,22 @@ type DeployedConfigGQL {
devMode: Boolean!
environment: String!
minimumAllowedAppVersion: String!
bannerMessages: [BannerGQL!]!
}
type BannerGQL {
id: Int!
message: String!
color: String!
kind: BannerKindEnum!
dismissible: Boolean!
priority: Int!
}
enum BannerKindEnum {
INFO
WARNING
ERROR
}
type VideoHistoryGQL {
@@ -335,6 +357,7 @@ type UserGQL {
isAdmin: Boolean
fargoRating: Int
activeVideoId: Int
stripeCustomerId: String
profileImageUri: String
createdAt: DateTime
updatedAt: DateTime
@@ -546,6 +569,9 @@ type VideoProcessingGQL {
errors: [VideoProcessingErrorGQL!]!
status: ProcessingStatusEnum!
statuses: [VideoProcessingStatusGQL!]!
framesProcessed: Int
currentSegment: Int
progressPercentage: Float
}
type VideoProcessingErrorGQL {
@@ -801,6 +827,28 @@ type UserRelationship {
toUserIsFollowedBy: Boolean!
}
type StripeSubscriptionOptionsGQL {
products: [StripeProductGQL!]!
}
type StripeProductGQL {
id: String!
name: String!
description: String
active: Boolean!
prices: [StripePriceGQL!]!
}
type StripePriceGQL {
id: String!
currency: String!
unitAmount: Int
recurringInterval: String
recurringIntervalCount: Int
type: String!
active: Boolean!
}
type UserPlayTimeGQL {
totalSeconds: Float!
}
@@ -857,6 +905,8 @@ type Mutation {
followUser(followedUserId: Int!): UserGQL!
unfollowUser(followedUserId: Int!): UserGQL!
retireTags(tagIds: [Int!]!): Boolean!
ensureStripeCustomerExists: UserGQL!
deleteUser: Boolean!
findPrerecordTableLayout(b64Image: String!, videoId: Int!): HomographyInfoGQL
createUploadStream(
videoMetadata: VideoMetadataInput!