Add player cluster + labeling mutation types
All checks were successful
Tests / Tests (pull_request) Successful in 10s
All checks were successful
Tests / Tests (pull_request) Successful in 10s
Schema additions for the per-video player labeling UI:
* `PlayerClusterGQL` / `PlayerClusterShotGQL` — read shape.
* `FinalizePlayerAssignmentsInput` + `ClusterAssignmentInput` +
`ShotMoveInput` — write shape.
* Query: `videoPlayerClusters(videoId)`.
* Mutation: `finalizePlayerAssignments(input)`.
Generated by `just gql` from the backend type definitions in
`railbird/datatypes/gql/shooter.py` and resolvers in
`railbird/server/resolvers/shooter.py`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -205,6 +205,11 @@ export enum ClientUploadStatusEnum {
|
||||
UploadEnabled = "UPLOAD_ENABLED",
|
||||
}
|
||||
|
||||
export type ClusterAssignmentInput = {
|
||||
clusterId: Scalars["Int"]["input"];
|
||||
userId?: InputMaybe<Scalars["Int"]["input"]>;
|
||||
};
|
||||
|
||||
export type CommentGql = {
|
||||
__typename?: "CommentGQL";
|
||||
id: Scalars["Int"]["output"];
|
||||
@@ -224,6 +229,11 @@ export type CreateBucketSetInput = {
|
||||
keyName: Scalars["String"]["input"];
|
||||
};
|
||||
|
||||
export type CreateCustomerPortalSessionResultGql = {
|
||||
__typename?: "CreateCustomerPortalSessionResultGQL";
|
||||
portalUrl: Scalars["String"]["output"];
|
||||
};
|
||||
|
||||
export type CreateSubscriptionResultGql = {
|
||||
__typename?: "CreateSubscriptionResultGQL";
|
||||
checkoutUrl: Scalars["String"]["output"];
|
||||
@@ -2177,6 +2187,12 @@ export type FilterInput =
|
||||
videoId: Array<Scalars["Int"]["input"]>;
|
||||
};
|
||||
|
||||
export type FinalizePlayerAssignmentsInput = {
|
||||
clusterAssignments?: Array<ClusterAssignmentInput>;
|
||||
shotMoves?: Array<ShotMoveInput>;
|
||||
videoId: Scalars["Int"]["input"];
|
||||
};
|
||||
|
||||
export type FloatOrdering = {
|
||||
descending?: Scalars["Boolean"]["input"];
|
||||
startingAt?: InputMaybe<Scalars["Float"]["input"]>;
|
||||
@@ -2373,6 +2389,7 @@ export type Mutation = {
|
||||
commentOnVideo: Scalars["Boolean"]["output"];
|
||||
createBucketSet: BucketSetGql;
|
||||
createChallenge: Challenge;
|
||||
createCustomerPortalSession: CreateCustomerPortalSessionResultGql;
|
||||
createRuleSet: RuleSet;
|
||||
createSubscription: CreateSubscriptionResultGql;
|
||||
createUploadStream: CreateUploadStreamReturn;
|
||||
@@ -2388,6 +2405,7 @@ export type Mutation = {
|
||||
editUploadStream: Scalars["Boolean"]["output"];
|
||||
editUser: UserGql;
|
||||
ensureStripeCustomerExists: UserGql;
|
||||
finalizePlayerAssignments: Array<PlayerClusterGql>;
|
||||
findPrerecordTableLayout?: Maybe<HomographyInfoGql>;
|
||||
followUser: UserGql;
|
||||
getHlsInitUploadLink: GetUploadLinkReturn;
|
||||
@@ -2511,6 +2529,10 @@ export type MutationEditUserArgs = {
|
||||
input: EditUserInputGql;
|
||||
};
|
||||
|
||||
export type MutationFinalizePlayerAssignmentsArgs = {
|
||||
input: FinalizePlayerAssignmentsInput;
|
||||
};
|
||||
|
||||
export type MutationFindPrerecordTableLayoutArgs = {
|
||||
b64Image: Scalars["String"]["input"];
|
||||
videoId: Scalars["Int"]["input"];
|
||||
@@ -2673,6 +2695,29 @@ export type PageInfoGql = {
|
||||
hasNextPage: Scalars["Boolean"]["output"];
|
||||
};
|
||||
|
||||
export type PlayerClusterGql = {
|
||||
__typename?: "PlayerClusterGQL";
|
||||
clusterId: Scalars["Int"]["output"];
|
||||
confirmed: Scalars["Boolean"]["output"];
|
||||
nShots: Scalars["Int"]["output"];
|
||||
shots: Array<PlayerClusterShotGql>;
|
||||
userId?: Maybe<Scalars["Int"]["output"]>;
|
||||
videoId: Scalars["Int"]["output"];
|
||||
};
|
||||
|
||||
export type PlayerClusterShotGql = {
|
||||
__typename?: "PlayerClusterShotGQL";
|
||||
bboxX1: Scalars["Int"]["output"];
|
||||
bboxX2: Scalars["Int"]["output"];
|
||||
bboxY1: Scalars["Int"]["output"];
|
||||
bboxY2: Scalars["Int"]["output"];
|
||||
confidence: Scalars["Float"]["output"];
|
||||
cropUrl?: Maybe<Scalars["String"]["output"]>;
|
||||
fullFrameUrl?: Maybe<Scalars["String"]["output"]>;
|
||||
isConfirmed: Scalars["Boolean"]["output"];
|
||||
shotId: Scalars["Int"]["output"];
|
||||
};
|
||||
|
||||
export enum PocketEnum {
|
||||
Corner = "CORNER",
|
||||
Side = "SIDE",
|
||||
@@ -2783,6 +2828,7 @@ export type Query = {
|
||||
notifications: NotificationConnection;
|
||||
ruleSets: Array<RuleSet>;
|
||||
unreadNotificationCount: Scalars["Int"]["output"];
|
||||
videoPlayerClusters: Array<PlayerClusterGql>;
|
||||
waitFor: Scalars["Float"]["output"];
|
||||
};
|
||||
|
||||
@@ -2949,6 +2995,10 @@ export type QueryNotificationsArgs = {
|
||||
offset?: Scalars["Int"]["input"];
|
||||
};
|
||||
|
||||
export type QueryVideoPlayerClustersArgs = {
|
||||
videoId: Scalars["Int"]["input"];
|
||||
};
|
||||
|
||||
export type QueryWaitForArgs = {
|
||||
duration: Scalars["Float"]["input"];
|
||||
};
|
||||
@@ -3166,6 +3216,11 @@ export type ShotGql = {
|
||||
videoId: Scalars["Int"]["output"];
|
||||
};
|
||||
|
||||
export type ShotMoveInput = {
|
||||
newClusterId: Scalars["Int"]["input"];
|
||||
shotId: Scalars["Int"]["input"];
|
||||
};
|
||||
|
||||
export type ShotsOrderingComponent =
|
||||
| {
|
||||
difficulty: FloatOrdering;
|
||||
@@ -3264,6 +3319,7 @@ export type StripeProductGql = {
|
||||
export type StripeSubscriptionOptionsGql = {
|
||||
__typename?: "StripeSubscriptionOptionsGQL";
|
||||
products: Array<StripeProductGql>;
|
||||
trialPeriodDays?: Maybe<Scalars["Int"]["output"]>;
|
||||
};
|
||||
|
||||
export enum StripeSubscriptionStatusEnum {
|
||||
|
||||
Reference in New Issue
Block a user