Compare commits

...

7 Commits

Author SHA1 Message Date
f573026853 Create get usernames and followers operation
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-10-23 17:04:25 -06:00
f98c98ecdd Merge pull request 'Add get usernames and following response' (#83) from kat/add-usernames-response into master
Reviewed-on: #83
2024-10-23 16:53:50 -06:00
3f6314aab7 Add get usernames and following response
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-10-23 16:53:26 -06:00
3051c155e2 Merge pull request 'Add mutation, logic needs to have better stateful solution' (#82) from loewy/add-annotations-to-operations into master
Reviewed-on: #82
2024-10-22 18:38:25 -06:00
e686be5acd add mutation, logic needs to have better stateful solution
All checks were successful
Tests / Tests (pull_request) Successful in 10s
2024-10-22 16:58:35 -07:00
d49f9b213a Merge pull request 'Add following followers to user model' (#81) from kat/following-followers into master
Reviewed-on: #81
2024-10-22 00:12:59 -06:00
163c6a4e0c Add following followers to user model
All checks were successful
Tests / Tests (pull_request) Successful in 7s
2024-10-21 12:08:42 -06:00
4 changed files with 319 additions and 0 deletions

View File

@@ -1999,11 +1999,13 @@ export type Mutation = {
editProfileImageUri: UserGql; editProfileImageUri: UserGql;
editUploadStream: Scalars["Boolean"]["output"]; editUploadStream: Scalars["Boolean"]["output"];
editUser: UserGql; editUser: UserGql;
followUser: UserGql;
getHlsInitUploadLink: GetUploadLinkReturn; getHlsInitUploadLink: GetUploadLinkReturn;
getProfileImageUploadLink: GetProfileUploadLinkReturn; getProfileImageUploadLink: GetProfileUploadLinkReturn;
getUploadLink: GetUploadLinkReturn; getUploadLink: GetUploadLinkReturn;
setLoggerLevel: Scalars["Boolean"]["output"]; setLoggerLevel: Scalars["Boolean"]["output"];
setSegmentDuration: Scalars["Boolean"]["output"]; setSegmentDuration: Scalars["Boolean"]["output"];
unfollowUser: UserGql;
updateShotAnnotations: UpdateShotAnnotationReturn; updateShotAnnotations: UpdateShotAnnotationReturn;
}; };
@@ -2038,6 +2040,10 @@ export type MutationEditUserArgs = {
input: EditUserInputGql; input: EditUserInputGql;
}; };
export type MutationFollowUserArgs = {
followedUserId: Scalars["Int"]["input"];
};
export type MutationGetHlsInitUploadLinkArgs = { export type MutationGetHlsInitUploadLinkArgs = {
videoId: Scalars["Int"]["input"]; videoId: Scalars["Int"]["input"];
}; };
@@ -2062,6 +2068,10 @@ export type MutationSetSegmentDurationArgs = {
videoId: Scalars["Int"]["input"]; videoId: Scalars["Int"]["input"];
}; };
export type MutationUnfollowUserArgs = {
followedUserId: Scalars["Int"]["input"];
};
export type MutationUpdateShotAnnotationsArgs = { export type MutationUpdateShotAnnotationsArgs = {
annotations: Array<UpdateAnnotationInputGql>; annotations: Array<UpdateAnnotationInputGql>;
shotId: Scalars["Int"]["input"]; shotId: Scalars["Int"]["input"];
@@ -2159,6 +2169,7 @@ export type Query = {
getUserTags: Array<TagGql>; getUserTags: Array<TagGql>;
getUserVideos: VideoHistoryGql; getUserVideos: VideoHistoryGql;
getUsernames: Array<Scalars["String"]["output"]>; getUsernames: Array<Scalars["String"]["output"]>;
getUsernamesAndFollowing: UsernamesAndFollowingResponse;
getVideo: VideoGql; getVideo: VideoGql;
getVideoMakePercentageIntervals: Array<MakePercentageIntervalGql>; getVideoMakePercentageIntervals: Array<MakePercentageIntervalGql>;
getVideos: Array<VideoGql>; getVideos: Array<VideoGql>;
@@ -2228,6 +2239,13 @@ export type QueryGetUsernamesArgs = {
matchString?: InputMaybe<Scalars["String"]["input"]>; matchString?: InputMaybe<Scalars["String"]["input"]>;
}; };
export type QueryGetUsernamesAndFollowingArgs = {
after?: InputMaybe<Scalars["String"]["input"]>;
limit?: InputMaybe<Scalars["Int"]["input"]>;
matchString?: InputMaybe<Scalars["String"]["input"]>;
userId: Scalars["Int"]["input"];
};
export type QueryGetVideoArgs = { export type QueryGetVideoArgs = {
debuggingJson?: InputMaybe<Scalars["JSON"]["input"]>; debuggingJson?: InputMaybe<Scalars["JSON"]["input"]>;
videoId: Scalars["Int"]["input"]; videoId: Scalars["Int"]["input"];
@@ -2504,6 +2522,8 @@ export type UserGql = {
createdAt?: Maybe<Scalars["DateTime"]["output"]>; createdAt?: Maybe<Scalars["DateTime"]["output"]>;
fargoRating?: Maybe<Scalars["Int"]["output"]>; fargoRating?: Maybe<Scalars["Int"]["output"]>;
firebaseUid: Scalars["String"]["output"]; firebaseUid: Scalars["String"]["output"];
followers?: Maybe<Array<Scalars["Int"]["output"]>>;
following?: Maybe<Array<Scalars["Int"]["output"]>>;
id: Scalars["Int"]["output"]; id: Scalars["Int"]["output"];
isAdmin: Scalars["Boolean"]["output"]; isAdmin: Scalars["Boolean"]["output"];
profileImageUri?: Maybe<Scalars["String"]["output"]>; profileImageUri?: Maybe<Scalars["String"]["output"]>;
@@ -2516,6 +2536,13 @@ export type UserPlayTimeGql = {
totalSeconds: Scalars["Float"]["output"]; totalSeconds: Scalars["Float"]["output"];
}; };
export type UsernamesAndFollowingResponse = {
__typename?: "UsernamesAndFollowingResponse";
followers: Array<Scalars["Int"]["output"]>;
following: Array<Scalars["Int"]["output"]>;
usernames: Array<Scalars["String"]["output"]>;
};
export type VideoFilterInput = { export type VideoFilterInput = {
isStreamCompleted?: InputMaybe<Scalars["Boolean"]["input"]>; isStreamCompleted?: InputMaybe<Scalars["Boolean"]["input"]>;
requireCursorCompletion?: Scalars["Boolean"]["input"]; requireCursorCompletion?: Scalars["Boolean"]["input"];
@@ -2747,6 +2774,28 @@ export type GetShotAnnotationTypesQuery = {
}>; }>;
}; };
export type UpdateShotAnnotationsMutationVariables = Exact<{
shotId: Scalars["Int"]["input"];
annotations: Array<UpdateAnnotationInputGql> | UpdateAnnotationInputGql;
}>;
export type UpdateShotAnnotationsMutation = {
__typename?: "Mutation";
updateShotAnnotations: {
__typename?: "UpdateShotAnnotationReturn";
value:
| { __typename?: "SuccessfulUpdate"; value: boolean }
| {
__typename?: "UpdateShotAnnotationErrors";
error?: {
__typename?: "DoesNotOwnShotErr";
shotId: number;
msg?: string | null;
} | null;
};
};
};
export type GetShotsWithVideoGqlQueryVariables = Exact<{ export type GetShotsWithVideoGqlQueryVariables = Exact<{
filterInput: FilterInput; filterInput: FilterInput;
limit?: InputMaybe<Scalars["Int"]["input"]>; limit?: InputMaybe<Scalars["Int"]["input"]>;
@@ -2822,6 +2871,16 @@ export type GetShotsWithMetadataFilterResultQuery = {
__typename?: "SerializedShotPathsGQL"; __typename?: "SerializedShotPathsGQL";
b64EncodedBuffer?: string | null; b64EncodedBuffer?: string | null;
} | null; } | null;
annotations: Array<{
__typename?: "ShotAnnotationGQL";
shotId: number;
notes: string;
type: {
__typename?: "ShotAnnotationTypeGQL";
id: number;
name: string;
};
}>;
}>; }>;
}; };
}; };
@@ -2878,6 +2937,16 @@ export type GetShotsWithMetadataQuery = {
__typename?: "SerializedShotPathsGQL"; __typename?: "SerializedShotPathsGQL";
b64EncodedBuffer?: string | null; b64EncodedBuffer?: string | null;
} | null; } | null;
annotations: Array<{
__typename?: "ShotAnnotationGQL";
shotId: number;
notes: string;
type: {
__typename?: "ShotAnnotationTypeGQL";
id: number;
name: string;
};
}>;
}>; }>;
}; };
}; };
@@ -2927,6 +2996,12 @@ export type GetShotsByIdsQuery = {
__typename?: "SerializedShotPathsGQL"; __typename?: "SerializedShotPathsGQL";
b64EncodedBuffer?: string | null; b64EncodedBuffer?: string | null;
} | null; } | null;
annotations: Array<{
__typename?: "ShotAnnotationGQL";
shotId: number;
notes: string;
type: { __typename?: "ShotAnnotationTypeGQL"; id: number; name: string };
}>;
}>; }>;
}; };
@@ -2969,6 +3044,12 @@ export type ShotWithAllFeaturesFragment = {
__typename?: "SerializedShotPathsGQL"; __typename?: "SerializedShotPathsGQL";
b64EncodedBuffer?: string | null; b64EncodedBuffer?: string | null;
} | null; } | null;
annotations: Array<{
__typename?: "ShotAnnotationGQL";
shotId: number;
notes: string;
type: { __typename?: "ShotAnnotationTypeGQL"; id: number; name: string };
}>;
}; };
export type GetProfileImageUploadLinkMutationVariables = Exact<{ export type GetProfileImageUploadLinkMutationVariables = Exact<{
@@ -3053,6 +3134,23 @@ export type GetUsernamesQuery = {
getUsernames: Array<string>; getUsernames: Array<string>;
}; };
export type GetUsernamesAndFollowingQueryVariables = Exact<{
userId: Scalars["Int"]["input"];
matchString: Scalars["String"]["input"];
limit?: InputMaybe<Scalars["Int"]["input"]>;
after?: InputMaybe<Scalars["String"]["input"]>;
}>;
export type GetUsernamesAndFollowingQuery = {
__typename?: "Query";
getUsernamesAndFollowing: {
__typename?: "UsernamesAndFollowingResponse";
followers: Array<number>;
following: Array<number>;
usernames: Array<string>;
};
};
export type GetUserTagsQueryVariables = Exact<{ [key: string]: never }>; export type GetUserTagsQueryVariables = Exact<{ [key: string]: never }>;
export type GetUserTagsQuery = { export type GetUserTagsQuery = {
@@ -3696,6 +3794,14 @@ export const ShotWithAllFeaturesFragmentDoc = gql`
serializedShotPaths { serializedShotPaths {
b64EncodedBuffer b64EncodedBuffer
} }
annotations {
shotId
type {
id
name
}
notes
}
} }
`; `;
export const VideoStreamMetadataFragmentDoc = gql` export const VideoStreamMetadataFragmentDoc = gql`
@@ -4260,6 +4366,70 @@ export type GetShotAnnotationTypesQueryResult = Apollo.QueryResult<
GetShotAnnotationTypesQuery, GetShotAnnotationTypesQuery,
GetShotAnnotationTypesQueryVariables GetShotAnnotationTypesQueryVariables
>; >;
export const UpdateShotAnnotationsDocument = gql`
mutation UpdateShotAnnotations(
$shotId: Int!
$annotations: [UpdateAnnotationInputGQL!]!
) {
updateShotAnnotations(shotId: $shotId, annotations: $annotations) {
value {
... on SuccessfulUpdate {
value
}
... on UpdateShotAnnotationErrors {
error {
shotId
msg
}
}
}
}
}
`;
export type UpdateShotAnnotationsMutationFn = Apollo.MutationFunction<
UpdateShotAnnotationsMutation,
UpdateShotAnnotationsMutationVariables
>;
/**
* __useUpdateShotAnnotationsMutation__
*
* To run a mutation, you first call `useUpdateShotAnnotationsMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useUpdateShotAnnotationsMutation` 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 [updateShotAnnotationsMutation, { data, loading, error }] = useUpdateShotAnnotationsMutation({
* variables: {
* shotId: // value for 'shotId'
* annotations: // value for 'annotations'
* },
* });
*/
export function useUpdateShotAnnotationsMutation(
baseOptions?: Apollo.MutationHookOptions<
UpdateShotAnnotationsMutation,
UpdateShotAnnotationsMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<
UpdateShotAnnotationsMutation,
UpdateShotAnnotationsMutationVariables
>(UpdateShotAnnotationsDocument, options);
}
export type UpdateShotAnnotationsMutationHookResult = ReturnType<
typeof useUpdateShotAnnotationsMutation
>;
export type UpdateShotAnnotationsMutationResult =
Apollo.MutationResult<UpdateShotAnnotationsMutation>;
export type UpdateShotAnnotationsMutationOptions = Apollo.BaseMutationOptions<
UpdateShotAnnotationsMutation,
UpdateShotAnnotationsMutationVariables
>;
export const GetShotsWithVideoGqlDocument = gql` export const GetShotsWithVideoGqlDocument = gql`
query GetShotsWithVideoGql($filterInput: FilterInput!, $limit: Int) { query GetShotsWithVideoGql($filterInput: FilterInput!, $limit: Int) {
getShotsWithMetadata(filterInput: $filterInput, limit: $limit) { getShotsWithMetadata(filterInput: $filterInput, limit: $limit) {
@@ -4947,6 +5117,94 @@ export type GetUsernamesQueryResult = Apollo.QueryResult<
GetUsernamesQuery, GetUsernamesQuery,
GetUsernamesQueryVariables GetUsernamesQueryVariables
>; >;
export const GetUsernamesAndFollowingDocument = gql`
query getUsernamesAndFollowing(
$userId: Int!
$matchString: String!
$limit: Int = null
$after: String = null
) {
getUsernamesAndFollowing(
userId: $userId
matchString: $matchString
limit: $limit
after: $after
) {
followers
following
usernames
}
}
`;
/**
* __useGetUsernamesAndFollowingQuery__
*
* To run a query within a React component, call `useGetUsernamesAndFollowingQuery` and pass it any options that fit your needs.
* When your component renders, `useGetUsernamesAndFollowingQuery` 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 } = useGetUsernamesAndFollowingQuery({
* variables: {
* userId: // value for 'userId'
* matchString: // value for 'matchString'
* limit: // value for 'limit'
* after: // value for 'after'
* },
* });
*/
export function useGetUsernamesAndFollowingQuery(
baseOptions: Apollo.QueryHookOptions<
GetUsernamesAndFollowingQuery,
GetUsernamesAndFollowingQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useQuery<
GetUsernamesAndFollowingQuery,
GetUsernamesAndFollowingQueryVariables
>(GetUsernamesAndFollowingDocument, options);
}
export function useGetUsernamesAndFollowingLazyQuery(
baseOptions?: Apollo.LazyQueryHookOptions<
GetUsernamesAndFollowingQuery,
GetUsernamesAndFollowingQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useLazyQuery<
GetUsernamesAndFollowingQuery,
GetUsernamesAndFollowingQueryVariables
>(GetUsernamesAndFollowingDocument, options);
}
export function useGetUsernamesAndFollowingSuspenseQuery(
baseOptions?: Apollo.SuspenseQueryHookOptions<
GetUsernamesAndFollowingQuery,
GetUsernamesAndFollowingQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useSuspenseQuery<
GetUsernamesAndFollowingQuery,
GetUsernamesAndFollowingQueryVariables
>(GetUsernamesAndFollowingDocument, options);
}
export type GetUsernamesAndFollowingQueryHookResult = ReturnType<
typeof useGetUsernamesAndFollowingQuery
>;
export type GetUsernamesAndFollowingLazyQueryHookResult = ReturnType<
typeof useGetUsernamesAndFollowingLazyQuery
>;
export type GetUsernamesAndFollowingSuspenseQueryHookResult = ReturnType<
typeof useGetUsernamesAndFollowingSuspenseQuery
>;
export type GetUsernamesAndFollowingQueryResult = Apollo.QueryResult<
GetUsernamesAndFollowingQuery,
GetUsernamesAndFollowingQueryVariables
>;
export const GetUserTagsDocument = gql` export const GetUserTagsDocument = gql`
query GetUserTags { query GetUserTags {
getUserTags { getUserTags {

View File

@@ -17,6 +17,25 @@ query GetShotAnnotationTypes {
} }
} }
mutation UpdateShotAnnotations(
$shotId: Int!
$annotations: [UpdateAnnotationInputGQL!]!
) {
updateShotAnnotations(shotId: $shotId, annotations: $annotations) {
value {
... on SuccessfulUpdate {
value
}
... on UpdateShotAnnotationErrors {
error {
shotId
msg
}
}
}
}
}
query GetShotsWithVideoGql($filterInput: FilterInput!, $limit: Int) { query GetShotsWithVideoGql($filterInput: FilterInput!, $limit: Int) {
getShotsWithMetadata(filterInput: $filterInput, limit: $limit) { getShotsWithMetadata(filterInput: $filterInput, limit: $limit) {
ids ids
@@ -115,4 +134,12 @@ fragment ShotWithAllFeatures on ShotGQL {
serializedShotPaths { serializedShotPaths {
b64EncodedBuffer b64EncodedBuffer
} }
annotations {
shotId
type {
id
name
}
notes
}
} }

View File

@@ -57,6 +57,24 @@ query getUsernames(
getUsernames(matchString: $matchString, limit: $limit, after: $after) getUsernames(matchString: $matchString, limit: $limit, after: $after)
} }
query getUsernamesAndFollowing(
$userId: Int!
$matchString: String!
$limit: Int = null
$after: String = null
) {
getUsernamesAndFollowing(
userId: $userId
matchString: $matchString
limit: $limit
after: $after
) {
followers
following
usernames
}
}
query GetUserTags { query GetUserTags {
getUserTags { getUserTags {
id id

View File

@@ -35,6 +35,12 @@ type Query {
limit: Int = null limit: Int = null
after: String = null after: String = null
): [String!]! ): [String!]!
getUsernamesAndFollowing(
userId: Int!
matchString: String = null
limit: Int = 100
after: String = null
): UsernamesAndFollowingResponse!
getPlayTime(userId: Int!): UserPlayTimeGQL! getPlayTime(userId: Int!): UserPlayTimeGQL!
getUserVideos( getUserVideos(
userId: Int = null userId: Int = null
@@ -343,6 +349,8 @@ type UserGQL {
profileImageUri: String profileImageUri: String
createdAt: DateTime createdAt: DateTime
updatedAt: DateTime updatedAt: DateTime
following: [Int!]
followers: [Int!]
} }
type ShotAnnotationGQL { type ShotAnnotationGQL {
@@ -546,6 +554,12 @@ input CreatedAfter @oneOf {
createdAt: DateTime createdAt: DateTime
} }
type UsernamesAndFollowingResponse {
usernames: [String!]!
following: [Int!]!
followers: [Int!]!
}
type UserPlayTimeGQL { type UserPlayTimeGQL {
totalSeconds: Float! totalSeconds: Float!
} }
@@ -596,6 +610,8 @@ type Mutation {
): GetProfileUploadLinkReturn! ): GetProfileUploadLinkReturn!
editProfileImageUri(profileImageUri: String!): UserGQL! editProfileImageUri(profileImageUri: String!): UserGQL!
editUser(input: EditUserInputGQL!): UserGQL! editUser(input: EditUserInputGQL!): UserGQL!
followUser(followedUserId: Int!): UserGQL!
unfollowUser(followedUserId: Int!): UserGQL!
createUploadStream( createUploadStream(
videoMetadata: VideoMetadataInput! videoMetadata: VideoMetadataInput!
): CreateUploadStreamReturn! ): CreateUploadStreamReturn!