Compare commits
11 Commits
ivan/add-w
...
1cc0660a93
Author | SHA1 | Date | |
---|---|---|---|
1cc0660a93 | |||
14da2ae388 | |||
9ee4d43c89 | |||
fcac551806 | |||
044d8fa46d | |||
33f5404820 | |||
04a30e67d3 | |||
08183ed952 | |||
4fac231c43 | |||
30e356e3e0 | |||
36712557cb |
@@ -13,5 +13,5 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: graphql-codegen causes no changes
|
- name: codegen causes no changes
|
||||||
run: ./bin/assert-no-changes-wrapper.sh
|
run: ./bin/assert-no-changes-wrapper.sh
|
||||||
|
@@ -4,6 +4,12 @@ git ls-files | xargs md5sum > before.txt
|
|||||||
yarn install
|
yarn install
|
||||||
yarn graphql-codegen
|
yarn graphql-codegen
|
||||||
prettier ./src --write
|
prettier ./src --write
|
||||||
|
for proto in $(find ./rbproto -iname '*.proto'); do
|
||||||
|
name=$(basename "$proto" .proto)
|
||||||
|
protoc -I=./rbproto --python_out=./rbproto/python --pyi_out=./rbproto/python ./rbproto/shot.proto
|
||||||
|
yarn pbjs ./rbproto/shot.proto --ts ./rbproto/ts/shot.ts
|
||||||
|
done
|
||||||
|
prettier ./rbproto --write
|
||||||
|
|
||||||
git ls-files | xargs md5sum > after.txt
|
git ls-files | xargs md5sum > after.txt
|
||||||
|
|
||||||
|
@@ -21,7 +21,7 @@
|
|||||||
in
|
in
|
||||||
with pkgs; {
|
with pkgs; {
|
||||||
devShell = mkShell {
|
devShell = mkShell {
|
||||||
buildInputs = [nodejs yarn watchman alejandra nodePackages.prettier just];
|
buildInputs = [nodejs yarn watchman alejandra nodePackages.prettier just protobuf];
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
25
justfile
25
justfile
@@ -1,4 +1,5 @@
|
|||||||
NIX := "LD_LIBRARY_PATH='' nix"
|
NIX := "LD_LIBRARY_PATH='' nix"
|
||||||
|
PROTOBUF_DIR := "$PWD/rbproto"
|
||||||
|
|
||||||
prettier-gql:
|
prettier-gql:
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
@@ -12,3 +13,27 @@ gql-codegen:
|
|||||||
|
|
||||||
|
|
||||||
gql: gql-codegen prettier-gql
|
gql: gql-codegen prettier-gql
|
||||||
|
|
||||||
|
protobuf-compile-a-python name:
|
||||||
|
protoc -I={{ PROTOBUF_DIR }} --python_out={{ PROTOBUF_DIR }}/python --pyi_out={{ PROTOBUF_DIR }}/python {{ PROTOBUF_DIR }}/shot.proto
|
||||||
|
|
||||||
|
protobuf-compile-a-js name:
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euxo pipefail
|
||||||
|
{{NIX}} develop --impure --command bash -c 'yarn pbjs {{ PROTOBUF_DIR }}/shot.proto --ts {{ PROTOBUF_DIR }}/ts/shot.ts && yarn prettier ./rbproto --write'
|
||||||
|
|
||||||
|
protobuf-compile-all-js:
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
for proto in $(find {{ PROTOBUF_DIR }} -iname '*.proto'); do
|
||||||
|
name=$(basename "$proto" .proto)
|
||||||
|
just protobuf-compile-a-js $name
|
||||||
|
done
|
||||||
|
|
||||||
|
protobuf-compile-all-python:
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
for proto in $(find {{ PROTOBUF_DIR }} -iname '*.proto'); do
|
||||||
|
name=$(basename "$proto" .proto)
|
||||||
|
just protobuf-compile-a-python $name
|
||||||
|
done
|
||||||
|
|
||||||
|
protobuf-compile-everything: protobuf-compile-all-js protobuf-compile-all-python
|
@@ -18,6 +18,7 @@
|
|||||||
"@graphql-codegen/typescript-operations": "^4.0.1",
|
"@graphql-codegen/typescript-operations": "^4.0.1",
|
||||||
"@graphql-codegen/typescript-react-apollo": "^4.2.0",
|
"@graphql-codegen/typescript-react-apollo": "^4.2.0",
|
||||||
"graphql": "^16.8.1",
|
"graphql": "^16.8.1",
|
||||||
|
"pbjs": "^0.0.14",
|
||||||
"prettier": "^3.2.5",
|
"prettier": "^3.2.5",
|
||||||
"prettier-plugin-organize-imports": "^3.2.4"
|
"prettier-plugin-organize-imports": "^3.2.4"
|
||||||
},
|
},
|
||||||
|
16
pyproject.toml
Normal file
16
pyproject.toml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[tool.poetry]
|
||||||
|
name = "rbproto"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = ""
|
||||||
|
authors = ["Mike Kalange <countablecloud@gmail.com>"]
|
||||||
|
readme = "README.md"
|
||||||
|
packages = [{include = "rbproto"}]
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
python = ">=3.10,<3.12"
|
||||||
|
protobuf = "^4.25.3"
|
||||||
|
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["poetry-core"]
|
||||||
|
build-backend = "poetry.core.masonry.api"
|
1
rbproto/__init__.py
Normal file
1
rbproto/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from .python.shot_pb2 import * # noqa: F401
|
41
rbproto/python/shot_pb2.py
Normal file
41
rbproto/python/shot_pb2.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
# source: shot.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
|
from google.protobuf.internal import builder as _builder
|
||||||
|
# @@protoc_insertion_point(imports)
|
||||||
|
|
||||||
|
_sym_db = _symbol_database.Default()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nshot.proto\x12\x0fserialized_shot\"?\n\x03\x42ox\x12\x0c\n\x04left\x18\x01 \x01(\x02\x12\x0b\n\x03top\x18\x02 \x01(\x02\x12\r\n\x05width\x18\x03 \x01(\x02\x12\x0e\n\x06height\x18\x04 \x01(\x02\"\x1d\n\x05Point\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\"\x7f\n\rBallDetection\x12.\n\x0eplane_position\x18\x01 \x01(\x0b\x32\x16.serialized_shot.Point\x12(\n\nannotation\x18\x02 \x01(\x0b\x32\x14.serialized_shot.Box\x12\x14\n\x0cinterpolated\x18\x03 \x01(\x08\"T\n\x10RLEBallDetection\x12\x31\n\tdetection\x18\x01 \x01(\x0b\x32\x1e.serialized_shot.BallDetection\x12\r\n\x05\x63ount\x18\x02 \x01(\r\"L\n\x13RLEDetectionHistory\x12\x35\n\ndetections\x18\x01 \x03(\x0b\x32!.serialized_shot.RLEBallDetection\"F\n\x10\x44\x65tectionHistory\x12\x32\n\ndetections\x18\x01 \x03(\x0b\x32\x1e.serialized_shot.BallDetection\"\xe6\x01\n\x04Path\x12\x13\n\x0bstart_frame\x18\x01 \x01(\r\x12\x11\n\tend_frame\x18\x02 \x01(\r\x12\x37\n\ndetections\x18\x03 \x01(\x0b\x32!.serialized_shot.DetectionHistoryH\x00\x12>\n\x0erle_detections\x18\x04 \x01(\x0b\x32$.serialized_shot.RLEDetectionHistoryH\x00\x12\x15\n\x0bnot_present\x18\x05 \x01(\x08H\x00\x12\x11\n\tis_static\x18\x06 \x01(\x08\x42\x13\n\x11\x64\x65tection_history\"R\n\x11IdentifierHistory\x12\x17\n\x0f\x62\x61ll_identifier\x18\x01 \x01(\r\x12$\n\x05paths\x18\x02 \x03(\x0b\x32\x15.serialized_shot.Path\"H\n\x04Shot\x12@\n\x14identifier_histories\x18\x03 \x03(\x0b\x32\".serialized_shot.IdentifierHistoryb\x06proto3')
|
||||||
|
|
||||||
|
_globals = globals()
|
||||||
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
||||||
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'shot_pb2', _globals)
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
DESCRIPTOR._options = None
|
||||||
|
_globals['_BOX']._serialized_start=31
|
||||||
|
_globals['_BOX']._serialized_end=94
|
||||||
|
_globals['_POINT']._serialized_start=96
|
||||||
|
_globals['_POINT']._serialized_end=125
|
||||||
|
_globals['_BALLDETECTION']._serialized_start=127
|
||||||
|
_globals['_BALLDETECTION']._serialized_end=254
|
||||||
|
_globals['_RLEBALLDETECTION']._serialized_start=256
|
||||||
|
_globals['_RLEBALLDETECTION']._serialized_end=340
|
||||||
|
_globals['_RLEDETECTIONHISTORY']._serialized_start=342
|
||||||
|
_globals['_RLEDETECTIONHISTORY']._serialized_end=418
|
||||||
|
_globals['_DETECTIONHISTORY']._serialized_start=420
|
||||||
|
_globals['_DETECTIONHISTORY']._serialized_end=490
|
||||||
|
_globals['_PATH']._serialized_start=493
|
||||||
|
_globals['_PATH']._serialized_end=723
|
||||||
|
_globals['_IDENTIFIERHISTORY']._serialized_start=725
|
||||||
|
_globals['_IDENTIFIERHISTORY']._serialized_end=807
|
||||||
|
_globals['_SHOT']._serialized_start=809
|
||||||
|
_globals['_SHOT']._serialized_end=881
|
||||||
|
# @@protoc_insertion_point(module_scope)
|
86
rbproto/python/shot_pb2.pyi
Normal file
86
rbproto/python/shot_pb2.pyi
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
from google.protobuf.internal import containers as _containers
|
||||||
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import message as _message
|
||||||
|
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||||
|
|
||||||
|
DESCRIPTOR: _descriptor.FileDescriptor
|
||||||
|
|
||||||
|
class Box(_message.Message):
|
||||||
|
__slots__ = ["left", "top", "width", "height"]
|
||||||
|
LEFT_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
TOP_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
WIDTH_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
HEIGHT_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
left: float
|
||||||
|
top: float
|
||||||
|
width: float
|
||||||
|
height: float
|
||||||
|
def __init__(self, left: _Optional[float] = ..., top: _Optional[float] = ..., width: _Optional[float] = ..., height: _Optional[float] = ...) -> None: ...
|
||||||
|
|
||||||
|
class Point(_message.Message):
|
||||||
|
__slots__ = ["x", "y"]
|
||||||
|
X_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
Y_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
x: float
|
||||||
|
y: float
|
||||||
|
def __init__(self, x: _Optional[float] = ..., y: _Optional[float] = ...) -> None: ...
|
||||||
|
|
||||||
|
class BallDetection(_message.Message):
|
||||||
|
__slots__ = ["plane_position", "annotation", "interpolated"]
|
||||||
|
PLANE_POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
ANNOTATION_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
INTERPOLATED_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
plane_position: Point
|
||||||
|
annotation: Box
|
||||||
|
interpolated: bool
|
||||||
|
def __init__(self, plane_position: _Optional[_Union[Point, _Mapping]] = ..., annotation: _Optional[_Union[Box, _Mapping]] = ..., interpolated: bool = ...) -> None: ...
|
||||||
|
|
||||||
|
class RLEBallDetection(_message.Message):
|
||||||
|
__slots__ = ["detection", "count"]
|
||||||
|
DETECTION_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
detection: BallDetection
|
||||||
|
count: int
|
||||||
|
def __init__(self, detection: _Optional[_Union[BallDetection, _Mapping]] = ..., count: _Optional[int] = ...) -> None: ...
|
||||||
|
|
||||||
|
class RLEDetectionHistory(_message.Message):
|
||||||
|
__slots__ = ["detections"]
|
||||||
|
DETECTIONS_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
detections: _containers.RepeatedCompositeFieldContainer[RLEBallDetection]
|
||||||
|
def __init__(self, detections: _Optional[_Iterable[_Union[RLEBallDetection, _Mapping]]] = ...) -> None: ...
|
||||||
|
|
||||||
|
class DetectionHistory(_message.Message):
|
||||||
|
__slots__ = ["detections"]
|
||||||
|
DETECTIONS_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
detections: _containers.RepeatedCompositeFieldContainer[BallDetection]
|
||||||
|
def __init__(self, detections: _Optional[_Iterable[_Union[BallDetection, _Mapping]]] = ...) -> None: ...
|
||||||
|
|
||||||
|
class Path(_message.Message):
|
||||||
|
__slots__ = ["start_frame", "end_frame", "detections", "rle_detections", "not_present", "is_static"]
|
||||||
|
START_FRAME_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
END_FRAME_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
DETECTIONS_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
RLE_DETECTIONS_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
NOT_PRESENT_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
IS_STATIC_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
start_frame: int
|
||||||
|
end_frame: int
|
||||||
|
detections: DetectionHistory
|
||||||
|
rle_detections: RLEDetectionHistory
|
||||||
|
not_present: bool
|
||||||
|
is_static: bool
|
||||||
|
def __init__(self, start_frame: _Optional[int] = ..., end_frame: _Optional[int] = ..., detections: _Optional[_Union[DetectionHistory, _Mapping]] = ..., rle_detections: _Optional[_Union[RLEDetectionHistory, _Mapping]] = ..., not_present: bool = ..., is_static: bool = ...) -> None: ...
|
||||||
|
|
||||||
|
class IdentifierHistory(_message.Message):
|
||||||
|
__slots__ = ["ball_identifier", "paths"]
|
||||||
|
BALL_IDENTIFIER_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
PATHS_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
ball_identifier: int
|
||||||
|
paths: _containers.RepeatedCompositeFieldContainer[Path]
|
||||||
|
def __init__(self, ball_identifier: _Optional[int] = ..., paths: _Optional[_Iterable[_Union[Path, _Mapping]]] = ...) -> None: ...
|
||||||
|
|
||||||
|
class Shot(_message.Message):
|
||||||
|
__slots__ = ["identifier_histories"]
|
||||||
|
IDENTIFIER_HISTORIES_FIELD_NUMBER: _ClassVar[int]
|
||||||
|
identifier_histories: _containers.RepeatedCompositeFieldContainer[IdentifierHistory]
|
||||||
|
def __init__(self, identifier_histories: _Optional[_Iterable[_Union[IdentifierHistory, _Mapping]]] = ...) -> None: ...
|
54
rbproto/shot.proto
Normal file
54
rbproto/shot.proto
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package serialized_shot;
|
||||||
|
|
||||||
|
message Box {
|
||||||
|
float left = 1;
|
||||||
|
float top = 2;
|
||||||
|
float width = 3;
|
||||||
|
float height = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Point {
|
||||||
|
float x = 1;
|
||||||
|
float y = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message BallDetection {
|
||||||
|
Point plane_position = 1;
|
||||||
|
Box annotation = 2;
|
||||||
|
bool interpolated = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RLEBallDetection {
|
||||||
|
BallDetection detection = 1;
|
||||||
|
uint32 count = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RLEDetectionHistory {
|
||||||
|
repeated RLEBallDetection detections = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DetectionHistory {
|
||||||
|
repeated BallDetection detections = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Path {
|
||||||
|
uint32 start_frame = 1;
|
||||||
|
uint32 end_frame = 2;
|
||||||
|
oneof detection_history {
|
||||||
|
DetectionHistory detections = 3;
|
||||||
|
RLEDetectionHistory rle_detections = 4;
|
||||||
|
bool not_present = 5;
|
||||||
|
}
|
||||||
|
bool is_static = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message IdentifierHistory {
|
||||||
|
uint32 ball_identifier = 1;
|
||||||
|
repeated Path paths = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Shot {
|
||||||
|
repeated IdentifierHistory identifier_histories = 3;
|
||||||
|
}
|
1242
rbproto/ts/shot.ts
Normal file
1242
rbproto/ts/shot.ts
Normal file
File diff suppressed because it is too large
Load Diff
483
src/index.tsx
483
src/index.tsx
@@ -49,14 +49,9 @@ export type AggregationIdentifierGql = {
|
|||||||
groupName: Scalars["String"]["output"];
|
groupName: Scalars["String"]["output"];
|
||||||
};
|
};
|
||||||
|
|
||||||
export type AggregationInput = {
|
export type AggregationInput =
|
||||||
bucketSet?: InputMaybe<BucketSetInputGql>;
|
| { bucketSet: BucketSetInputGql; enum?: never }
|
||||||
enum?: InputMaybe<EnumAggregation>;
|
| { bucketSet?: never; enum: EnumAggregation };
|
||||||
};
|
|
||||||
|
|
||||||
export type AndFilter = {
|
|
||||||
filters: Array<FilterInput>;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type BankFeaturesGql = {
|
export type BankFeaturesGql = {
|
||||||
__typename?: "BankFeaturesGQL";
|
__typename?: "BankFeaturesGQL";
|
||||||
@@ -133,21 +128,202 @@ export type EnumAggregation = {
|
|||||||
feature: Scalars["String"]["input"];
|
feature: Scalars["String"]["input"];
|
||||||
};
|
};
|
||||||
|
|
||||||
export type FilterInput = {
|
export type FilterInput =
|
||||||
andFilters?: InputMaybe<AndFilter>;
|
| {
|
||||||
cueBallSpeed?: InputMaybe<RangeFilter>;
|
andFilters: Array<FilterInput>;
|
||||||
cueObjectAngle?: InputMaybe<RangeFilter>;
|
cueBallSpeed?: never;
|
||||||
cueObjectDistance?: InputMaybe<RangeFilter>;
|
cueObjectAngle?: never;
|
||||||
difficulty?: InputMaybe<RangeFilter>;
|
cueObjectDistance?: never;
|
||||||
intendedPocketType?: InputMaybe<Array<PocketEnum>>;
|
difficulty?: never;
|
||||||
make?: InputMaybe<Array<Scalars["Boolean"]["input"]>>;
|
intendedPocketType?: never;
|
||||||
orFilters?: InputMaybe<OrFilter>;
|
make?: never;
|
||||||
shotDirection?: InputMaybe<Array<ShotDirectionEnum>>;
|
orFilters?: never;
|
||||||
tags?: InputMaybe<Array<VideoTagInput>>;
|
shotDirection?: never;
|
||||||
targetPocketDistance?: InputMaybe<RangeFilter>;
|
tags?: never;
|
||||||
userId?: InputMaybe<Array<Scalars["Int"]["input"]>>;
|
targetPocketDistance?: never;
|
||||||
videoId?: InputMaybe<Array<Scalars["Int"]["input"]>>;
|
userId?: never;
|
||||||
};
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed: RangeFilter;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make?: never;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId?: never;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle: RangeFilter;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make?: never;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId?: never;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance: RangeFilter;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make?: never;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId?: never;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty: RangeFilter;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make?: never;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId?: never;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType: Array<PocketEnum>;
|
||||||
|
make?: never;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId?: never;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make: Array<Scalars["Boolean"]["input"]>;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId?: never;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make?: never;
|
||||||
|
orFilters: Array<FilterInput>;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId?: never;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make?: never;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection: Array<ShotDirectionEnum>;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId?: never;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make?: never;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags: Array<VideoTagInput>;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId?: never;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make?: never;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance: RangeFilter;
|
||||||
|
userId?: never;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make?: never;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId: Array<Scalars["Int"]["input"]>;
|
||||||
|
videoId?: never;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
andFilters?: never;
|
||||||
|
cueBallSpeed?: never;
|
||||||
|
cueObjectAngle?: never;
|
||||||
|
cueObjectDistance?: never;
|
||||||
|
difficulty?: never;
|
||||||
|
intendedPocketType?: never;
|
||||||
|
make?: never;
|
||||||
|
orFilters?: never;
|
||||||
|
shotDirection?: never;
|
||||||
|
tags?: never;
|
||||||
|
targetPocketDistance?: never;
|
||||||
|
userId?: never;
|
||||||
|
videoId: Array<Scalars["Int"]["input"]>;
|
||||||
|
};
|
||||||
|
|
||||||
export type GetUploadLinkReturn = {
|
export type GetUploadLinkReturn = {
|
||||||
__typename?: "GetUploadLinkReturn";
|
__typename?: "GetUploadLinkReturn";
|
||||||
@@ -236,10 +412,6 @@ export type MutationSetLoggerLevelArgs = {
|
|||||||
path: Scalars["String"]["input"];
|
path: Scalars["String"]["input"];
|
||||||
};
|
};
|
||||||
|
|
||||||
export type OrFilter = {
|
|
||||||
filters: Array<FilterInput>;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type PageInfoGql = {
|
export type PageInfoGql = {
|
||||||
__typename?: "PageInfoGQL";
|
__typename?: "PageInfoGQL";
|
||||||
endCursor?: Maybe<Scalars["String"]["output"]>;
|
endCursor?: Maybe<Scalars["String"]["output"]>;
|
||||||
@@ -329,6 +501,11 @@ export type RangeFilter = {
|
|||||||
lessThan?: InputMaybe<Scalars["Float"]["input"]>;
|
lessThan?: InputMaybe<Scalars["Float"]["input"]>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type SerializedShotPathsGql = {
|
||||||
|
__typename?: "SerializedShotPathsGQL";
|
||||||
|
b64EncodedBuffer?: Maybe<Scalars["String"]["output"]>;
|
||||||
|
};
|
||||||
|
|
||||||
export enum ShotDirectionEnum {
|
export enum ShotDirectionEnum {
|
||||||
Left = "LEFT",
|
Left = "LEFT",
|
||||||
Right = "RIGHT",
|
Right = "RIGHT",
|
||||||
@@ -343,6 +520,7 @@ export type ShotGql = {
|
|||||||
endFrame: Scalars["Int"]["output"];
|
endFrame: Scalars["Int"]["output"];
|
||||||
id: Scalars["Int"]["output"];
|
id: Scalars["Int"]["output"];
|
||||||
pocketingIntentionFeatures?: Maybe<PocketingIntentionFeaturesGql>;
|
pocketingIntentionFeatures?: Maybe<PocketingIntentionFeaturesGql>;
|
||||||
|
serializedShotPaths?: Maybe<SerializedShotPathsGql>;
|
||||||
startFrame: Scalars["Int"]["output"];
|
startFrame: Scalars["Int"]["output"];
|
||||||
updatedAt?: Maybe<Scalars["DateTime"]["output"]>;
|
updatedAt?: Maybe<Scalars["DateTime"]["output"]>;
|
||||||
user?: Maybe<UserGql>;
|
user?: Maybe<UserGql>;
|
||||||
@@ -866,6 +1044,36 @@ export type GetVideoQuery = {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type GetAverageTimePerShotForVideoQueryVariables = Exact<{
|
||||||
|
videoId: Scalars["Int"]["input"];
|
||||||
|
}>;
|
||||||
|
|
||||||
|
export type GetAverageTimePerShotForVideoQuery = {
|
||||||
|
__typename?: "Query";
|
||||||
|
getVideo: {
|
||||||
|
__typename?: "VideoGQL";
|
||||||
|
averageTimeBetweenShots?: number | null;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export type GetElapsedTimeForVideoQueryVariables = Exact<{
|
||||||
|
videoId: Scalars["Int"]["input"];
|
||||||
|
}>;
|
||||||
|
|
||||||
|
export type GetElapsedTimeForVideoQuery = {
|
||||||
|
__typename?: "Query";
|
||||||
|
getVideo: { __typename?: "VideoGQL"; elapsedTime?: number | null };
|
||||||
|
};
|
||||||
|
|
||||||
|
export type GetMedianRunForVideoQueryVariables = Exact<{
|
||||||
|
videoId: Scalars["Int"]["input"];
|
||||||
|
}>;
|
||||||
|
|
||||||
|
export type GetMedianRunForVideoQuery = {
|
||||||
|
__typename?: "Query";
|
||||||
|
getVideo: { __typename?: "VideoGQL"; medianRun?: number | null };
|
||||||
|
};
|
||||||
|
|
||||||
export type CreateUploadStreamMutationVariables = Exact<{
|
export type CreateUploadStreamMutationVariables = Exact<{
|
||||||
videoMetadataInput: VideoMetadataInput;
|
videoMetadataInput: VideoMetadataInput;
|
||||||
}>;
|
}>;
|
||||||
@@ -1937,11 +2145,9 @@ export const GetVideoDetailsDocument = gql`
|
|||||||
elapsedTime
|
elapsedTime
|
||||||
endTime
|
endTime
|
||||||
makePercentage
|
makePercentage
|
||||||
makePercentage
|
|
||||||
medianRun
|
medianRun
|
||||||
startTime
|
startTime
|
||||||
totalShots
|
totalShots
|
||||||
totalShots
|
|
||||||
totalShotsMade
|
totalShotsMade
|
||||||
createdAt
|
createdAt
|
||||||
updatedAt
|
updatedAt
|
||||||
@@ -2185,6 +2391,225 @@ export type GetVideoQueryResult = Apollo.QueryResult<
|
|||||||
GetVideoQuery,
|
GetVideoQuery,
|
||||||
GetVideoQueryVariables
|
GetVideoQueryVariables
|
||||||
>;
|
>;
|
||||||
|
export const GetAverageTimePerShotForVideoDocument = gql`
|
||||||
|
query GetAverageTimePerShotForVideo($videoId: Int!) {
|
||||||
|
getVideo(videoId: $videoId) {
|
||||||
|
averageTimeBetweenShots
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __useGetAverageTimePerShotForVideoQuery__
|
||||||
|
*
|
||||||
|
* To run a query within a React component, call `useGetAverageTimePerShotForVideoQuery` and pass it any options that fit your needs.
|
||||||
|
* When your component renders, `useGetAverageTimePerShotForVideoQuery` 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 } = useGetAverageTimePerShotForVideoQuery({
|
||||||
|
* variables: {
|
||||||
|
* videoId: // value for 'videoId'
|
||||||
|
* },
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
export function useGetAverageTimePerShotForVideoQuery(
|
||||||
|
baseOptions: Apollo.QueryHookOptions<
|
||||||
|
GetAverageTimePerShotForVideoQuery,
|
||||||
|
GetAverageTimePerShotForVideoQueryVariables
|
||||||
|
>,
|
||||||
|
) {
|
||||||
|
const options = { ...defaultOptions, ...baseOptions };
|
||||||
|
return Apollo.useQuery<
|
||||||
|
GetAverageTimePerShotForVideoQuery,
|
||||||
|
GetAverageTimePerShotForVideoQueryVariables
|
||||||
|
>(GetAverageTimePerShotForVideoDocument, options);
|
||||||
|
}
|
||||||
|
export function useGetAverageTimePerShotForVideoLazyQuery(
|
||||||
|
baseOptions?: Apollo.LazyQueryHookOptions<
|
||||||
|
GetAverageTimePerShotForVideoQuery,
|
||||||
|
GetAverageTimePerShotForVideoQueryVariables
|
||||||
|
>,
|
||||||
|
) {
|
||||||
|
const options = { ...defaultOptions, ...baseOptions };
|
||||||
|
return Apollo.useLazyQuery<
|
||||||
|
GetAverageTimePerShotForVideoQuery,
|
||||||
|
GetAverageTimePerShotForVideoQueryVariables
|
||||||
|
>(GetAverageTimePerShotForVideoDocument, options);
|
||||||
|
}
|
||||||
|
export function useGetAverageTimePerShotForVideoSuspenseQuery(
|
||||||
|
baseOptions?: Apollo.SuspenseQueryHookOptions<
|
||||||
|
GetAverageTimePerShotForVideoQuery,
|
||||||
|
GetAverageTimePerShotForVideoQueryVariables
|
||||||
|
>,
|
||||||
|
) {
|
||||||
|
const options = { ...defaultOptions, ...baseOptions };
|
||||||
|
return Apollo.useSuspenseQuery<
|
||||||
|
GetAverageTimePerShotForVideoQuery,
|
||||||
|
GetAverageTimePerShotForVideoQueryVariables
|
||||||
|
>(GetAverageTimePerShotForVideoDocument, options);
|
||||||
|
}
|
||||||
|
export type GetAverageTimePerShotForVideoQueryHookResult = ReturnType<
|
||||||
|
typeof useGetAverageTimePerShotForVideoQuery
|
||||||
|
>;
|
||||||
|
export type GetAverageTimePerShotForVideoLazyQueryHookResult = ReturnType<
|
||||||
|
typeof useGetAverageTimePerShotForVideoLazyQuery
|
||||||
|
>;
|
||||||
|
export type GetAverageTimePerShotForVideoSuspenseQueryHookResult = ReturnType<
|
||||||
|
typeof useGetAverageTimePerShotForVideoSuspenseQuery
|
||||||
|
>;
|
||||||
|
export type GetAverageTimePerShotForVideoQueryResult = Apollo.QueryResult<
|
||||||
|
GetAverageTimePerShotForVideoQuery,
|
||||||
|
GetAverageTimePerShotForVideoQueryVariables
|
||||||
|
>;
|
||||||
|
export const GetElapsedTimeForVideoDocument = gql`
|
||||||
|
query GetElapsedTimeForVideo($videoId: Int!) {
|
||||||
|
getVideo(videoId: $videoId) {
|
||||||
|
elapsedTime
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __useGetElapsedTimeForVideoQuery__
|
||||||
|
*
|
||||||
|
* To run a query within a React component, call `useGetElapsedTimeForVideoQuery` and pass it any options that fit your needs.
|
||||||
|
* When your component renders, `useGetElapsedTimeForVideoQuery` 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 } = useGetElapsedTimeForVideoQuery({
|
||||||
|
* variables: {
|
||||||
|
* videoId: // value for 'videoId'
|
||||||
|
* },
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
export function useGetElapsedTimeForVideoQuery(
|
||||||
|
baseOptions: Apollo.QueryHookOptions<
|
||||||
|
GetElapsedTimeForVideoQuery,
|
||||||
|
GetElapsedTimeForVideoQueryVariables
|
||||||
|
>,
|
||||||
|
) {
|
||||||
|
const options = { ...defaultOptions, ...baseOptions };
|
||||||
|
return Apollo.useQuery<
|
||||||
|
GetElapsedTimeForVideoQuery,
|
||||||
|
GetElapsedTimeForVideoQueryVariables
|
||||||
|
>(GetElapsedTimeForVideoDocument, options);
|
||||||
|
}
|
||||||
|
export function useGetElapsedTimeForVideoLazyQuery(
|
||||||
|
baseOptions?: Apollo.LazyQueryHookOptions<
|
||||||
|
GetElapsedTimeForVideoQuery,
|
||||||
|
GetElapsedTimeForVideoQueryVariables
|
||||||
|
>,
|
||||||
|
) {
|
||||||
|
const options = { ...defaultOptions, ...baseOptions };
|
||||||
|
return Apollo.useLazyQuery<
|
||||||
|
GetElapsedTimeForVideoQuery,
|
||||||
|
GetElapsedTimeForVideoQueryVariables
|
||||||
|
>(GetElapsedTimeForVideoDocument, options);
|
||||||
|
}
|
||||||
|
export function useGetElapsedTimeForVideoSuspenseQuery(
|
||||||
|
baseOptions?: Apollo.SuspenseQueryHookOptions<
|
||||||
|
GetElapsedTimeForVideoQuery,
|
||||||
|
GetElapsedTimeForVideoQueryVariables
|
||||||
|
>,
|
||||||
|
) {
|
||||||
|
const options = { ...defaultOptions, ...baseOptions };
|
||||||
|
return Apollo.useSuspenseQuery<
|
||||||
|
GetElapsedTimeForVideoQuery,
|
||||||
|
GetElapsedTimeForVideoQueryVariables
|
||||||
|
>(GetElapsedTimeForVideoDocument, options);
|
||||||
|
}
|
||||||
|
export type GetElapsedTimeForVideoQueryHookResult = ReturnType<
|
||||||
|
typeof useGetElapsedTimeForVideoQuery
|
||||||
|
>;
|
||||||
|
export type GetElapsedTimeForVideoLazyQueryHookResult = ReturnType<
|
||||||
|
typeof useGetElapsedTimeForVideoLazyQuery
|
||||||
|
>;
|
||||||
|
export type GetElapsedTimeForVideoSuspenseQueryHookResult = ReturnType<
|
||||||
|
typeof useGetElapsedTimeForVideoSuspenseQuery
|
||||||
|
>;
|
||||||
|
export type GetElapsedTimeForVideoQueryResult = Apollo.QueryResult<
|
||||||
|
GetElapsedTimeForVideoQuery,
|
||||||
|
GetElapsedTimeForVideoQueryVariables
|
||||||
|
>;
|
||||||
|
export const GetMedianRunForVideoDocument = gql`
|
||||||
|
query GetMedianRunForVideo($videoId: Int!) {
|
||||||
|
getVideo(videoId: $videoId) {
|
||||||
|
medianRun
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __useGetMedianRunForVideoQuery__
|
||||||
|
*
|
||||||
|
* To run a query within a React component, call `useGetMedianRunForVideoQuery` and pass it any options that fit your needs.
|
||||||
|
* When your component renders, `useGetMedianRunForVideoQuery` 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 } = useGetMedianRunForVideoQuery({
|
||||||
|
* variables: {
|
||||||
|
* videoId: // value for 'videoId'
|
||||||
|
* },
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
export function useGetMedianRunForVideoQuery(
|
||||||
|
baseOptions: Apollo.QueryHookOptions<
|
||||||
|
GetMedianRunForVideoQuery,
|
||||||
|
GetMedianRunForVideoQueryVariables
|
||||||
|
>,
|
||||||
|
) {
|
||||||
|
const options = { ...defaultOptions, ...baseOptions };
|
||||||
|
return Apollo.useQuery<
|
||||||
|
GetMedianRunForVideoQuery,
|
||||||
|
GetMedianRunForVideoQueryVariables
|
||||||
|
>(GetMedianRunForVideoDocument, options);
|
||||||
|
}
|
||||||
|
export function useGetMedianRunForVideoLazyQuery(
|
||||||
|
baseOptions?: Apollo.LazyQueryHookOptions<
|
||||||
|
GetMedianRunForVideoQuery,
|
||||||
|
GetMedianRunForVideoQueryVariables
|
||||||
|
>,
|
||||||
|
) {
|
||||||
|
const options = { ...defaultOptions, ...baseOptions };
|
||||||
|
return Apollo.useLazyQuery<
|
||||||
|
GetMedianRunForVideoQuery,
|
||||||
|
GetMedianRunForVideoQueryVariables
|
||||||
|
>(GetMedianRunForVideoDocument, options);
|
||||||
|
}
|
||||||
|
export function useGetMedianRunForVideoSuspenseQuery(
|
||||||
|
baseOptions?: Apollo.SuspenseQueryHookOptions<
|
||||||
|
GetMedianRunForVideoQuery,
|
||||||
|
GetMedianRunForVideoQueryVariables
|
||||||
|
>,
|
||||||
|
) {
|
||||||
|
const options = { ...defaultOptions, ...baseOptions };
|
||||||
|
return Apollo.useSuspenseQuery<
|
||||||
|
GetMedianRunForVideoQuery,
|
||||||
|
GetMedianRunForVideoQueryVariables
|
||||||
|
>(GetMedianRunForVideoDocument, options);
|
||||||
|
}
|
||||||
|
export type GetMedianRunForVideoQueryHookResult = ReturnType<
|
||||||
|
typeof useGetMedianRunForVideoQuery
|
||||||
|
>;
|
||||||
|
export type GetMedianRunForVideoLazyQueryHookResult = ReturnType<
|
||||||
|
typeof useGetMedianRunForVideoLazyQuery
|
||||||
|
>;
|
||||||
|
export type GetMedianRunForVideoSuspenseQueryHookResult = ReturnType<
|
||||||
|
typeof useGetMedianRunForVideoSuspenseQuery
|
||||||
|
>;
|
||||||
|
export type GetMedianRunForVideoQueryResult = Apollo.QueryResult<
|
||||||
|
GetMedianRunForVideoQuery,
|
||||||
|
GetMedianRunForVideoQueryVariables
|
||||||
|
>;
|
||||||
export const CreateUploadStreamDocument = gql`
|
export const CreateUploadStreamDocument = gql`
|
||||||
mutation CreateUploadStream($videoMetadataInput: VideoMetadataInput!) {
|
mutation CreateUploadStream($videoMetadataInput: VideoMetadataInput!) {
|
||||||
createUploadStream(videoMetadata: $videoMetadataInput) {
|
createUploadStream(videoMetadata: $videoMetadataInput) {
|
||||||
|
@@ -91,11 +91,9 @@ query GetVideoDetails($videoId: Int!) {
|
|||||||
elapsedTime
|
elapsedTime
|
||||||
endTime
|
endTime
|
||||||
makePercentage
|
makePercentage
|
||||||
makePercentage
|
|
||||||
medianRun
|
medianRun
|
||||||
startTime
|
startTime
|
||||||
totalShots
|
totalShots
|
||||||
totalShots
|
|
||||||
totalShotsMade
|
totalShotsMade
|
||||||
createdAt
|
createdAt
|
||||||
updatedAt
|
updatedAt
|
||||||
@@ -148,3 +146,19 @@ query GetVideo($videoId: Int!) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
query GetAverageTimePerShotForVideo($videoId: Int!) {
|
||||||
|
getVideo(videoId: $videoId) {
|
||||||
|
averageTimeBetweenShots
|
||||||
|
}
|
||||||
|
}
|
||||||
|
query GetElapsedTimeForVideo($videoId: Int!) {
|
||||||
|
getVideo(videoId: $videoId) {
|
||||||
|
elapsedTime
|
||||||
|
}
|
||||||
|
}
|
||||||
|
query GetMedianRunForVideo($videoId: Int!) {
|
||||||
|
getVideo(videoId: $videoId) {
|
||||||
|
medianRun
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -43,9 +43,9 @@ input AggregateInputGQL {
|
|||||||
filterInput: FilterInput
|
filterInput: FilterInput
|
||||||
}
|
}
|
||||||
|
|
||||||
input AggregationInput {
|
input AggregationInput @oneOf {
|
||||||
bucketSet: BucketSetInputGQL = null
|
bucketSet: BucketSetInputGQL
|
||||||
enum: EnumAggregation = null
|
enum: EnumAggregation
|
||||||
}
|
}
|
||||||
|
|
||||||
input BucketSetInputGQL {
|
input BucketSetInputGQL {
|
||||||
@@ -62,28 +62,20 @@ input EnumAggregation {
|
|||||||
feature: String!
|
feature: String!
|
||||||
}
|
}
|
||||||
|
|
||||||
input FilterInput {
|
input FilterInput @oneOf {
|
||||||
andFilters: AndFilter = null
|
andFilters: [FilterInput!]
|
||||||
orFilters: OrFilter = null
|
orFilters: [FilterInput!]
|
||||||
cueObjectDistance: RangeFilter = null
|
cueObjectDistance: RangeFilter
|
||||||
targetPocketDistance: RangeFilter = null
|
targetPocketDistance: RangeFilter
|
||||||
cueObjectAngle: RangeFilter = null
|
cueObjectAngle: RangeFilter
|
||||||
cueBallSpeed: RangeFilter = null
|
cueBallSpeed: RangeFilter
|
||||||
difficulty: RangeFilter = null
|
difficulty: RangeFilter
|
||||||
intendedPocketType: [PocketEnum!] = null
|
intendedPocketType: [PocketEnum!]
|
||||||
shotDirection: [ShotDirectionEnum!] = null
|
shotDirection: [ShotDirectionEnum!]
|
||||||
videoId: [Int!] = null
|
videoId: [Int!]
|
||||||
userId: [Int!] = null
|
userId: [Int!]
|
||||||
make: [Boolean!] = null
|
make: [Boolean!]
|
||||||
tags: [VideoTagInput!] = null
|
tags: [VideoTagInput!]
|
||||||
}
|
|
||||||
|
|
||||||
input AndFilter {
|
|
||||||
filters: [FilterInput!]!
|
|
||||||
}
|
|
||||||
|
|
||||||
input OrFilter {
|
|
||||||
filters: [FilterInput!]!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
input RangeFilter {
|
input RangeFilter {
|
||||||
@@ -144,6 +136,7 @@ type ShotGQL {
|
|||||||
cueObjectFeatures: CueObjectFeaturesGQL
|
cueObjectFeatures: CueObjectFeaturesGQL
|
||||||
pocketingIntentionFeatures: PocketingIntentionFeaturesGQL
|
pocketingIntentionFeatures: PocketingIntentionFeaturesGQL
|
||||||
bankFeatures: BankFeaturesGQL
|
bankFeatures: BankFeaturesGQL
|
||||||
|
serializedShotPaths: SerializedShotPathsGQL
|
||||||
user: UserGQL
|
user: UserGQL
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,6 +170,10 @@ enum WallTypeEnum {
|
|||||||
SHORT
|
SHORT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SerializedShotPathsGQL {
|
||||||
|
b64EncodedBuffer: String
|
||||||
|
}
|
||||||
|
|
||||||
type UserGQL {
|
type UserGQL {
|
||||||
id: Int!
|
id: Int!
|
||||||
firebaseUid: String!
|
firebaseUid: String!
|
||||||
|
18
yarn.lock
18
yarn.lock
@@ -1553,6 +1553,11 @@ colorette@^2.0.16:
|
|||||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
|
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
|
||||||
integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
|
integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
|
||||||
|
|
||||||
|
commander@4.0.1:
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c"
|
||||||
|
integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==
|
||||||
|
|
||||||
common-tags@1.8.2:
|
common-tags@1.8.2:
|
||||||
version "1.8.2"
|
version "1.8.2"
|
||||||
resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
|
resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
|
||||||
@@ -2538,6 +2543,14 @@ path-type@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
||||||
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
||||||
|
|
||||||
|
pbjs@^0.0.14:
|
||||||
|
version "0.0.14"
|
||||||
|
resolved "https://registry.yarnpkg.com/pbjs/-/pbjs-0.0.14.tgz#5ab3d4a5f06a9ab78dd320c63f72877120d4c48d"
|
||||||
|
integrity sha512-F4aA0ojrQ37kxFPOg4yRLP/vxb76rYQwMQigmVEljYlA7hZKmjaWjP6IkRn4nA0NdIj4Xxe4iqWrrIhJy+MwWQ==
|
||||||
|
dependencies:
|
||||||
|
commander "4.0.1"
|
||||||
|
protocol-buffers-schema "3.1.0"
|
||||||
|
|
||||||
picocolors@^1.0.0:
|
picocolors@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||||
@@ -2574,6 +2587,11 @@ prop-types@^15.7.2:
|
|||||||
object-assign "^4.1.1"
|
object-assign "^4.1.1"
|
||||||
react-is "^16.13.1"
|
react-is "^16.13.1"
|
||||||
|
|
||||||
|
protocol-buffers-schema@3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.1.0.tgz#d8a819549ead3e6bd189ebe9e50e96636bbc5cc7"
|
||||||
|
integrity sha512-1g9zFjLFhGN1Dc5UVO8D2loVslp6sVxk5sJqgD66CuWUITh2gOaTLRN/pIakGFfB6e0nNF6hImrYFDurEsA1UQ==
|
||||||
|
|
||||||
punycode@^1.3.2:
|
punycode@^1.3.2:
|
||||||
version "1.4.1"
|
version "1.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
||||||
|
Reference in New Issue
Block a user