Compare commits

...

3 Commits

Author SHA1 Message Date
Dean Wenstrand
ac479dc7e4 Camera claim flow: lease end/extend, claim preferences, inUse
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 18:44:01 -07:00
Dean Wenstrand
2c047292f0 Add tableSize/pocketSize to pool hall camera schema
All checks were successful
Tests / Tests (pull_request) Successful in 11s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 17:13:23 -07:00
9267cd8180 Merge pull request 'dean/pool-hall-gql' (#280) from dean/pool-hall-gql into master
Reviewed-on: #280
2026-07-04 16:35:00 +00:00
3 changed files with 335 additions and 5 deletions

View File

@@ -285,9 +285,11 @@ export type CreateCustomerPortalSessionResultGql = {
export type CreatePoolHallCameraInput = { export type CreatePoolHallCameraInput = {
name: Scalars["String"]["input"]; name: Scalars["String"]["input"];
pocketSize?: InputMaybe<Scalars["Float"]["input"]>;
poolHallId: Scalars["ID"]["input"]; poolHallId: Scalars["ID"]["input"];
streamPath?: InputMaybe<Scalars["String"]["input"]>; streamPath?: InputMaybe<Scalars["String"]["input"]>;
tableLabel?: InputMaybe<Scalars["String"]["input"]>; tableLabel?: InputMaybe<Scalars["String"]["input"]>;
tableSize?: InputMaybe<Scalars["Float"]["input"]>;
}; };
export type CreatePoolHallInput = { export type CreatePoolHallInput = {
@@ -2495,7 +2497,9 @@ export type Mutation = {
editShot: EditShotReturn; editShot: EditShotReturn;
editUploadStream: Scalars["Boolean"]["output"]; editUploadStream: Scalars["Boolean"]["output"];
editUser: UserGql; editUser: UserGql;
endCameraLease: CameraLease;
ensureStripeCustomerExists: UserGql; ensureStripeCustomerExists: UserGql;
extendCameraLease: CameraLease;
finalizePlayerAssignments: Array<PlayerClusterGql>; finalizePlayerAssignments: Array<PlayerClusterGql>;
findPrerecordTableLayout?: Maybe<HomographyInfoGql>; findPrerecordTableLayout?: Maybe<HomographyInfoGql>;
followUser: UserGql; followUser: UserGql;
@@ -2558,6 +2562,9 @@ export type MutationCreateBucketSetArgs = {
export type MutationCreateCameraClaimSessionArgs = { export type MutationCreateCameraClaimSessionArgs = {
cameraId: Scalars["ID"]["input"]; cameraId: Scalars["ID"]["input"];
durationMinutes?: InputMaybe<Scalars["Int"]["input"]>;
videoName?: InputMaybe<Scalars["String"]["input"]>;
videoPrivate?: InputMaybe<Scalars["Boolean"]["input"]>;
}; };
export type MutationCreateChallengeArgs = { export type MutationCreateChallengeArgs = {
@@ -2645,6 +2652,15 @@ export type MutationEditUserArgs = {
input: EditUserInputGql; input: EditUserInputGql;
}; };
export type MutationEndCameraLeaseArgs = {
leaseId: Scalars["ID"]["input"];
};
export type MutationExtendCameraLeaseArgs = {
additionalMinutes?: Scalars["Int"]["input"];
leaseId: Scalars["ID"]["input"];
};
export type MutationFinalizePlayerAssignmentsArgs = { export type MutationFinalizePlayerAssignmentsArgs = {
input: FinalizePlayerAssignmentsInput; input: FinalizePlayerAssignmentsInput;
}; };
@@ -2945,14 +2961,17 @@ export type PoolHallCamera = {
__typename?: "PoolHallCamera"; __typename?: "PoolHallCamera";
createdAt: Scalars["DateTime"]["output"]; createdAt: Scalars["DateTime"]["output"];
id: Scalars["ID"]["output"]; id: Scalars["ID"]["output"];
inUse: Scalars["Boolean"]["output"];
lastPublishedAt?: Maybe<Scalars["DateTime"]["output"]>; lastPublishedAt?: Maybe<Scalars["DateTime"]["output"]>;
lastUnpublishedAt?: Maybe<Scalars["DateTime"]["output"]>; lastUnpublishedAt?: Maybe<Scalars["DateTime"]["output"]>;
name: Scalars["String"]["output"]; name: Scalars["String"]["output"];
pocketSize?: Maybe<Scalars["Float"]["output"]>;
poolHall: PoolHall; poolHall: PoolHall;
poolHallId: Scalars["ID"]["output"]; poolHallId: Scalars["ID"]["output"];
status: Scalars["String"]["output"]; status: Scalars["String"]["output"];
streamPath: Scalars["String"]["output"]; streamPath: Scalars["String"]["output"];
tableLabel?: Maybe<Scalars["String"]["output"]>; tableLabel?: Maybe<Scalars["String"]["output"]>;
tableSize?: Maybe<Scalars["Float"]["output"]>;
updatedAt: Scalars["DateTime"]["output"]; updatedAt: Scalars["DateTime"]["output"];
}; };
@@ -3804,8 +3823,10 @@ export type UpdateAnnotationInputGql = {
export type UpdatePoolHallCameraInput = { export type UpdatePoolHallCameraInput = {
id: Scalars["ID"]["input"]; id: Scalars["ID"]["input"];
name?: InputMaybe<Scalars["String"]["input"]>; name?: InputMaybe<Scalars["String"]["input"]>;
pocketSize?: InputMaybe<Scalars["Float"]["input"]>;
status?: InputMaybe<Scalars["String"]["input"]>; status?: InputMaybe<Scalars["String"]["input"]>;
tableLabel?: InputMaybe<Scalars["String"]["input"]>; tableLabel?: InputMaybe<Scalars["String"]["input"]>;
tableSize?: InputMaybe<Scalars["Float"]["input"]>;
}; };
export type UpdatePoolHallInput = { export type UpdatePoolHallInput = {
@@ -5529,6 +5550,9 @@ export type PoolHallCameraFieldsFragment = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -5543,6 +5567,9 @@ export type PoolHallCameraWithHallFieldsFragment = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -5573,6 +5600,9 @@ export type PoolHallCameraStreamCredentialsFieldsFragment = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -5613,6 +5643,9 @@ export type CameraClaimSessionFieldsFragment = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -5654,6 +5687,9 @@ export type CameraLeaseFieldsFragment = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -5725,6 +5761,9 @@ export type GetPoolHallCamerasQuery = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -5758,6 +5797,9 @@ export type GetClaimableCamerasQuery = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -5804,6 +5846,9 @@ export type GetCameraClaimSessionQuery = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -5852,6 +5897,9 @@ export type GetActiveCameraLeaseQuery = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -5930,6 +5978,9 @@ export type CreatePoolHallCameraMutation = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -5964,6 +6015,9 @@ export type UpdatePoolHallCameraMutation = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -6001,6 +6055,9 @@ export type RotatePoolHallCameraStreamKeyMutation = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -6023,6 +6080,9 @@ export type RotatePoolHallCameraStreamKeyMutation = {
export type CreateCameraClaimSessionMutationVariables = Exact<{ export type CreateCameraClaimSessionMutationVariables = Exact<{
cameraId: Scalars["ID"]["input"]; cameraId: Scalars["ID"]["input"];
durationMinutes?: InputMaybe<Scalars["Int"]["input"]>;
videoName?: InputMaybe<Scalars["String"]["input"]>;
videoPrivate?: InputMaybe<Scalars["Boolean"]["input"]>;
}>; }>;
export type CreateCameraClaimSessionMutation = { export type CreateCameraClaimSessionMutation = {
@@ -6048,6 +6108,9 @@ export type CreateCameraClaimSessionMutation = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -6095,6 +6158,112 @@ export type CancelCameraClaimSessionMutation = {
tableLabel?: string | null; tableLabel?: string | null;
streamPath: string; streamPath: string;
status: string; status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null;
createdAt: any;
updatedAt: any;
poolHall: {
__typename?: "PoolHall";
id: string;
name: string;
address?: string | null;
latitude?: number | null;
longitude?: number | null;
timezone?: string | null;
status: string;
createdAt: any;
updatedAt: any;
};
};
};
};
export type EndCameraLeaseMutationVariables = Exact<{
leaseId: Scalars["ID"]["input"];
}>;
export type EndCameraLeaseMutation = {
__typename?: "Mutation";
endCameraLease: {
__typename?: "CameraLease";
id: string;
cameraId: string;
claimSessionId?: string | null;
userId: string;
videoId?: string | null;
status: string;
startedAt: any;
endedAt?: any | null;
expiresAt?: any | null;
endReason?: string | null;
createdAt: any;
updatedAt: any;
camera: {
__typename?: "PoolHallCamera";
id: string;
poolHallId: string;
name: string;
tableLabel?: string | null;
streamPath: string;
status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null;
createdAt: any;
updatedAt: any;
poolHall: {
__typename?: "PoolHall";
id: string;
name: string;
address?: string | null;
latitude?: number | null;
longitude?: number | null;
timezone?: string | null;
status: string;
createdAt: any;
updatedAt: any;
};
};
};
};
export type ExtendCameraLeaseMutationVariables = Exact<{
leaseId: Scalars["ID"]["input"];
additionalMinutes?: Scalars["Int"]["input"];
}>;
export type ExtendCameraLeaseMutation = {
__typename?: "Mutation";
extendCameraLease: {
__typename?: "CameraLease";
id: string;
cameraId: string;
claimSessionId?: string | null;
userId: string;
videoId?: string | null;
status: string;
startedAt: any;
endedAt?: any | null;
expiresAt?: any | null;
endReason?: string | null;
createdAt: any;
updatedAt: any;
camera: {
__typename?: "PoolHallCamera";
id: string;
poolHallId: string;
name: string;
tableLabel?: string | null;
streamPath: string;
status: string;
tableSize?: number | null;
pocketSize?: number | null;
inUse: boolean;
lastPublishedAt?: any | null; lastPublishedAt?: any | null;
lastUnpublishedAt?: any | null; lastUnpublishedAt?: any | null;
createdAt: any; createdAt: any;
@@ -8432,6 +8601,9 @@ export const PoolHallCameraFieldsFragmentDoc = gql`
tableLabel tableLabel
streamPath streamPath
status status
tableSize
pocketSize
inUse
lastPublishedAt lastPublishedAt
lastUnpublishedAt lastUnpublishedAt
createdAt createdAt
@@ -13058,8 +13230,18 @@ export type RotatePoolHallCameraStreamKeyMutationOptions =
RotatePoolHallCameraStreamKeyMutationVariables RotatePoolHallCameraStreamKeyMutationVariables
>; >;
export const CreateCameraClaimSessionDocument = gql` export const CreateCameraClaimSessionDocument = gql`
mutation CreateCameraClaimSession($cameraId: ID!) { mutation CreateCameraClaimSession(
createCameraClaimSession(cameraId: $cameraId) { $cameraId: ID!
$durationMinutes: Int
$videoName: String
$videoPrivate: Boolean
) {
createCameraClaimSession(
cameraId: $cameraId
durationMinutes: $durationMinutes
videoName: $videoName
videoPrivate: $videoPrivate
) {
...CameraClaimSessionFields ...CameraClaimSessionFields
} }
} }
@@ -13084,6 +13266,9 @@ export type CreateCameraClaimSessionMutationFn = Apollo.MutationFunction<
* const [createCameraClaimSessionMutation, { data, loading, error }] = useCreateCameraClaimSessionMutation({ * const [createCameraClaimSessionMutation, { data, loading, error }] = useCreateCameraClaimSessionMutation({
* variables: { * variables: {
* cameraId: // value for 'cameraId' * cameraId: // value for 'cameraId'
* durationMinutes: // value for 'durationMinutes'
* videoName: // value for 'videoName'
* videoPrivate: // value for 'videoPrivate'
* }, * },
* }); * });
*/ */
@@ -13161,6 +13346,112 @@ export type CancelCameraClaimSessionMutationOptions =
CancelCameraClaimSessionMutation, CancelCameraClaimSessionMutation,
CancelCameraClaimSessionMutationVariables CancelCameraClaimSessionMutationVariables
>; >;
export const EndCameraLeaseDocument = gql`
mutation EndCameraLease($leaseId: ID!) {
endCameraLease(leaseId: $leaseId) {
...CameraLeaseFields
}
}
${CameraLeaseFieldsFragmentDoc}
`;
export type EndCameraLeaseMutationFn = Apollo.MutationFunction<
EndCameraLeaseMutation,
EndCameraLeaseMutationVariables
>;
/**
* __useEndCameraLeaseMutation__
*
* To run a mutation, you first call `useEndCameraLeaseMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useEndCameraLeaseMutation` 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 [endCameraLeaseMutation, { data, loading, error }] = useEndCameraLeaseMutation({
* variables: {
* leaseId: // value for 'leaseId'
* },
* });
*/
export function useEndCameraLeaseMutation(
baseOptions?: Apollo.MutationHookOptions<
EndCameraLeaseMutation,
EndCameraLeaseMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<
EndCameraLeaseMutation,
EndCameraLeaseMutationVariables
>(EndCameraLeaseDocument, options);
}
export type EndCameraLeaseMutationHookResult = ReturnType<
typeof useEndCameraLeaseMutation
>;
export type EndCameraLeaseMutationResult =
Apollo.MutationResult<EndCameraLeaseMutation>;
export type EndCameraLeaseMutationOptions = Apollo.BaseMutationOptions<
EndCameraLeaseMutation,
EndCameraLeaseMutationVariables
>;
export const ExtendCameraLeaseDocument = gql`
mutation ExtendCameraLease($leaseId: ID!, $additionalMinutes: Int! = 60) {
extendCameraLease(
leaseId: $leaseId
additionalMinutes: $additionalMinutes
) {
...CameraLeaseFields
}
}
${CameraLeaseFieldsFragmentDoc}
`;
export type ExtendCameraLeaseMutationFn = Apollo.MutationFunction<
ExtendCameraLeaseMutation,
ExtendCameraLeaseMutationVariables
>;
/**
* __useExtendCameraLeaseMutation__
*
* To run a mutation, you first call `useExtendCameraLeaseMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useExtendCameraLeaseMutation` 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 [extendCameraLeaseMutation, { data, loading, error }] = useExtendCameraLeaseMutation({
* variables: {
* leaseId: // value for 'leaseId'
* additionalMinutes: // value for 'additionalMinutes'
* },
* });
*/
export function useExtendCameraLeaseMutation(
baseOptions?: Apollo.MutationHookOptions<
ExtendCameraLeaseMutation,
ExtendCameraLeaseMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<
ExtendCameraLeaseMutation,
ExtendCameraLeaseMutationVariables
>(ExtendCameraLeaseDocument, options);
}
export type ExtendCameraLeaseMutationHookResult = ReturnType<
typeof useExtendCameraLeaseMutation
>;
export type ExtendCameraLeaseMutationResult =
Apollo.MutationResult<ExtendCameraLeaseMutation>;
export type ExtendCameraLeaseMutationOptions = Apollo.BaseMutationOptions<
ExtendCameraLeaseMutation,
ExtendCameraLeaseMutationVariables
>;
export const ReactToVideoDocument = gql` export const ReactToVideoDocument = gql`
mutation ReactToVideo($videoId: Int!, $reaction: ReactionEnum) { mutation ReactToVideo($videoId: Int!, $reaction: ReactionEnum) {
reactToVideo(videoId: $videoId, reaction: $reaction) reactToVideo(videoId: $videoId, reaction: $reaction)

View File

@@ -17,6 +17,9 @@ fragment PoolHallCameraFields on PoolHallCamera {
tableLabel tableLabel
streamPath streamPath
status status
tableSize
pocketSize
inUse
lastPublishedAt lastPublishedAt
lastUnpublishedAt lastUnpublishedAt
createdAt createdAt
@@ -139,8 +142,18 @@ mutation RotatePoolHallCameraStreamKey($cameraId: ID!) {
} }
} }
mutation CreateCameraClaimSession($cameraId: ID!) { mutation CreateCameraClaimSession(
createCameraClaimSession(cameraId: $cameraId) { $cameraId: ID!
$durationMinutes: Int
$videoName: String
$videoPrivate: Boolean
) {
createCameraClaimSession(
cameraId: $cameraId
durationMinutes: $durationMinutes
videoName: $videoName
videoPrivate: $videoPrivate
) {
...CameraClaimSessionFields ...CameraClaimSessionFields
} }
} }
@@ -150,3 +163,15 @@ mutation CancelCameraClaimSession($claimSessionId: ID!) {
...CameraClaimSessionFields ...CameraClaimSessionFields
} }
} }
mutation EndCameraLease($leaseId: ID!) {
endCameraLease(leaseId: $leaseId) {
...CameraLeaseFields
}
}
mutation ExtendCameraLease($leaseId: ID!, $additionalMinutes: Int! = 60) {
extendCameraLease(leaseId: $leaseId, additionalMinutes: $additionalMinutes) {
...CameraLeaseFields
}
}

View File

@@ -907,10 +907,13 @@ type PoolHallCamera {
tableLabel: String tableLabel: String
streamPath: String! streamPath: String!
status: String! status: String!
tableSize: Float
pocketSize: Float
lastPublishedAt: DateTime lastPublishedAt: DateTime
lastUnpublishedAt: DateTime lastUnpublishedAt: DateTime
createdAt: DateTime! createdAt: DateTime!
updatedAt: DateTime! updatedAt: DateTime!
inUse: Boolean!
poolHall: PoolHall! poolHall: PoolHall!
} }
@@ -1401,8 +1404,15 @@ type Mutation {
): PoolHallCameraStreamCredentials! ): PoolHallCameraStreamCredentials!
updatePoolHallCamera(input: UpdatePoolHallCameraInput!): PoolHallCamera! updatePoolHallCamera(input: UpdatePoolHallCameraInput!): PoolHallCamera!
rotatePoolHallCameraStreamKey(cameraId: ID!): PoolHallCameraStreamCredentials! rotatePoolHallCameraStreamKey(cameraId: ID!): PoolHallCameraStreamCredentials!
createCameraClaimSession(cameraId: ID!): CameraClaimSession! createCameraClaimSession(
cameraId: ID!
durationMinutes: Int = null
videoName: String = null
videoPrivate: Boolean = null
): CameraClaimSession!
cancelCameraClaimSession(claimSessionId: ID!): CameraClaimSession! cancelCameraClaimSession(claimSessionId: ID!): CameraClaimSession!
endCameraLease(leaseId: ID!): CameraLease!
extendCameraLease(leaseId: ID!, additionalMinutes: Int! = 60): CameraLease!
finalizePlayerAssignments( finalizePlayerAssignments(
input: FinalizePlayerAssignmentsInput! input: FinalizePlayerAssignmentsInput!
): [PlayerClusterGQL!]! ): [PlayerClusterGQL!]!
@@ -1511,6 +1521,8 @@ input CreatePoolHallCameraInput {
name: String! name: String!
tableLabel: String = null tableLabel: String = null
streamPath: String = null streamPath: String = null
tableSize: Float = null
pocketSize: Float = null
} }
input UpdatePoolHallCameraInput { input UpdatePoolHallCameraInput {
@@ -1518,6 +1530,8 @@ input UpdatePoolHallCameraInput {
name: String = null name: String = null
tableLabel: String = null tableLabel: String = null
status: String = null status: String = null
tableSize: Float = null
pocketSize: Float = null
} }
input FinalizePlayerAssignmentsInput { input FinalizePlayerAssignmentsInput {