Compare commits

...

4 Commits

Author SHA1 Message Date
2699d29d7b Create get shots by ids operation
All checks were successful
Tests / Tests (pull_request) Successful in 16s
2024-09-29 22:53:24 -06:00
63a07d58ca Add get shots by Ids 2024-09-29 22:16:50 -06:00
59fe332fe0 Add ids to GetShotsResult 2024-09-26 21:47:44 -06:00
33723f4ea2 Improve TimeInterval type 2024-09-23 15:13:45 -06:00
3 changed files with 265 additions and 23 deletions

View File

@@ -72,6 +72,12 @@ export type AggregationInput =
} }
| { bucketSet?: never; datetimeRange?: never; enum: EnumAggregation }; | { bucketSet?: never; datetimeRange?: never; enum: EnumAggregation };
export enum AlignedIntervalEnum {
Month = "MONTH",
Week = "WEEK",
Year = "YEAR",
}
export type BankFeaturesGql = { export type BankFeaturesGql = {
__typename?: "BankFeaturesGQL"; __typename?: "BankFeaturesGQL";
bankAngle: Scalars["Float"]["output"]; bankAngle: Scalars["Float"]["output"];
@@ -1503,6 +1509,7 @@ export type GetShotsPagination = {
export type GetShotsResult = { export type GetShotsResult = {
__typename?: "GetShotsResult"; __typename?: "GetShotsResult";
count?: Maybe<Scalars["Int"]["output"]>; count?: Maybe<Scalars["Int"]["output"]>;
ids: Array<Scalars["Int"]["output"]>;
shots: Array<ShotGql>; shots: Array<ShotGql>;
}; };
@@ -1727,6 +1734,7 @@ export type Query = {
getPlayTime: UserPlayTimeGql; getPlayTime: UserPlayTimeGql;
getShotAnnotationTypes: Array<ShotAnnotationTypeGql>; getShotAnnotationTypes: Array<ShotAnnotationTypeGql>;
getShots: Array<ShotGql>; getShots: Array<ShotGql>;
getShotsByIds: Array<ShotGql>;
getShotsWithMetadata: GetShotsResult; getShotsWithMetadata: GetShotsResult;
getUser?: Maybe<UserGql>; getUser?: Maybe<UserGql>;
getUserTags: Array<TagGql>; getUserTags: Array<TagGql>;
@@ -1760,6 +1768,10 @@ export type QueryGetShotsArgs = {
shotsPagination?: InputMaybe<GetShotsPagination>; shotsPagination?: InputMaybe<GetShotsPagination>;
}; };
export type QueryGetShotsByIdsArgs = {
ids: Array<Scalars["Int"]["input"]>;
};
export type QueryGetShotsWithMetadataArgs = { export type QueryGetShotsWithMetadataArgs = {
filterInput: FilterInput; filterInput: FilterInput;
limit?: Scalars["Int"]["input"]; limit?: Scalars["Int"]["input"];
@@ -1914,20 +1926,17 @@ export type TargetMetricsGql = {
spinTypeCounts?: Maybe<SpinTypeCountsGql>; spinTypeCounts?: Maybe<SpinTypeCountsGql>;
}; };
export type TimeInterval = { export type TimeDeltaGql = {
/** True eg 1/15-3/15 => [(1/15,1/31), (2/1,2/28), (3/1,3/15)] False eg 1/15-2/15 => [(1/15,2/14), (2/14,3/15)] */
calendarAlignedMonths?: Scalars["Boolean"]["input"];
days?: InputMaybe<Scalars["Int"]["input"]>; days?: InputMaybe<Scalars["Int"]["input"]>;
hours?: InputMaybe<Scalars["Int"]["input"]>;
minutes?: InputMaybe<Scalars["Int"]["input"]>;
months?: InputMaybe<Scalars["Int"]["input"]>; months?: InputMaybe<Scalars["Int"]["input"]>;
/** A second is the base unit and cannot be subdivided */
seconds?: InputMaybe<Scalars["Int"]["input"]>;
weeks?: InputMaybe<Scalars["Int"]["input"]>; weeks?: InputMaybe<Scalars["Int"]["input"]>;
/** Assumes a year is 365 days long */
years?: InputMaybe<Scalars["Int"]["input"]>; years?: InputMaybe<Scalars["Int"]["input"]>;
}; };
export type TimeInterval =
| { aligned: AlignedIntervalEnum; timedelta?: never }
| { aligned?: never; timedelta: TimeDeltaGql };
export type TooManyInitUploadsErr = { export type TooManyInitUploadsErr = {
__typename?: "TooManyInitUploadsErr"; __typename?: "TooManyInitUploadsErr";
linksRequested: Scalars["Int"]["output"]; linksRequested: Scalars["Int"]["output"];
@@ -2371,6 +2380,62 @@ export type GetShotsWithMetadataQuery = {
}; };
}; };
export type GetShotsByIdsQueryVariables = Exact<{
ids: Array<Scalars["Int"]["input"]> | Scalars["Int"]["input"];
includeCreatedAt?: Scalars["Boolean"]["input"];
includeUpdatedAt?: Scalars["Boolean"]["input"];
includeCueObjectFeatures?: Scalars["Boolean"]["input"];
includePocketingIntentionFeatures?: Scalars["Boolean"]["input"];
includeCueObjectDistance?: Scalars["Boolean"]["input"];
includeCueObjectAngle?: Scalars["Boolean"]["input"];
includeCueBallSpeed?: Scalars["Boolean"]["input"];
includeSpinType?: Scalars["Boolean"]["input"];
includeShotDirection?: Scalars["Boolean"]["input"];
includeTargetPocketDistance?: Scalars["Boolean"]["input"];
includeMake?: Scalars["Boolean"]["input"];
includeIntendedPocketType?: Scalars["Boolean"]["input"];
}>;
export type GetShotsByIdsQuery = {
__typename?: "Query";
getShotsByIds: Array<{
__typename?: "ShotGQL";
id: number;
videoId: number;
startFrame: number;
endFrame: number;
falsePositiveScore?: number | null;
createdAt?: any | null;
updatedAt?: any | null;
user?: { __typename?: "UserGQL"; id: number } | null;
video?: {
__typename?: "VideoGQL";
stream?: {
__typename?: "UploadStreamGQL";
resolution: {
__typename?: "VideoResolutionGQL";
width?: number | null;
height?: number | null;
};
} | null;
} | null;
cueObjectFeatures?: {
__typename?: "CueObjectFeaturesGQL";
cueObjectDistance?: number | null;
cueObjectAngle?: number | null;
cueBallSpeed?: number | null;
shotDirection?: ShotDirectionEnum | null;
spinType?: SpinTypeEnum | null;
} | null;
pocketingIntentionFeatures?: {
__typename?: "PocketingIntentionFeaturesGQL";
targetPocketDistance?: number | null;
make?: boolean | null;
intendedPocketType?: PocketEnum | null;
} | null;
}>;
};
export type GetProfileImageUploadLinkMutationVariables = Exact<{ export type GetProfileImageUploadLinkMutationVariables = Exact<{
fileExt?: InputMaybe<Scalars["String"]["input"]>; fileExt?: InputMaybe<Scalars["String"]["input"]>;
}>; }>;
@@ -3686,6 +3751,135 @@ export type GetShotsWithMetadataQueryResult = Apollo.QueryResult<
GetShotsWithMetadataQuery, GetShotsWithMetadataQuery,
GetShotsWithMetadataQueryVariables GetShotsWithMetadataQueryVariables
>; >;
export const GetShotsByIdsDocument = gql`
query GetShotsByIds(
$ids: [Int!]!
$includeCreatedAt: Boolean! = false
$includeUpdatedAt: Boolean! = false
$includeCueObjectFeatures: Boolean! = false
$includePocketingIntentionFeatures: Boolean! = false
$includeCueObjectDistance: Boolean! = false
$includeCueObjectAngle: Boolean! = false
$includeCueBallSpeed: Boolean! = false
$includeSpinType: Boolean! = false
$includeShotDirection: Boolean! = false
$includeTargetPocketDistance: Boolean! = false
$includeMake: Boolean! = false
$includeIntendedPocketType: Boolean! = false
) {
getShotsByIds(ids: $ids) {
id
videoId
startFrame
endFrame
user {
id
}
falsePositiveScore
video {
stream {
resolution {
width
height
}
}
}
createdAt @include(if: $includeCreatedAt)
updatedAt @include(if: $includeUpdatedAt)
cueObjectFeatures @include(if: $includeCueObjectFeatures) {
cueObjectDistance @include(if: $includeCueObjectDistance)
cueObjectAngle @include(if: $includeCueObjectAngle)
cueBallSpeed @include(if: $includeCueBallSpeed)
shotDirection @include(if: $includeShotDirection)
spinType @include(if: $includeSpinType)
}
pocketingIntentionFeatures
@include(if: $includePocketingIntentionFeatures) {
targetPocketDistance @include(if: $includeTargetPocketDistance)
make @include(if: $includeMake)
intendedPocketType @include(if: $includeIntendedPocketType)
}
}
}
`;
/**
* __useGetShotsByIdsQuery__
*
* To run a query within a React component, call `useGetShotsByIdsQuery` and pass it any options that fit your needs.
* When your component renders, `useGetShotsByIdsQuery` 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 } = useGetShotsByIdsQuery({
* variables: {
* ids: // value for 'ids'
* includeCreatedAt: // value for 'includeCreatedAt'
* includeUpdatedAt: // value for 'includeUpdatedAt'
* includeCueObjectFeatures: // value for 'includeCueObjectFeatures'
* includePocketingIntentionFeatures: // value for 'includePocketingIntentionFeatures'
* includeCueObjectDistance: // value for 'includeCueObjectDistance'
* includeCueObjectAngle: // value for 'includeCueObjectAngle'
* includeCueBallSpeed: // value for 'includeCueBallSpeed'
* includeSpinType: // value for 'includeSpinType'
* includeShotDirection: // value for 'includeShotDirection'
* includeTargetPocketDistance: // value for 'includeTargetPocketDistance'
* includeMake: // value for 'includeMake'
* includeIntendedPocketType: // value for 'includeIntendedPocketType'
* },
* });
*/
export function useGetShotsByIdsQuery(
baseOptions: Apollo.QueryHookOptions<
GetShotsByIdsQuery,
GetShotsByIdsQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useQuery<GetShotsByIdsQuery, GetShotsByIdsQueryVariables>(
GetShotsByIdsDocument,
options,
);
}
export function useGetShotsByIdsLazyQuery(
baseOptions?: Apollo.LazyQueryHookOptions<
GetShotsByIdsQuery,
GetShotsByIdsQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useLazyQuery<GetShotsByIdsQuery, GetShotsByIdsQueryVariables>(
GetShotsByIdsDocument,
options,
);
}
export function useGetShotsByIdsSuspenseQuery(
baseOptions?: Apollo.SuspenseQueryHookOptions<
GetShotsByIdsQuery,
GetShotsByIdsQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useSuspenseQuery<
GetShotsByIdsQuery,
GetShotsByIdsQueryVariables
>(GetShotsByIdsDocument, options);
}
export type GetShotsByIdsQueryHookResult = ReturnType<
typeof useGetShotsByIdsQuery
>;
export type GetShotsByIdsLazyQueryHookResult = ReturnType<
typeof useGetShotsByIdsLazyQuery
>;
export type GetShotsByIdsSuspenseQueryHookResult = ReturnType<
typeof useGetShotsByIdsSuspenseQuery
>;
export type GetShotsByIdsQueryResult = Apollo.QueryResult<
GetShotsByIdsQuery,
GetShotsByIdsQueryVariables
>;
export const GetProfileImageUploadLinkDocument = gql` export const GetProfileImageUploadLinkDocument = gql`
mutation getProfileImageUploadLink($fileExt: String = ".png") { mutation getProfileImageUploadLink($fileExt: String = ".png") {
getProfileImageUploadLink(fileExt: $fileExt) { getProfileImageUploadLink(fileExt: $fileExt) {

View File

@@ -139,3 +139,53 @@ query GetShotsWithMetadata(
} }
} }
} }
query GetShotsByIds(
$ids: [Int!]!
$includeCreatedAt: Boolean! = false
$includeUpdatedAt: Boolean! = false
$includeCueObjectFeatures: Boolean! = false
$includePocketingIntentionFeatures: Boolean! = false
$includeCueObjectDistance: Boolean! = false
$includeCueObjectAngle: Boolean! = false
$includeCueBallSpeed: Boolean! = false
$includeSpinType: Boolean! = false
$includeShotDirection: Boolean! = false
$includeTargetPocketDistance: Boolean! = false
$includeMake: Boolean! = false
$includeIntendedPocketType: Boolean! = false
) {
getShotsByIds(ids: $ids) {
id
videoId
startFrame
endFrame
user {
id
}
falsePositiveScore
video {
stream {
resolution {
width
height
}
}
}
createdAt @include(if: $includeCreatedAt)
updatedAt @include(if: $includeUpdatedAt)
cueObjectFeatures @include(if: $includeCueObjectFeatures) {
cueObjectDistance @include(if: $includeCueObjectDistance)
cueObjectAngle @include(if: $includeCueObjectAngle)
cueBallSpeed @include(if: $includeCueBallSpeed)
shotDirection @include(if: $includeShotDirection)
spinType @include(if: $includeSpinType)
}
pocketingIntentionFeatures
@include(if: $includePocketingIntentionFeatures) {
targetPocketDistance @include(if: $includeTargetPocketDistance)
make @include(if: $includeMake)
intendedPocketType @include(if: $includeIntendedPocketType)
}
}
}

View File

@@ -19,6 +19,7 @@ type Query {
shotsPagination: GetShotsPagination = null shotsPagination: GetShotsPagination = null
limit: Int! = 500 limit: Int! = 500
): [ShotGQL!]! ): [ShotGQL!]!
getShotsByIds(ids: [Int!]!): [ShotGQL!]!
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]! getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
getUser(userId: Int!): UserGQL getUser(userId: Int!): UserGQL
getLoggedInUser: UserGQL getLoggedInUser: UserGQL
@@ -107,26 +108,22 @@ Date with time (isoformat)
""" """
scalar DateTime scalar DateTime
input TimeInterval { input TimeInterval @oneOf {
""" timedelta: TimeDeltaGQL
A second is the base unit and cannot be subdivided aligned: AlignedIntervalEnum
""" }
seconds: Int = 0
minutes: Int = 0 input TimeDeltaGQL {
hours: Int = 0
days: Int = 0 days: Int = 0
weeks: Int = 0 weeks: Int = 0
months: Int = 0 months: Int = 0
"""
Assumes a year is 365 days long
"""
years: Int = 0 years: Int = 0
}
""" enum AlignedIntervalEnum {
True eg 1/15-3/15 => [(1/15,1/31), (2/1,2/28), (3/1,3/15)] False eg 1/15-2/15 => [(1/15,2/14), (2/14,3/15)] MONTH
""" YEAR
calendarAlignedMonths: Boolean! = true WEEK
} }
input FilterInput @oneOf { input FilterInput @oneOf {
@@ -248,6 +245,7 @@ type MakePercentageIntervalGQL {
type GetShotsResult { type GetShotsResult {
shots: [ShotGQL!]! shots: [ShotGQL!]!
count: Int count: Int
ids: [Int!]!
} }
type ShotGQL { type ShotGQL {