From b471fa2e476921fe02b2b7b4c4f86dd0a7527354 Mon Sep 17 00:00:00 2001 From: Andy Wang <41224501+andy-t-wang@users.noreply.github.com> Date: Mon, 9 Dec 2024 05:13:30 -0500 Subject: [PATCH 1/8] whitelist poop (#1082) --- web/lib/constants.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/web/lib/constants.ts b/web/lib/constants.ts index a7b89f94c..cbfa74df0 100644 --- a/web/lib/constants.ts +++ b/web/lib/constants.ts @@ -125,4 +125,5 @@ export const notificationPermissions = { export const whitelistedAppsPermit2 = [ "app_a4f7f3e62c1de0b9490a5260cb390b56", // UNO "app_013bbbd7b5803a25c8d10d10299608e7", // MEME.Factory + "app_15daccf5b7d4ec9b7dbba044a8fdeab5", // Poop ]; From cbe84105397b968fb80059ab5ca43931f57e8abe Mon Sep 17 00:00:00 2001 From: Andy Wang <41224501+andy-t-wang@users.noreply.github.com> Date: Mon, 9 Dec 2024 10:21:57 -0500 Subject: [PATCH 2/8] fix ratings (#1081) --- .../databases/default/tables/public_app.yaml | 2 + .../1733533994467_compute_ratings/down.sql | 5 + .../1733533994467_compute_ratings/up.sql | 26 + .../fetch-current-app-review.generated.ts | 66 + .../graphql/fetch-current-app-review.graphql | 10 + .../update-review-counter.generated.ts | 68 + .../graphql/update-review-counter.graphql | 8 + web/api/v2/app/submit-app-review/index.ts | 23 + web/graphql/graphql.schema.json | 2066 ++++++++++++----- web/graphql/graphql.ts | 196 ++ .../api/v2/app/submit-app-review.test.ts | 34 + 11 files changed, 1886 insertions(+), 618 deletions(-) create mode 100644 hasura/migrations/default/1733533994467_compute_ratings/down.sql create mode 100644 hasura/migrations/default/1733533994467_compute_ratings/up.sql create mode 100644 web/api/v2/app/submit-app-review/graphql/fetch-current-app-review.generated.ts create mode 100644 web/api/v2/app/submit-app-review/graphql/fetch-current-app-review.graphql create mode 100644 web/api/v2/app/submit-app-review/graphql/update-review-counter.generated.ts create mode 100644 web/api/v2/app/submit-app-review/graphql/update-review-counter.graphql diff --git a/hasura/metadata/databases/default/tables/public_app.yaml b/hasura/metadata/databases/default/tables/public_app.yaml index c18993682..901fa6677 100644 --- a/hasura/metadata/databases/default/tables/public_app.yaml +++ b/hasura/metadata/databases/default/tables/public_app.yaml @@ -133,6 +133,8 @@ update_permissions: permission: columns: - is_banned + - rating_count + - rating_sum filter: {} check: null comment: "" diff --git a/hasura/migrations/default/1733533994467_compute_ratings/down.sql b/hasura/migrations/default/1733533994467_compute_ratings/down.sql new file mode 100644 index 000000000..909acab9d --- /dev/null +++ b/hasura/migrations/default/1733533994467_compute_ratings/down.sql @@ -0,0 +1,5 @@ +ALTER TABLE app +DROP COLUMN IF EXISTS rating_sum; + +ALTER TABLE app +DROP COLUMN IF EXISTS rating_count; \ No newline at end of file diff --git a/hasura/migrations/default/1733533994467_compute_ratings/up.sql b/hasura/migrations/default/1733533994467_compute_ratings/up.sql new file mode 100644 index 000000000..e8674b340 --- /dev/null +++ b/hasura/migrations/default/1733533994467_compute_ratings/up.sql @@ -0,0 +1,26 @@ +-- Step 1: Add new columns for the total rating sum and total number of ratings +ALTER TABLE app +ADD COLUMN IF NOT EXISTS rating_sum BIGINT DEFAULT 0; + +ALTER TABLE app +ADD COLUMN IF NOT EXISTS rating_count BIGINT DEFAULT 0; + +-- Step 2: Update the new columns with the sum of ratings and count of ratings for each app +UPDATE app +SET + rating_sum = ( + SELECT + COALESCE(SUM(rating), 0) + FROM + app_reviews + WHERE + app_reviews.app_id = app.id + ), + rating_count = ( + SELECT + COUNT(*) + FROM + app_reviews + WHERE + app_reviews.app_id = app.id + ); \ No newline at end of file diff --git a/web/api/v2/app/submit-app-review/graphql/fetch-current-app-review.generated.ts b/web/api/v2/app/submit-app-review/graphql/fetch-current-app-review.generated.ts new file mode 100644 index 000000000..48e5495ce --- /dev/null +++ b/web/api/v2/app/submit-app-review/graphql/fetch-current-app-review.generated.ts @@ -0,0 +1,66 @@ +/* eslint-disable import/no-relative-parent-imports -- auto generated file */ +import * as Types from "@/graphql/graphql"; + +import { GraphQLClient, RequestOptions } from "graphql-request"; +import gql from "graphql-tag"; +type GraphQLClientRequestHeaders = RequestOptions["requestHeaders"]; +export type GetAppReviewQueryVariables = Types.Exact<{ + app_id: Types.Scalars["String"]["input"]; + nullifier_hash: Types.Scalars["String"]["input"]; +}>; + +export type GetAppReviewQuery = { + __typename?: "query_root"; + app_reviews: Array<{ __typename?: "app_reviews"; rating: number }>; +}; + +export const GetAppReviewDocument = gql` + query GetAppReview($app_id: String!, $nullifier_hash: String!) { + app_reviews( + where: { + nullifier_hash: { _eq: $nullifier_hash } + app_id: { _eq: $app_id } + } + ) { + rating + } + } +`; + +export type SdkFunctionWrapper = ( + action: (requestHeaders?: Record) => Promise, + operationName: string, + operationType?: string, + variables?: any, +) => Promise; + +const defaultWrapper: SdkFunctionWrapper = ( + action, + _operationName, + _operationType, + _variables, +) => action(); + +export function getSdk( + client: GraphQLClient, + withWrapper: SdkFunctionWrapper = defaultWrapper, +) { + return { + GetAppReview( + variables: GetAppReviewQueryVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(GetAppReviewDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders, + }), + "GetAppReview", + "query", + variables, + ); + }, + }; +} +export type Sdk = ReturnType; diff --git a/web/api/v2/app/submit-app-review/graphql/fetch-current-app-review.graphql b/web/api/v2/app/submit-app-review/graphql/fetch-current-app-review.graphql new file mode 100644 index 000000000..e7e1a751b --- /dev/null +++ b/web/api/v2/app/submit-app-review/graphql/fetch-current-app-review.graphql @@ -0,0 +1,10 @@ +query GetAppReview($app_id: String!, $nullifier_hash: String!) { + app_reviews( + where: { + nullifier_hash: { _eq: $nullifier_hash } + app_id: { _eq: $app_id } + } + ) { + rating + } +} diff --git a/web/api/v2/app/submit-app-review/graphql/update-review-counter.generated.ts b/web/api/v2/app/submit-app-review/graphql/update-review-counter.generated.ts new file mode 100644 index 000000000..fc026c90b --- /dev/null +++ b/web/api/v2/app/submit-app-review/graphql/update-review-counter.generated.ts @@ -0,0 +1,68 @@ +/* eslint-disable import/no-relative-parent-imports -- auto generated file */ +import * as Types from "@/graphql/graphql"; + +import { GraphQLClient, RequestOptions } from "graphql-request"; +import gql from "graphql-tag"; +type GraphQLClientRequestHeaders = RequestOptions["requestHeaders"]; +export type UpdateAppRatingSumMutationMutationVariables = Types.Exact<{ + app_id: Types.Scalars["String"]["input"]; + rating: Types.Scalars["bigint"]["input"]; +}>; + +export type UpdateAppRatingSumMutationMutation = { + __typename?: "mutation_root"; + update_app?: { + __typename?: "app_mutation_response"; + affected_rows: number; + } | null; +}; + +export const UpdateAppRatingSumMutationDocument = gql` + mutation UpdateAppRatingSumMutation($app_id: String!, $rating: bigint!) { + update_app( + where: { id: { _eq: $app_id } } + _inc: { rating_count: 1, rating_sum: $rating } + ) { + affected_rows + } + } +`; + +export type SdkFunctionWrapper = ( + action: (requestHeaders?: Record) => Promise, + operationName: string, + operationType?: string, + variables?: any, +) => Promise; + +const defaultWrapper: SdkFunctionWrapper = ( + action, + _operationName, + _operationType, + _variables, +) => action(); + +export function getSdk( + client: GraphQLClient, + withWrapper: SdkFunctionWrapper = defaultWrapper, +) { + return { + UpdateAppRatingSumMutation( + variables: UpdateAppRatingSumMutationMutationVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + UpdateAppRatingSumMutationDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders }, + ), + "UpdateAppRatingSumMutation", + "mutation", + variables, + ); + }, + }; +} +export type Sdk = ReturnType; diff --git a/web/api/v2/app/submit-app-review/graphql/update-review-counter.graphql b/web/api/v2/app/submit-app-review/graphql/update-review-counter.graphql new file mode 100644 index 000000000..d7aef652e --- /dev/null +++ b/web/api/v2/app/submit-app-review/graphql/update-review-counter.graphql @@ -0,0 +1,8 @@ +mutation UpdateAppRatingSumMutation($app_id: String!, $rating: bigint!) { + update_app( + where: { id: { _eq: $app_id } } + _inc: { rating_count: 1, rating_sum: $rating } + ) { + affected_rows + } +} diff --git a/web/api/v2/app/submit-app-review/index.ts b/web/api/v2/app/submit-app-review/index.ts index 792aa9558..7ec8bd51f 100644 --- a/web/api/v2/app/submit-app-review/index.ts +++ b/web/api/v2/app/submit-app-review/index.ts @@ -10,6 +10,8 @@ import { AppErrorCodes, VerificationLevel } from "@worldcoin/idkit-core"; import { hashToField } from "@worldcoin/idkit-core/hashing"; import { NextRequest, NextResponse } from "next/server"; import * as yup from "yup"; +import { getSdk as fetchAppReview } from "./graphql/fetch-current-app-review.generated"; +import { getSdk as updateReviewCount } from "./graphql/update-review-counter.generated"; import { getSdk as upsertAppReview } from "./graphql/upsert-app-review.generated"; const schema = yup.object({ @@ -93,6 +95,11 @@ export const POST = async (req: NextRequest) => { const serviceClient = await getAPIServiceGraphqlClient(); + const { app_reviews } = await fetchAppReview(serviceClient).GetAppReview({ + nullifier_hash: parsedParams.nullifier_hash, + app_id: app_id, + }); + // Anchor: Insert App Rating or Update App Rating const { insert_app_reviews_one } = await upsertAppReview( serviceClient, @@ -113,6 +120,22 @@ export const POST = async (req: NextRequest) => { }); } + // Anchor: Update App Review Count + let ratingChange = parsedParams.rating; + if (app_reviews.length) { + ratingChange = parsedParams.rating - app_reviews[0].rating; + } + const { update_app } = await updateReviewCount( + serviceClient, + ).UpdateAppRatingSumMutation({ + app_id: app_id, + rating: ratingChange, + }); + + if (!update_app) { + console.warn("Failed to update app review count"); + } + await captureEvent({ event: "action_verify_success", distinctId: `app_review_${app_id}`, diff --git a/web/graphql/graphql.schema.json b/web/graphql/graphql.schema.json index 07d61a2f2..a298676fa 100644 --- a/web/graphql/graphql.schema.json +++ b/web/graphql/graphql.schema.json @@ -14,7 +14,6 @@ "kind": "OBJECT", "name": "BanAppOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "success", @@ -38,7 +37,6 @@ "kind": "SCALAR", "name": "Boolean", "description": "The `Boolean` scalar type represents `true` or `false`.", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -49,7 +47,6 @@ "kind": "INPUT_OBJECT", "name": "Boolean_comparison_exp", "description": "Boolean expression to compare columns of type \"Boolean\". All fields are combined with logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -185,7 +182,6 @@ "kind": "OBJECT", "name": "CreateNewDraftOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "success", @@ -209,7 +205,6 @@ "kind": "OBJECT", "name": "DeleteImageOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "success", @@ -233,7 +228,6 @@ "kind": "SCALAR", "name": "Float", "description": "The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -244,7 +238,6 @@ "kind": "OBJECT", "name": "GetUploadedImageOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "url", @@ -272,7 +265,6 @@ "kind": "OBJECT", "name": "ImageGetAllUnverifiedImagesOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "hero_image_url", @@ -328,7 +320,6 @@ "kind": "OBJECT", "name": "ImageGetAppReviewImagesOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "hero_image_url", @@ -384,7 +375,6 @@ "kind": "SCALAR", "name": "Int", "description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -395,7 +385,6 @@ "kind": "INPUT_OBJECT", "name": "Int_comparison_exp", "description": "Boolean expression to compare columns of type \"Int\". All fields are combined with logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -531,7 +520,6 @@ "kind": "OBJECT", "name": "InvalidateCacheOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "success", @@ -555,7 +543,6 @@ "kind": "OBJECT", "name": "InviteTeamMembersOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "emails", @@ -587,7 +574,6 @@ "kind": "OBJECT", "name": "PresignedPostOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "stringifiedFields", @@ -631,7 +617,6 @@ "kind": "OBJECT", "name": "ResetAPIOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "api_key", @@ -659,7 +644,6 @@ "kind": "OBJECT", "name": "ResetClientOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "client_secret", @@ -687,7 +671,6 @@ "kind": "SCALAR", "name": "String", "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -698,7 +681,6 @@ "kind": "INPUT_OBJECT", "name": "String_array_comparison_exp", "description": "Boolean expression to compare columns of type \"String\". All fields are combined with logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -938,7 +920,6 @@ "kind": "INPUT_OBJECT", "name": "String_comparison_exp", "description": "Boolean expression to compare columns of type \"String\". All fields are combined with logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -1194,7 +1175,6 @@ "kind": "OBJECT", "name": "ValidateLocalisationOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "success", @@ -1218,7 +1198,6 @@ "kind": "OBJECT", "name": "VerifyAppOutput", "description": null, - "isOneOf": null, "fields": [ { "name": "success", @@ -1242,7 +1221,6 @@ "kind": "OBJECT", "name": "__Directive", "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", - "isOneOf": null, "fields": [ { "name": "name", @@ -1359,7 +1337,6 @@ "kind": "ENUM", "name": "__DirectiveLocation", "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -1485,7 +1462,6 @@ "kind": "OBJECT", "name": "__EnumValue", "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", - "isOneOf": null, "fields": [ { "name": "name", @@ -1553,7 +1529,6 @@ "kind": "OBJECT", "name": "__Field", "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", - "isOneOf": null, "fields": [ { "name": "name", @@ -1674,7 +1649,6 @@ "kind": "OBJECT", "name": "__InputValue", "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", - "isOneOf": null, "fields": [ { "name": "name", @@ -1770,7 +1744,6 @@ "kind": "OBJECT", "name": "__Schema", "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", - "isOneOf": null, "fields": [ { "name": "description", @@ -1882,7 +1855,6 @@ "kind": "OBJECT", "name": "__Type", "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.", - "isOneOf": null, "fields": [ { "name": "kind", @@ -2086,18 +2058,6 @@ }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "isOneOf", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null } ], "inputFields": null, @@ -2109,7 +2069,6 @@ "kind": "ENUM", "name": "__TypeKind", "description": "An enum describing what kind of type a given `__Type` is.", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -2169,7 +2128,6 @@ "kind": "OBJECT", "name": "action", "description": "columns and relationships of \"action\"", - "isOneOf": null, "fields": [ { "name": "action", @@ -2845,7 +2803,6 @@ "kind": "OBJECT", "name": "action_aggregate", "description": "aggregated selection of \"action\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -2893,7 +2850,6 @@ "kind": "INPUT_OBJECT", "name": "action_aggregate_bool_exp", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -2941,7 +2897,6 @@ "kind": "INPUT_OBJECT", "name": "action_aggregate_bool_exp_bool_and", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -3009,7 +2964,6 @@ "kind": "INPUT_OBJECT", "name": "action_aggregate_bool_exp_bool_or", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -3077,7 +3031,6 @@ "kind": "INPUT_OBJECT", "name": "action_aggregate_bool_exp_count", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -3149,7 +3102,6 @@ "kind": "OBJECT", "name": "action_aggregate_fields", "description": "aggregate fields of \"action\"", - "isOneOf": null, "fields": [ { "name": "avg", @@ -3330,7 +3282,6 @@ "kind": "INPUT_OBJECT", "name": "action_aggregate_order_by", "description": "order by aggregate values of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -3474,7 +3425,6 @@ "kind": "INPUT_OBJECT", "name": "action_arr_rel_insert_input", "description": "input type for inserting array relation for remote table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -3522,7 +3472,6 @@ "kind": "OBJECT", "name": "action_avg_fields", "description": "aggregate avg on columns", - "isOneOf": null, "fields": [ { "name": "max_accounts_per_user", @@ -3570,7 +3519,6 @@ "kind": "INPUT_OBJECT", "name": "action_avg_order_by", "description": "order by avg() on columns of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -3606,7 +3554,6 @@ "kind": "INPUT_OBJECT", "name": "action_bool_exp", "description": "Boolean expression to filter rows from the table \"action\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -3934,7 +3881,6 @@ "kind": "ENUM", "name": "action_constraint", "description": "unique or primary key constraints on table \"action\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -3964,7 +3910,6 @@ "kind": "INPUT_OBJECT", "name": "action_inc_input", "description": "input type for incrementing numeric columns in table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -4000,7 +3945,6 @@ "kind": "INPUT_OBJECT", "name": "action_insert_input", "description": "input type for inserting data into table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -4240,7 +4184,6 @@ "kind": "OBJECT", "name": "action_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "action", @@ -4444,7 +4387,6 @@ "kind": "INPUT_OBJECT", "name": "action_max_order_by", "description": "order by max() on columns of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -4636,7 +4578,6 @@ "kind": "OBJECT", "name": "action_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "action", @@ -4840,7 +4781,6 @@ "kind": "INPUT_OBJECT", "name": "action_min_order_by", "description": "order by min() on columns of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -5032,7 +4972,6 @@ "kind": "OBJECT", "name": "action_mutation_response", "description": "response of any mutation on the table \"action\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -5084,7 +5023,6 @@ "kind": "INPUT_OBJECT", "name": "action_obj_rel_insert_input", "description": "input type for inserting object relation for remote table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -5124,7 +5062,6 @@ "kind": "INPUT_OBJECT", "name": "action_on_conflict", "description": "on_conflict condition type for table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -5188,7 +5125,6 @@ "kind": "INPUT_OBJECT", "name": "action_order_by", "description": "Ordering options when selecting data from \"action\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -5440,7 +5376,6 @@ "kind": "INPUT_OBJECT", "name": "action_pk_columns_input", "description": "primary key columns input for table: action", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -5468,7 +5403,6 @@ "kind": "ENUM", "name": "action_select_column", "description": "select columns of table \"action\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -5576,7 +5510,6 @@ "kind": "ENUM", "name": "action_select_column_action_aggregate_bool_exp_bool_and_arguments_columns", "description": "select \"action_aggregate_bool_exp_bool_and_arguments_columns\" columns of table \"action\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -5594,7 +5527,6 @@ "kind": "ENUM", "name": "action_select_column_action_aggregate_bool_exp_bool_or_arguments_columns", "description": "select \"action_aggregate_bool_exp_bool_or_arguments_columns\" columns of table \"action\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -5612,7 +5544,6 @@ "kind": "INPUT_OBJECT", "name": "action_set_input", "description": "input type for updating data in table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -5816,7 +5747,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_args", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -5864,7 +5794,6 @@ "kind": "OBJECT", "name": "action_stats_returning", "description": "Returning value of action_stats function", - "isOneOf": null, "fields": [ { "name": "action", @@ -5956,7 +5885,6 @@ "kind": "OBJECT", "name": "action_stats_returning_aggregate", "description": null, - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -6004,7 +5932,6 @@ "kind": "OBJECT", "name": "action_stats_returning_aggregate_fields", "description": "aggregate fields of \"action_stats_returning\"", - "isOneOf": null, "fields": [ { "name": "avg", @@ -6185,7 +6112,6 @@ "kind": "OBJECT", "name": "action_stats_returning_avg_fields", "description": "aggregate avg on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -6221,7 +6147,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_returning_bool_exp", "description": "Boolean expression to filter rows from the table \"action_stats_returning\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -6345,7 +6270,6 @@ "kind": "ENUM", "name": "action_stats_returning_constraint", "description": "unique or primary key constraints on table \"action_stats_returning\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -6363,7 +6287,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_returning_inc_input", "description": "input type for incrementing numeric columns in table \"action_stats_returning\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -6399,7 +6322,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_returning_insert_input", "description": "input type for inserting data into table \"action_stats_returning\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -6471,7 +6393,6 @@ "kind": "OBJECT", "name": "action_stats_returning_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "action_id", @@ -6531,7 +6452,6 @@ "kind": "OBJECT", "name": "action_stats_returning_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "action_id", @@ -6591,7 +6511,6 @@ "kind": "OBJECT", "name": "action_stats_returning_mutation_response", "description": "response of any mutation on the table \"action_stats_returning\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -6643,7 +6562,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_returning_on_conflict", "description": "on_conflict condition type for table \"action_stats_returning\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -6707,7 +6625,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_returning_order_by", "description": "Ordering options when selecting data from \"action_stats_returning\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -6779,7 +6696,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_returning_pk_columns_input", "description": "primary key columns input for table: action_stats_returning", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -6807,7 +6723,6 @@ "kind": "ENUM", "name": "action_stats_returning_select_column", "description": "select columns of table \"action_stats_returning\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -6843,7 +6758,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_returning_set_input", "description": "input type for updating data in table \"action_stats_returning\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -6903,7 +6817,6 @@ "kind": "OBJECT", "name": "action_stats_returning_stddev_fields", "description": "aggregate stddev on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -6939,7 +6852,6 @@ "kind": "OBJECT", "name": "action_stats_returning_stddev_pop_fields", "description": "aggregate stddev_pop on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -6975,7 +6887,6 @@ "kind": "OBJECT", "name": "action_stats_returning_stddev_samp_fields", "description": "aggregate stddev_samp on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -7011,7 +6922,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_returning_stream_cursor_input", "description": "Streaming cursor of the table \"action_stats_returning\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -7051,7 +6961,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_returning_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -7111,7 +7020,6 @@ "kind": "OBJECT", "name": "action_stats_returning_sum_fields", "description": "aggregate sum on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -7147,7 +7055,6 @@ "kind": "ENUM", "name": "action_stats_returning_update_column", "description": "update columns of table \"action_stats_returning\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -7183,7 +7090,6 @@ "kind": "INPUT_OBJECT", "name": "action_stats_returning_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -7235,7 +7141,6 @@ "kind": "OBJECT", "name": "action_stats_returning_var_pop_fields", "description": "aggregate var_pop on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -7271,7 +7176,6 @@ "kind": "OBJECT", "name": "action_stats_returning_var_samp_fields", "description": "aggregate var_samp on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -7307,7 +7211,6 @@ "kind": "OBJECT", "name": "action_stats_returning_variance_fields", "description": "aggregate variance on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -7343,7 +7246,6 @@ "kind": "OBJECT", "name": "action_stddev_fields", "description": "aggregate stddev on columns", - "isOneOf": null, "fields": [ { "name": "max_accounts_per_user", @@ -7391,7 +7293,6 @@ "kind": "INPUT_OBJECT", "name": "action_stddev_order_by", "description": "order by stddev() on columns of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -7427,7 +7328,6 @@ "kind": "OBJECT", "name": "action_stddev_pop_fields", "description": "aggregate stddev_pop on columns", - "isOneOf": null, "fields": [ { "name": "max_accounts_per_user", @@ -7475,7 +7375,6 @@ "kind": "INPUT_OBJECT", "name": "action_stddev_pop_order_by", "description": "order by stddev_pop() on columns of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -7511,7 +7410,6 @@ "kind": "OBJECT", "name": "action_stddev_samp_fields", "description": "aggregate stddev_samp on columns", - "isOneOf": null, "fields": [ { "name": "max_accounts_per_user", @@ -7559,7 +7457,6 @@ "kind": "INPUT_OBJECT", "name": "action_stddev_samp_order_by", "description": "order by stddev_samp() on columns of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -7595,7 +7492,6 @@ "kind": "INPUT_OBJECT", "name": "action_stream_cursor_input", "description": "Streaming cursor of the table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -7635,7 +7531,6 @@ "kind": "INPUT_OBJECT", "name": "action_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -7839,7 +7734,6 @@ "kind": "OBJECT", "name": "action_sum_fields", "description": "aggregate sum on columns", - "isOneOf": null, "fields": [ { "name": "max_accounts_per_user", @@ -7887,7 +7781,6 @@ "kind": "INPUT_OBJECT", "name": "action_sum_order_by", "description": "order by sum() on columns of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -7923,7 +7816,6 @@ "kind": "ENUM", "name": "action_update_column", "description": "update columns of table \"action\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -8031,7 +7923,6 @@ "kind": "INPUT_OBJECT", "name": "action_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -8083,7 +7974,6 @@ "kind": "OBJECT", "name": "action_var_pop_fields", "description": "aggregate var_pop on columns", - "isOneOf": null, "fields": [ { "name": "max_accounts_per_user", @@ -8131,7 +8021,6 @@ "kind": "INPUT_OBJECT", "name": "action_var_pop_order_by", "description": "order by var_pop() on columns of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -8167,7 +8056,6 @@ "kind": "OBJECT", "name": "action_var_samp_fields", "description": "aggregate var_samp on columns", - "isOneOf": null, "fields": [ { "name": "max_accounts_per_user", @@ -8215,7 +8103,6 @@ "kind": "INPUT_OBJECT", "name": "action_var_samp_order_by", "description": "order by var_samp() on columns of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -8251,7 +8138,6 @@ "kind": "OBJECT", "name": "action_variance_fields", "description": "aggregate variance on columns", - "isOneOf": null, "fields": [ { "name": "max_accounts_per_user", @@ -8299,7 +8185,6 @@ "kind": "INPUT_OBJECT", "name": "action_variance_order_by", "description": "order by variance() on columns of table \"action\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -8335,7 +8220,6 @@ "kind": "OBJECT", "name": "api_key", "description": "columns and relationships of \"api_key\"", - "isOneOf": null, "fields": [ { "name": "api_key", @@ -8475,7 +8359,6 @@ "kind": "OBJECT", "name": "api_key_aggregate", "description": "aggregated selection of \"api_key\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -8523,7 +8406,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_aggregate_bool_exp", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -8571,7 +8453,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_aggregate_bool_exp_bool_and", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -8639,7 +8520,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_aggregate_bool_exp_bool_or", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -8707,7 +8587,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_aggregate_bool_exp_count", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -8779,7 +8658,6 @@ "kind": "OBJECT", "name": "api_key_aggregate_fields", "description": "aggregate fields of \"api_key\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -8864,7 +8742,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_aggregate_order_by", "description": "order by aggregate values of table \"api_key\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -8912,7 +8789,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_arr_rel_insert_input", "description": "input type for inserting array relation for remote table \"api_key\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -8960,7 +8836,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_bool_exp", "description": "Boolean expression to filter rows from the table \"api_key\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -9120,7 +8995,6 @@ "kind": "ENUM", "name": "api_key_constraint", "description": "unique or primary key constraints on table \"api_key\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -9138,7 +9012,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_insert_input", "description": "input type for inserting data into table \"api_key\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -9246,7 +9119,6 @@ "kind": "OBJECT", "name": "api_key_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "api_key", @@ -9330,7 +9202,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_max_order_by", "description": "order by max() on columns of table \"api_key\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -9414,7 +9285,6 @@ "kind": "OBJECT", "name": "api_key_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "api_key", @@ -9498,7 +9368,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_min_order_by", "description": "order by min() on columns of table \"api_key\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -9582,7 +9451,6 @@ "kind": "OBJECT", "name": "api_key_mutation_response", "description": "response of any mutation on the table \"api_key\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -9634,7 +9502,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_on_conflict", "description": "on_conflict condition type for table \"api_key\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -9698,7 +9565,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_order_by", "description": "Ordering options when selecting data from \"api_key\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -9806,7 +9672,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_pk_columns_input", "description": "primary key columns input for table: api_key", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -9834,7 +9699,6 @@ "kind": "ENUM", "name": "api_key_select_column", "description": "select columns of table \"api_key\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -9888,7 +9752,6 @@ "kind": "ENUM", "name": "api_key_select_column_api_key_aggregate_bool_exp_bool_and_arguments_columns", "description": "select \"api_key_aggregate_bool_exp_bool_and_arguments_columns\" columns of table \"api_key\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -9906,7 +9769,6 @@ "kind": "ENUM", "name": "api_key_select_column_api_key_aggregate_bool_exp_bool_or_arguments_columns", "description": "select \"api_key_aggregate_bool_exp_bool_or_arguments_columns\" columns of table \"api_key\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -9924,7 +9786,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_set_input", "description": "input type for updating data in table \"api_key\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -10020,7 +9881,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_stream_cursor_input", "description": "Streaming cursor of the table \"api_key\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -10060,7 +9920,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -10156,7 +10015,6 @@ "kind": "ENUM", "name": "api_key_update_column", "description": "update columns of table \"api_key\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -10210,7 +10068,6 @@ "kind": "INPUT_OBJECT", "name": "api_key_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -10250,7 +10107,6 @@ "kind": "OBJECT", "name": "app", "description": "columns and relationships of \"app\"", - "isOneOf": null, "fields": [ { "name": "actions", @@ -10784,6 +10640,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": null, @@ -10870,7 +10750,6 @@ "kind": "OBJECT", "name": "app_aggregate", "description": "aggregated selection of \"app\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -10918,7 +10797,6 @@ "kind": "INPUT_OBJECT", "name": "app_aggregate_bool_exp", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -10966,7 +10844,6 @@ "kind": "INPUT_OBJECT", "name": "app_aggregate_bool_exp_bool_and", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -11034,7 +10911,6 @@ "kind": "INPUT_OBJECT", "name": "app_aggregate_bool_exp_bool_or", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -11102,7 +10978,6 @@ "kind": "INPUT_OBJECT", "name": "app_aggregate_bool_exp_count", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -11174,8 +11049,19 @@ "kind": "OBJECT", "name": "app_aggregate_fields", "description": "aggregate fields of \"app\"", - "isOneOf": null, "fields": [ + { + "name": "avg", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "app_avg_fields", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "count", "description": null, @@ -11248,6 +11134,90 @@ }, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "stddev", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "app_stddev_fields", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stddev_pop", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "app_stddev_pop_fields", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stddev_samp", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "app_stddev_samp_fields", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sum", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "app_sum_fields", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "var_pop", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "app_var_pop_fields", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "var_samp", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "app_var_samp_fields", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "variance", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "app_variance_fields", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null } ], "inputFields": null, @@ -11259,9 +11229,20 @@ "kind": "INPUT_OBJECT", "name": "app_aggregate_order_by", "description": "order by aggregate values of table \"app\"", - "isOneOf": false, "fields": null, "inputFields": [ + { + "name": "avg", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "app_avg_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "count", "description": null, @@ -11297,6 +11278,90 @@ "defaultValue": null, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "stddev", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "app_stddev_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stddev_pop", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "app_stddev_pop_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "stddev_samp", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "app_stddev_samp_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sum", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "app_sum_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "var_pop", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "app_var_pop_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "var_samp", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "app_var_samp_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "variance", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "app_variance_order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null } ], "interfaces": null, @@ -11307,7 +11372,6 @@ "kind": "INPUT_OBJECT", "name": "app_arr_rel_insert_input", "description": "input type for inserting array relation for remote table \"app\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -11351,11 +11415,80 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "OBJECT", + "name": "app_avg_fields", + "description": "aggregate avg on columns", + "fields": [ + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "app_avg_order_by", + "description": "order by avg() on columns of table \"app\"", + "fields": null, + "inputFields": [ + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "app_bool_exp", "description": "Boolean expression to filter rows from the table \"app\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -11566,6 +11699,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "bigint_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "bigint_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": null, @@ -11635,7 +11792,6 @@ "kind": "ENUM", "name": "app_constraint", "description": "unique or primary key constraints on table \"app\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -11649,11 +11805,45 @@ ], "possibleTypes": null }, + { + "kind": "INPUT_OBJECT", + "name": "app_inc_input", + "description": "input type for incrementing numeric columns in table \"app\"", + "fields": null, + "inputFields": [ + { + "name": "rating_count", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "app_insert_input", "description": "input type for inserting data into table \"app\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -11788,6 +11978,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": null, @@ -11857,7 +12071,6 @@ "kind": "OBJECT", "name": "app_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -11931,6 +12144,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": null, @@ -11989,7 +12226,6 @@ "kind": "INPUT_OBJECT", "name": "app_max_order_by", "description": "order by max() on columns of table \"app\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -12064,6 +12300,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": null, @@ -12121,7 +12381,6 @@ "kind": "OBJECT", "name": "app_metadata", "description": "columns and relationships of \"app_metadata\"", - "isOneOf": null, "fields": [ { "name": "app", @@ -12931,7 +13190,6 @@ "kind": "OBJECT", "name": "app_metadata_aggregate", "description": "aggregated selection of \"app_metadata\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -12979,7 +13237,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_aggregate_bool_exp", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -13027,7 +13284,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_aggregate_bool_exp_bool_and", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -13095,7 +13351,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_aggregate_bool_exp_bool_or", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -13163,7 +13418,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_aggregate_bool_exp_count", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -13235,7 +13489,6 @@ "kind": "OBJECT", "name": "app_metadata_aggregate_fields", "description": "aggregate fields of \"app_metadata\"", - "isOneOf": null, "fields": [ { "name": "avg", @@ -13416,7 +13669,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_aggregate_order_by", "description": "order by aggregate values of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -13560,7 +13812,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_arr_rel_insert_input", "description": "input type for inserting array relation for remote table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -13608,7 +13859,6 @@ "kind": "OBJECT", "name": "app_metadata_avg_fields", "description": "aggregate avg on columns", - "isOneOf": null, "fields": [ { "name": "app_rating", @@ -13644,7 +13894,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_avg_order_by", "description": "order by avg() on columns of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -13668,7 +13917,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_bool_exp", "description": "Boolean expression to filter rows from the table \"app_metadata\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -14200,7 +14448,6 @@ "kind": "ENUM", "name": "app_metadata_constraint", "description": "unique or primary key constraints on table \"app_metadata\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -14224,7 +14471,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_inc_input", "description": "input type for incrementing numeric columns in table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -14248,7 +14494,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_insert_input", "description": "input type for inserting data into table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -14760,7 +15005,6 @@ "kind": "OBJECT", "name": "app_metadata_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -15188,7 +15432,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_max_order_by", "description": "order by max() on columns of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -15548,7 +15791,6 @@ "kind": "OBJECT", "name": "app_metadata_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -15976,7 +16218,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_min_order_by", "description": "order by min() on columns of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -16336,7 +16577,6 @@ "kind": "OBJECT", "name": "app_metadata_mutation_response", "description": "response of any mutation on the table \"app_metadata\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -16388,7 +16628,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_obj_rel_insert_input", "description": "input type for inserting object relation for remote table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -16428,7 +16667,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_on_conflict", "description": "on_conflict condition type for table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -16492,7 +16730,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_order_by", "description": "Ordering options when selecting data from \"app_metadata\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -16960,7 +17197,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_pk_columns_input", "description": "primary key columns input for table: app_metadata", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -16988,7 +17224,6 @@ "kind": "ENUM", "name": "app_metadata_select_column", "description": "select columns of table \"app_metadata\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -17210,7 +17445,6 @@ "kind": "ENUM", "name": "app_metadata_select_column_app_metadata_aggregate_bool_exp_bool_and_arguments_columns", "description": "select \"app_metadata_aggregate_bool_exp_bool_and_arguments_columns\" columns of table \"app_metadata\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -17258,7 +17492,6 @@ "kind": "ENUM", "name": "app_metadata_select_column_app_metadata_aggregate_bool_exp_bool_or_arguments_columns", "description": "select \"app_metadata_aggregate_bool_exp_bool_or_arguments_columns\" columns of table \"app_metadata\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -17306,7 +17539,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_set_input", "description": "input type for updating data in table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -17794,7 +18026,6 @@ "kind": "OBJECT", "name": "app_metadata_stddev_fields", "description": "aggregate stddev on columns", - "isOneOf": null, "fields": [ { "name": "app_rating", @@ -17830,7 +18061,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_stddev_order_by", "description": "order by stddev() on columns of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -17854,7 +18084,6 @@ "kind": "OBJECT", "name": "app_metadata_stddev_pop_fields", "description": "aggregate stddev_pop on columns", - "isOneOf": null, "fields": [ { "name": "app_rating", @@ -17890,7 +18119,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_stddev_pop_order_by", "description": "order by stddev_pop() on columns of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -17914,7 +18142,6 @@ "kind": "OBJECT", "name": "app_metadata_stddev_samp_fields", "description": "aggregate stddev_samp on columns", - "isOneOf": null, "fields": [ { "name": "app_rating", @@ -17950,7 +18177,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_stddev_samp_order_by", "description": "order by stddev_samp() on columns of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -17974,7 +18200,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_stream_cursor_input", "description": "Streaming cursor of the table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -18014,7 +18239,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -18502,7 +18726,6 @@ "kind": "OBJECT", "name": "app_metadata_sum_fields", "description": "aggregate sum on columns", - "isOneOf": null, "fields": [ { "name": "app_rating", @@ -18538,7 +18761,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_sum_order_by", "description": "order by sum() on columns of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -18562,7 +18784,6 @@ "kind": "ENUM", "name": "app_metadata_update_column", "description": "update columns of table \"app_metadata\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -18784,7 +19005,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -18836,7 +19056,6 @@ "kind": "OBJECT", "name": "app_metadata_var_pop_fields", "description": "aggregate var_pop on columns", - "isOneOf": null, "fields": [ { "name": "app_rating", @@ -18872,7 +19091,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_var_pop_order_by", "description": "order by var_pop() on columns of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -18896,7 +19114,6 @@ "kind": "OBJECT", "name": "app_metadata_var_samp_fields", "description": "aggregate var_samp on columns", - "isOneOf": null, "fields": [ { "name": "app_rating", @@ -18932,7 +19149,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_var_samp_order_by", "description": "order by var_samp() on columns of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -18956,7 +19172,6 @@ "kind": "OBJECT", "name": "app_metadata_variance_fields", "description": "aggregate variance on columns", - "isOneOf": null, "fields": [ { "name": "app_rating", @@ -18992,7 +19207,6 @@ "kind": "INPUT_OBJECT", "name": "app_metadata_variance_order_by", "description": "order by variance() on columns of table \"app_metadata\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -19016,7 +19230,6 @@ "kind": "OBJECT", "name": "app_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -19090,6 +19303,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": null, @@ -19148,7 +19385,6 @@ "kind": "INPUT_OBJECT", "name": "app_min_order_by", "description": "order by min() on columns of table \"app\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -19223,6 +19459,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": null, @@ -19280,7 +19540,6 @@ "kind": "OBJECT", "name": "app_mutation_response", "description": "response of any mutation on the table \"app\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -19332,7 +19591,6 @@ "kind": "INPUT_OBJECT", "name": "app_obj_rel_insert_input", "description": "input type for inserting object relation for remote table \"app\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -19372,7 +19630,6 @@ "kind": "INPUT_OBJECT", "name": "app_on_conflict", "description": "on_conflict condition type for table \"app\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -19436,7 +19693,6 @@ "kind": "INPUT_OBJECT", "name": "app_order_by", "description": "Ordering options when selecting data from \"app\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -19571,6 +19827,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": null, @@ -19640,7 +19920,6 @@ "kind": "INPUT_OBJECT", "name": "app_pk_columns_input", "description": "primary key columns input for table: app", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -19668,7 +19947,6 @@ "kind": "OBJECT", "name": "app_rankings", "description": "columns and relationships of \"app_rankings\"", - "isOneOf": null, "fields": [ { "name": "country", @@ -19748,7 +20026,6 @@ "kind": "OBJECT", "name": "app_rankings_aggregate", "description": "aggregated selection of \"app_rankings\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -19796,7 +20073,6 @@ "kind": "OBJECT", "name": "app_rankings_aggregate_fields", "description": "aggregate fields of \"app_rankings\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -19881,7 +20157,6 @@ "kind": "INPUT_OBJECT", "name": "app_rankings_bool_exp", "description": "Boolean expression to filter rows from the table \"app_rankings\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -19993,7 +20268,6 @@ "kind": "ENUM", "name": "app_rankings_constraint", "description": "unique or primary key constraints on table \"app_rankings\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -20017,7 +20291,6 @@ "kind": "INPUT_OBJECT", "name": "app_rankings_insert_input", "description": "input type for inserting data into table \"app_rankings\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -20085,7 +20358,6 @@ "kind": "OBJECT", "name": "app_rankings_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "country", @@ -20153,7 +20425,6 @@ "kind": "OBJECT", "name": "app_rankings_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "country", @@ -20221,7 +20492,6 @@ "kind": "OBJECT", "name": "app_rankings_mutation_response", "description": "response of any mutation on the table \"app_rankings\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -20273,7 +20543,6 @@ "kind": "INPUT_OBJECT", "name": "app_rankings_on_conflict", "description": "on_conflict condition type for table \"app_rankings\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -20337,7 +20606,6 @@ "kind": "INPUT_OBJECT", "name": "app_rankings_order_by", "description": "Ordering options when selecting data from \"app_rankings\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -20397,7 +20665,6 @@ "kind": "INPUT_OBJECT", "name": "app_rankings_pk_columns_input", "description": "primary key columns input for table: app_rankings", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -20425,7 +20692,6 @@ "kind": "ENUM", "name": "app_rankings_select_column", "description": "select columns of table \"app_rankings\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -20461,7 +20727,6 @@ "kind": "INPUT_OBJECT", "name": "app_rankings_set_input", "description": "input type for updating data in table \"app_rankings\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -20529,7 +20794,6 @@ "kind": "INPUT_OBJECT", "name": "app_rankings_stream_cursor_input", "description": "Streaming cursor of the table \"app_rankings\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -20569,7 +20833,6 @@ "kind": "INPUT_OBJECT", "name": "app_rankings_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -20637,7 +20900,6 @@ "kind": "ENUM", "name": "app_rankings_update_column", "description": "update columns of table \"app_rankings\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -20673,7 +20935,6 @@ "kind": "INPUT_OBJECT", "name": "app_rankings_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -20713,7 +20974,6 @@ "kind": "OBJECT", "name": "app_report", "description": "columns and relationships of \"app_report\"", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -20795,6 +21055,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "purpose", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "reporter_email", "description": null, @@ -20818,6 +21090,18 @@ }, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "violation", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null } ], "inputFields": null, @@ -20829,7 +21113,6 @@ "kind": "OBJECT", "name": "app_report_aggregate", "description": "aggregated selection of \"app_report\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -20877,7 +21160,6 @@ "kind": "OBJECT", "name": "app_report_aggregate_fields", "description": "aggregate fields of \"app_report\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -20962,7 +21244,6 @@ "kind": "INPUT_OBJECT", "name": "app_report_bool_exp", "description": "Boolean expression to filter rows from the table \"app_report\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -21077,6 +21358,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "purpose", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "reporter_email", "description": null, @@ -21100,6 +21393,18 @@ "defaultValue": null, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "violation", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "String_comparison_exp", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null } ], "interfaces": null, @@ -21110,7 +21415,6 @@ "kind": "ENUM", "name": "app_report_constraint", "description": "unique or primary key constraints on table \"app_report\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -21128,7 +21432,6 @@ "kind": "INPUT_OBJECT", "name": "app_report_insert_input", "description": "input type for inserting data into table \"app_report\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -21191,6 +21494,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "purpose", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "reporter_email", "description": null, @@ -21214,6 +21529,18 @@ "defaultValue": null, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "violation", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null } ], "interfaces": null, @@ -21224,7 +21551,6 @@ "kind": "OBJECT", "name": "app_report_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -21286,6 +21612,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "purpose", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "reporter_email", "description": null, @@ -21309,6 +21647,18 @@ }, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "violation", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null } ], "inputFields": null, @@ -21320,7 +21670,6 @@ "kind": "OBJECT", "name": "app_report_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -21382,6 +21731,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "purpose", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "reporter_email", "description": null, @@ -21405,6 +21766,18 @@ }, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "violation", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null } ], "inputFields": null, @@ -21416,7 +21789,6 @@ "kind": "OBJECT", "name": "app_report_mutation_response", "description": "response of any mutation on the table \"app_report\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -21468,7 +21840,6 @@ "kind": "INPUT_OBJECT", "name": "app_report_on_conflict", "description": "on_conflict condition type for table \"app_report\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -21532,7 +21903,6 @@ "kind": "INPUT_OBJECT", "name": "app_report_order_by", "description": "Ordering options when selecting data from \"app_report\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -21595,6 +21965,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "purpose", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "reporter_email", "description": null, @@ -21618,6 +22000,18 @@ "defaultValue": null, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "violation", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null } ], "interfaces": null, @@ -21628,7 +22022,6 @@ "kind": "INPUT_OBJECT", "name": "app_report_pk_columns_input", "description": "primary key columns input for table: app_report", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -21656,7 +22049,6 @@ "kind": "ENUM", "name": "app_report_select_column", "description": "select columns of table \"app_report\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -21691,6 +22083,12 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "purpose", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, { "name": "reporter_email", "description": "column name", @@ -21702,6 +22100,12 @@ "description": "column name", "isDeprecated": false, "deprecationReason": null + }, + { + "name": "violation", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null } ], "possibleTypes": null @@ -21710,7 +22114,6 @@ "kind": "INPUT_OBJECT", "name": "app_report_set_input", "description": "input type for updating data in table \"app_report\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -21773,6 +22176,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "purpose", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "reporter_email", "description": null, @@ -21796,6 +22211,18 @@ "defaultValue": null, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "violation", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null } ], "interfaces": null, @@ -21806,7 +22233,6 @@ "kind": "INPUT_OBJECT", "name": "app_report_stream_cursor_input", "description": "Streaming cursor of the table \"app_report\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -21846,7 +22272,6 @@ "kind": "INPUT_OBJECT", "name": "app_report_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -21909,6 +22334,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "purpose", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "reporter_email", "description": null, @@ -21932,6 +22369,18 @@ "defaultValue": null, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "violation", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null } ], "interfaces": null, @@ -21942,7 +22391,6 @@ "kind": "ENUM", "name": "app_report_update_column", "description": "update columns of table \"app_report\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -21977,6 +22425,12 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "purpose", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, { "name": "reporter_email", "description": "column name", @@ -21988,6 +22442,12 @@ "description": "column name", "isDeprecated": false, "deprecationReason": null + }, + { + "name": "violation", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null } ], "possibleTypes": null @@ -21996,7 +22456,6 @@ "kind": "INPUT_OBJECT", "name": "app_report_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -22036,7 +22495,6 @@ "kind": "OBJECT", "name": "app_reviews", "description": "columns and relationships of \"app_reviews\"", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -22160,7 +22618,6 @@ "kind": "OBJECT", "name": "app_reviews_aggregate", "description": "aggregated selection of \"app_reviews\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -22208,7 +22665,6 @@ "kind": "OBJECT", "name": "app_reviews_aggregate_fields", "description": "aggregate fields of \"app_reviews\"", - "isOneOf": null, "fields": [ { "name": "avg", @@ -22389,7 +22845,6 @@ "kind": "OBJECT", "name": "app_reviews_avg_fields", "description": "aggregate avg on columns", - "isOneOf": null, "fields": [ { "name": "rating", @@ -22413,7 +22868,6 @@ "kind": "INPUT_OBJECT", "name": "app_reviews_bool_exp", "description": "Boolean expression to filter rows from the table \"app_reviews\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -22561,7 +23015,6 @@ "kind": "ENUM", "name": "app_reviews_constraint", "description": "unique or primary key constraints on table \"app_reviews\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -22585,7 +23038,6 @@ "kind": "INPUT_OBJECT", "name": "app_reviews_inc_input", "description": "input type for incrementing numeric columns in table \"app_reviews\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -22609,7 +23061,6 @@ "kind": "INPUT_OBJECT", "name": "app_reviews_insert_input", "description": "input type for inserting data into table \"app_reviews\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -22705,7 +23156,6 @@ "kind": "OBJECT", "name": "app_reviews_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -22801,7 +23251,6 @@ "kind": "OBJECT", "name": "app_reviews_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -22897,7 +23346,6 @@ "kind": "OBJECT", "name": "app_reviews_mutation_response", "description": "response of any mutation on the table \"app_reviews\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -22949,7 +23397,6 @@ "kind": "INPUT_OBJECT", "name": "app_reviews_on_conflict", "description": "on_conflict condition type for table \"app_reviews\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -23013,7 +23460,6 @@ "kind": "INPUT_OBJECT", "name": "app_reviews_order_by", "description": "Ordering options when selecting data from \"app_reviews\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -23109,7 +23555,6 @@ "kind": "INPUT_OBJECT", "name": "app_reviews_pk_columns_input", "description": "primary key columns input for table: app_reviews", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -23137,7 +23582,6 @@ "kind": "ENUM", "name": "app_reviews_select_column", "description": "select columns of table \"app_reviews\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -23191,7 +23635,6 @@ "kind": "INPUT_OBJECT", "name": "app_reviews_set_input", "description": "input type for updating data in table \"app_reviews\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -23287,7 +23730,6 @@ "kind": "OBJECT", "name": "app_reviews_stddev_fields", "description": "aggregate stddev on columns", - "isOneOf": null, "fields": [ { "name": "rating", @@ -23311,7 +23753,6 @@ "kind": "OBJECT", "name": "app_reviews_stddev_pop_fields", "description": "aggregate stddev_pop on columns", - "isOneOf": null, "fields": [ { "name": "rating", @@ -23335,7 +23776,6 @@ "kind": "OBJECT", "name": "app_reviews_stddev_samp_fields", "description": "aggregate stddev_samp on columns", - "isOneOf": null, "fields": [ { "name": "rating", @@ -23359,7 +23799,6 @@ "kind": "INPUT_OBJECT", "name": "app_reviews_stream_cursor_input", "description": "Streaming cursor of the table \"app_reviews\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -23399,7 +23838,6 @@ "kind": "INPUT_OBJECT", "name": "app_reviews_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -23495,7 +23933,6 @@ "kind": "OBJECT", "name": "app_reviews_sum_fields", "description": "aggregate sum on columns", - "isOneOf": null, "fields": [ { "name": "rating", @@ -23519,7 +23956,6 @@ "kind": "ENUM", "name": "app_reviews_update_column", "description": "update columns of table \"app_reviews\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -23573,7 +24009,6 @@ "kind": "INPUT_OBJECT", "name": "app_reviews_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -23625,7 +24060,6 @@ "kind": "OBJECT", "name": "app_reviews_var_pop_fields", "description": "aggregate var_pop on columns", - "isOneOf": null, "fields": [ { "name": "rating", @@ -23649,7 +24083,6 @@ "kind": "OBJECT", "name": "app_reviews_var_samp_fields", "description": "aggregate var_samp on columns", - "isOneOf": null, "fields": [ { "name": "rating", @@ -23673,7 +24106,6 @@ "kind": "OBJECT", "name": "app_reviews_variance_fields", "description": "aggregate variance on columns", - "isOneOf": null, "fields": [ { "name": "rating", @@ -23697,7 +24129,6 @@ "kind": "ENUM", "name": "app_select_column", "description": "select columns of table \"app\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -23756,6 +24187,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": "column name", @@ -23787,7 +24230,6 @@ "kind": "ENUM", "name": "app_select_column_app_aggregate_bool_exp_bool_and_arguments_columns", "description": "select \"app_aggregate_bool_exp_bool_and_arguments_columns\" columns of table \"app\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -23817,7 +24259,6 @@ "kind": "ENUM", "name": "app_select_column_app_aggregate_bool_exp_bool_or_arguments_columns", "description": "select \"app_aggregate_bool_exp_bool_or_arguments_columns\" columns of table \"app\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -23847,7 +24288,6 @@ "kind": "INPUT_OBJECT", "name": "app_set_input", "description": "input type for updating data in table \"app\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -23958,6 +24398,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": null, @@ -24015,7 +24479,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_args", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -24063,7 +24526,6 @@ "kind": "OBJECT", "name": "app_stats_returning", "description": "Returning value of app_stats function", - "isOneOf": null, "fields": [ { "name": "app", @@ -24155,7 +24617,6 @@ "kind": "OBJECT", "name": "app_stats_returning_aggregate", "description": null, - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -24203,7 +24664,6 @@ "kind": "OBJECT", "name": "app_stats_returning_aggregate_fields", "description": "aggregate fields of \"app_stats_returning\"", - "isOneOf": null, "fields": [ { "name": "avg", @@ -24384,7 +24844,6 @@ "kind": "OBJECT", "name": "app_stats_returning_avg_fields", "description": "aggregate avg on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -24420,7 +24879,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_returning_bool_exp", "description": "Boolean expression to filter rows from the table \"app_stats_returning\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -24544,7 +25002,6 @@ "kind": "ENUM", "name": "app_stats_returning_constraint", "description": "unique or primary key constraints on table \"app_stats_returning\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -24562,7 +25019,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_returning_inc_input", "description": "input type for incrementing numeric columns in table \"app_stats_returning\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -24598,7 +25054,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_returning_insert_input", "description": "input type for inserting data into table \"app_stats_returning\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -24670,7 +25125,6 @@ "kind": "OBJECT", "name": "app_stats_returning_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -24730,7 +25184,6 @@ "kind": "OBJECT", "name": "app_stats_returning_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -24790,7 +25243,6 @@ "kind": "OBJECT", "name": "app_stats_returning_mutation_response", "description": "response of any mutation on the table \"app_stats_returning\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -24842,7 +25294,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_returning_on_conflict", "description": "on_conflict condition type for table \"app_stats_returning\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -24906,7 +25357,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_returning_order_by", "description": "Ordering options when selecting data from \"app_stats_returning\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -24978,7 +25428,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_returning_pk_columns_input", "description": "primary key columns input for table: app_stats_returning", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -25006,7 +25455,6 @@ "kind": "ENUM", "name": "app_stats_returning_select_column", "description": "select columns of table \"app_stats_returning\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -25042,7 +25490,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_returning_set_input", "description": "input type for updating data in table \"app_stats_returning\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -25102,7 +25549,6 @@ "kind": "OBJECT", "name": "app_stats_returning_stddev_fields", "description": "aggregate stddev on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -25138,7 +25584,6 @@ "kind": "OBJECT", "name": "app_stats_returning_stddev_pop_fields", "description": "aggregate stddev_pop on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -25174,7 +25619,6 @@ "kind": "OBJECT", "name": "app_stats_returning_stddev_samp_fields", "description": "aggregate stddev_samp on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -25210,7 +25654,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_returning_stream_cursor_input", "description": "Streaming cursor of the table \"app_stats_returning\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -25250,7 +25693,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_returning_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -25310,7 +25752,6 @@ "kind": "OBJECT", "name": "app_stats_returning_sum_fields", "description": "aggregate sum on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -25346,7 +25787,6 @@ "kind": "ENUM", "name": "app_stats_returning_update_column", "description": "update columns of table \"app_stats_returning\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -25382,7 +25822,6 @@ "kind": "INPUT_OBJECT", "name": "app_stats_returning_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -25434,7 +25873,6 @@ "kind": "OBJECT", "name": "app_stats_returning_var_pop_fields", "description": "aggregate var_pop on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -25470,7 +25908,6 @@ "kind": "OBJECT", "name": "app_stats_returning_var_samp_fields", "description": "aggregate var_samp on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -25506,7 +25943,6 @@ "kind": "OBJECT", "name": "app_stats_returning_variance_fields", "description": "aggregate variance on columns", - "isOneOf": null, "fields": [ { "name": "unique_users", @@ -25538,11 +25974,220 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "OBJECT", + "name": "app_stddev_fields", + "description": "aggregate stddev on columns", + "fields": [ + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "app_stddev_order_by", + "description": "order by stddev() on columns of table \"app\"", + "fields": null, + "inputFields": [ + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "app_stddev_pop_fields", + "description": "aggregate stddev_pop on columns", + "fields": [ + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "app_stddev_pop_order_by", + "description": "order by stddev_pop() on columns of table \"app\"", + "fields": null, + "inputFields": [ + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "app_stddev_samp_fields", + "description": "aggregate stddev_samp on columns", + "fields": [ + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "app_stddev_samp_order_by", + "description": "order by stddev_samp() on columns of table \"app\"", + "fields": null, + "inputFields": [ + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "app_stream_cursor_input", "description": "Streaming cursor of the table \"app\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -25582,7 +26227,6 @@ "kind": "INPUT_OBJECT", "name": "app_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -25693,6 +26337,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": null, @@ -25746,11 +26414,80 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "OBJECT", + "name": "app_sum_fields", + "description": "aggregate sum on columns", + "fields": [ + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "app_sum_order_by", + "description": "order by sum() on columns of table \"app\"", + "fields": null, + "inputFields": [ + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "ENUM", "name": "app_update_column", "description": "update columns of table \"app\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -25809,6 +26546,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "rating_count", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": "column name", + "isDeprecated": false, + "deprecationReason": null + }, { "name": "status", "description": "column name", @@ -25840,9 +26589,20 @@ "kind": "INPUT_OBJECT", "name": "app_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ + { + "name": "_inc", + "description": "increments the numeric columns with given value of the filtered values", + "type": { + "kind": "INPUT_OBJECT", + "name": "app_inc_input", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "_set", "description": "sets the columns of the filtered rows to the given values", @@ -25876,11 +26636,220 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "OBJECT", + "name": "app_var_pop_fields", + "description": "aggregate var_pop on columns", + "fields": [ + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "app_var_pop_order_by", + "description": "order by var_pop() on columns of table \"app\"", + "fields": null, + "inputFields": [ + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "app_var_samp_fields", + "description": "aggregate var_samp on columns", + "fields": [ + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "app_var_samp_order_by", + "description": "order by var_samp() on columns of table \"app\"", + "fields": null, + "inputFields": [ + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "app_variance_fields", + "description": "aggregate variance on columns", + "fields": [ + { + "name": "rating_count", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Float", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "app_variance_order_by", + "description": "order by variance() on columns of table \"app\"", + "fields": null, + "inputFields": [ + { + "name": "rating_count", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rating_sum", + "description": null, + "type": { + "kind": "ENUM", + "name": "order_by", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "OBJECT", "name": "auth_code", "description": "columns and relationships of \"auth_code\"", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -26097,7 +27066,6 @@ "kind": "OBJECT", "name": "auth_code_aggregate", "description": "aggregated selection of \"auth_code\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -26145,7 +27113,6 @@ "kind": "OBJECT", "name": "auth_code_aggregate_fields", "description": "aggregate fields of \"auth_code\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -26230,7 +27197,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_append_input", "description": "append existing jsonb value of filtered columns with new jsonb value", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -26254,7 +27220,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_bool_exp", "description": "Boolean expression to filter rows from the table \"auth_code\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -26474,7 +27439,6 @@ "kind": "ENUM", "name": "auth_code_constraint", "description": "unique or primary key constraints on table \"auth_code\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -26492,7 +27456,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_delete_at_path_input", "description": "delete the field or element with specified path (for JSON arrays, negative integers count from the end)", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -26524,7 +27487,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_delete_elem_input", "description": "delete the array element with specified index (negative integers count from the end). throws an error if top level container is not an array", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -26548,7 +27510,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_delete_key_input", "description": "delete key/value pair or string element. key/value pairs are matched based on their key value", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -26572,7 +27533,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_insert_input", "description": "input type for inserting data into table \"auth_code\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -26740,7 +27700,6 @@ "kind": "OBJECT", "name": "auth_code_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -26896,7 +27855,6 @@ "kind": "OBJECT", "name": "auth_code_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -27052,7 +28010,6 @@ "kind": "OBJECT", "name": "auth_code_mutation_response", "description": "response of any mutation on the table \"auth_code\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -27104,7 +28061,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_on_conflict", "description": "on_conflict condition type for table \"auth_code\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -27168,7 +28124,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_order_by", "description": "Ordering options when selecting data from \"auth_code\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -27336,7 +28291,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_pk_columns_input", "description": "primary key columns input for table: auth_code", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -27364,7 +28318,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_prepend_input", "description": "prepend existing jsonb value of filtered columns with new jsonb value", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -27388,7 +28341,6 @@ "kind": "ENUM", "name": "auth_code_select_column", "description": "select columns of table \"auth_code\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -27478,7 +28430,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_set_input", "description": "input type for updating data in table \"auth_code\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -27646,7 +28597,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_stream_cursor_input", "description": "Streaming cursor of the table \"auth_code\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -27686,7 +28636,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -27854,7 +28803,6 @@ "kind": "ENUM", "name": "auth_code_update_column", "description": "update columns of table \"auth_code\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -27944,7 +28892,6 @@ "kind": "INPUT_OBJECT", "name": "auth_code_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -28040,11 +28987,155 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "SCALAR", + "name": "bigint", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "bigint_comparison_exp", + "description": "Boolean expression to compare columns of type \"bigint\". All fields are combined with logical 'AND'.", + "fields": null, + "inputFields": [ + { + "name": "_eq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_gte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_in", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_is_null", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lt", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lte", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_neq", + "description": null, + "type": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_nin", + "description": null, + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "bigint", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "OBJECT", "name": "cache", "description": "columns and relationships of \"cache\"", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -28132,7 +29223,6 @@ "kind": "OBJECT", "name": "cache_aggregate", "description": "aggregated selection of \"cache\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -28180,7 +29270,6 @@ "kind": "OBJECT", "name": "cache_aggregate_fields", "description": "aggregate fields of \"cache\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -28265,7 +29354,6 @@ "kind": "INPUT_OBJECT", "name": "cache_bool_exp", "description": "Boolean expression to filter rows from the table \"cache\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -28389,7 +29477,6 @@ "kind": "ENUM", "name": "cache_constraint", "description": "unique or primary key constraints on table \"cache\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -28413,7 +29500,6 @@ "kind": "INPUT_OBJECT", "name": "cache_insert_input", "description": "input type for inserting data into table \"cache\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -28485,7 +29571,6 @@ "kind": "OBJECT", "name": "cache_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -28557,7 +29642,6 @@ "kind": "OBJECT", "name": "cache_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -28629,7 +29713,6 @@ "kind": "OBJECT", "name": "cache_mutation_response", "description": "response of any mutation on the table \"cache\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -28681,7 +29764,6 @@ "kind": "INPUT_OBJECT", "name": "cache_on_conflict", "description": "on_conflict condition type for table \"cache\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -28745,7 +29827,6 @@ "kind": "INPUT_OBJECT", "name": "cache_order_by", "description": "Ordering options when selecting data from \"cache\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -28817,7 +29898,6 @@ "kind": "INPUT_OBJECT", "name": "cache_pk_columns_input", "description": "primary key columns input for table: cache", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -28845,7 +29925,6 @@ "kind": "ENUM", "name": "cache_select_column", "description": "select columns of table \"cache\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -28887,7 +29966,6 @@ "kind": "INPUT_OBJECT", "name": "cache_set_input", "description": "input type for updating data in table \"cache\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -28959,7 +30037,6 @@ "kind": "INPUT_OBJECT", "name": "cache_stream_cursor_input", "description": "Streaming cursor of the table \"cache\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -28999,7 +30076,6 @@ "kind": "INPUT_OBJECT", "name": "cache_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -29071,7 +30147,6 @@ "kind": "ENUM", "name": "cache_update_column", "description": "update columns of table \"cache\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -29113,7 +30188,6 @@ "kind": "INPUT_OBJECT", "name": "cache_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -29153,7 +30227,6 @@ "kind": "ENUM", "name": "cursor_ordering", "description": "ordering argument of a cursor", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -29177,7 +30250,6 @@ "kind": "OBJECT", "name": "invite", "description": "Invites", - "isOneOf": null, "fields": [ { "name": "email", @@ -29269,7 +30341,6 @@ "kind": "OBJECT", "name": "invite_aggregate", "description": "aggregated selection of \"invite\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -29317,7 +30388,6 @@ "kind": "OBJECT", "name": "invite_aggregate_fields", "description": "aggregate fields of \"invite\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -29402,7 +30472,6 @@ "kind": "INPUT_OBJECT", "name": "invite_bool_exp", "description": "Boolean expression to filter rows from the table \"invite\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -29526,7 +30595,6 @@ "kind": "ENUM", "name": "invite_constraint", "description": "unique or primary key constraints on table \"invite\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -29544,7 +30612,6 @@ "kind": "INPUT_OBJECT", "name": "invite_insert_input", "description": "input type for inserting data into table \"invite\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -29616,7 +30683,6 @@ "kind": "OBJECT", "name": "invite_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "email", @@ -29676,7 +30742,6 @@ "kind": "OBJECT", "name": "invite_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "email", @@ -29736,7 +30801,6 @@ "kind": "OBJECT", "name": "invite_mutation_response", "description": "response of any mutation on the table \"invite\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -29788,7 +30852,6 @@ "kind": "INPUT_OBJECT", "name": "invite_on_conflict", "description": "on_conflict condition type for table \"invite\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -29852,7 +30915,6 @@ "kind": "INPUT_OBJECT", "name": "invite_order_by", "description": "Ordering options when selecting data from \"invite\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -29924,7 +30986,6 @@ "kind": "INPUT_OBJECT", "name": "invite_pk_columns_input", "description": "primary key columns input for table: invite", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -29952,7 +31013,6 @@ "kind": "ENUM", "name": "invite_select_column", "description": "select columns of table \"invite\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -29988,7 +31048,6 @@ "kind": "INPUT_OBJECT", "name": "invite_set_input", "description": "input type for updating data in table \"invite\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30048,7 +31107,6 @@ "kind": "INPUT_OBJECT", "name": "invite_stream_cursor_input", "description": "Streaming cursor of the table \"invite\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30088,7 +31146,6 @@ "kind": "INPUT_OBJECT", "name": "invite_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30148,7 +31205,6 @@ "kind": "ENUM", "name": "invite_update_column", "description": "update columns of table \"invite\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -30184,7 +31240,6 @@ "kind": "INPUT_OBJECT", "name": "invite_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30224,7 +31279,6 @@ "kind": "SCALAR", "name": "jsonb", "description": null, - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -30235,7 +31289,6 @@ "kind": "INPUT_OBJECT", "name": "jsonb_cast_exp", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30259,7 +31312,6 @@ "kind": "INPUT_OBJECT", "name": "jsonb_comparison_exp", "description": "Boolean expression to compare columns of type \"jsonb\". All fields are combined with logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30483,7 +31535,6 @@ "kind": "OBJECT", "name": "jwks", "description": "Stores valid JWKs used for offline signature verification", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -30600,7 +31651,6 @@ "kind": "OBJECT", "name": "jwks_aggregate", "description": "aggregated selection of \"jwks\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -30648,7 +31698,6 @@ "kind": "OBJECT", "name": "jwks_aggregate_fields", "description": "aggregate fields of \"jwks\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -30733,7 +31782,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_append_input", "description": "append existing jsonb value of filtered columns with new jsonb value", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30757,7 +31805,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_bool_exp", "description": "Boolean expression to filter rows from the table \"jwks\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30893,7 +31940,6 @@ "kind": "ENUM", "name": "jwks_constraint", "description": "unique or primary key constraints on table \"jwks\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -30917,7 +31963,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_delete_at_path_input", "description": "delete the field or element with specified path (for JSON arrays, negative integers count from the end)", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30949,7 +31994,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_delete_elem_input", "description": "delete the array element with specified index (negative integers count from the end). throws an error if top level container is not an array", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30973,7 +32017,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_delete_key_input", "description": "delete key/value pair or string element. key/value pairs are matched based on their key value", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -30997,7 +32040,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_insert_input", "description": "input type for inserting data into table \"jwks\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -31081,7 +32123,6 @@ "kind": "OBJECT", "name": "jwks_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -31153,7 +32194,6 @@ "kind": "OBJECT", "name": "jwks_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -31225,7 +32265,6 @@ "kind": "OBJECT", "name": "jwks_mutation_response", "description": "response of any mutation on the table \"jwks\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -31277,7 +32316,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_on_conflict", "description": "on_conflict condition type for table \"jwks\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -31341,7 +32379,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_order_by", "description": "Ordering options when selecting data from \"jwks\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -31425,7 +32462,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_pk_columns_input", "description": "primary key columns input for table: jwks", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -31453,7 +32489,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_prepend_input", "description": "prepend existing jsonb value of filtered columns with new jsonb value", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -31477,7 +32512,6 @@ "kind": "ENUM", "name": "jwks_select_column", "description": "select columns of table \"jwks\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -31525,7 +32559,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_set_input", "description": "input type for updating data in table \"jwks\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -31609,7 +32642,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_stream_cursor_input", "description": "Streaming cursor of the table \"jwks\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -31649,7 +32681,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -31733,7 +32764,6 @@ "kind": "ENUM", "name": "jwks_update_column", "description": "update columns of table \"jwks\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -31781,7 +32811,6 @@ "kind": "INPUT_OBJECT", "name": "jwks_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -31881,7 +32910,6 @@ "kind": "OBJECT", "name": "localisations", "description": "columns and relationships of \"localisations\"", - "isOneOf": null, "fields": [ { "name": "app_metadata", @@ -32069,7 +33097,6 @@ "kind": "OBJECT", "name": "localisations_aggregate", "description": "aggregated selection of \"localisations\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -32117,7 +33144,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_aggregate_bool_exp", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -32141,7 +33167,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_aggregate_bool_exp_count", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -32213,7 +33238,6 @@ "kind": "OBJECT", "name": "localisations_aggregate_fields", "description": "aggregate fields of \"localisations\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -32298,7 +33322,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_aggregate_order_by", "description": "order by aggregate values of table \"localisations\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -32346,7 +33369,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_arr_rel_insert_input", "description": "input type for inserting array relation for remote table \"localisations\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -32394,7 +33416,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_bool_exp", "description": "Boolean expression to filter rows from the table \"localisations\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -32590,7 +33611,6 @@ "kind": "ENUM", "name": "localisations_constraint", "description": "unique or primary key constraints on table \"localisations\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -32608,7 +33628,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_insert_input", "description": "input type for inserting data into table \"localisations\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -32752,7 +33771,6 @@ "kind": "OBJECT", "name": "localisations_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "app_metadata_id", @@ -32884,7 +33902,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_max_order_by", "description": "order by max() on columns of table \"localisations\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -33016,7 +34033,6 @@ "kind": "OBJECT", "name": "localisations_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "app_metadata_id", @@ -33148,7 +34164,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_min_order_by", "description": "order by min() on columns of table \"localisations\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -33280,7 +34295,6 @@ "kind": "OBJECT", "name": "localisations_mutation_response", "description": "response of any mutation on the table \"localisations\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -33332,7 +34346,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_on_conflict", "description": "on_conflict condition type for table \"localisations\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -33396,7 +34409,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_order_by", "description": "Ordering options when selecting data from \"localisations\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -33540,7 +34552,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_pk_columns_input", "description": "primary key columns input for table: localisations", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -33568,7 +34579,6 @@ "kind": "ENUM", "name": "localisations_select_column", "description": "select columns of table \"localisations\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -33640,7 +34650,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_set_input", "description": "input type for updating data in table \"localisations\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -33772,7 +34781,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_stream_cursor_input", "description": "Streaming cursor of the table \"localisations\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -33812,7 +34820,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -33944,7 +34951,6 @@ "kind": "ENUM", "name": "localisations_update_column", "description": "update columns of table \"localisations\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -34016,7 +35022,6 @@ "kind": "INPUT_OBJECT", "name": "localisations_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -34056,7 +35061,6 @@ "kind": "OBJECT", "name": "membership", "description": "columns and relationships of \"membership\"", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -34196,7 +35200,6 @@ "kind": "OBJECT", "name": "membership_aggregate", "description": "aggregated selection of \"membership\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -34244,7 +35247,6 @@ "kind": "INPUT_OBJECT", "name": "membership_aggregate_bool_exp", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -34268,7 +35270,6 @@ "kind": "INPUT_OBJECT", "name": "membership_aggregate_bool_exp_count", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -34340,7 +35341,6 @@ "kind": "OBJECT", "name": "membership_aggregate_fields", "description": "aggregate fields of \"membership\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -34425,7 +35425,6 @@ "kind": "INPUT_OBJECT", "name": "membership_aggregate_order_by", "description": "order by aggregate values of table \"membership\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -34473,7 +35472,6 @@ "kind": "INPUT_OBJECT", "name": "membership_arr_rel_insert_input", "description": "input type for inserting array relation for remote table \"membership\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -34521,7 +35519,6 @@ "kind": "INPUT_OBJECT", "name": "membership_bool_exp", "description": "Boolean expression to filter rows from the table \"membership\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -34681,7 +35678,6 @@ "kind": "ENUM", "name": "membership_constraint", "description": "unique or primary key constraints on table \"membership\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -34699,7 +35695,6 @@ "kind": "INPUT_OBJECT", "name": "membership_insert_input", "description": "input type for inserting data into table \"membership\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -34807,7 +35802,6 @@ "kind": "OBJECT", "name": "membership_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -34879,7 +35873,6 @@ "kind": "INPUT_OBJECT", "name": "membership_max_order_by", "description": "order by max() on columns of table \"membership\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -34951,7 +35944,6 @@ "kind": "OBJECT", "name": "membership_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -35023,7 +36015,6 @@ "kind": "INPUT_OBJECT", "name": "membership_min_order_by", "description": "order by min() on columns of table \"membership\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -35095,7 +36086,6 @@ "kind": "OBJECT", "name": "membership_mutation_response", "description": "response of any mutation on the table \"membership\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -35147,7 +36137,6 @@ "kind": "INPUT_OBJECT", "name": "membership_on_conflict", "description": "on_conflict condition type for table \"membership\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -35211,7 +36200,6 @@ "kind": "INPUT_OBJECT", "name": "membership_order_by", "description": "Ordering options when selecting data from \"membership\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -35319,7 +36307,6 @@ "kind": "INPUT_OBJECT", "name": "membership_pk_columns_input", "description": "primary key columns input for table: membership", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -35347,7 +36334,6 @@ "kind": "ENUM", "name": "membership_select_column", "description": "select columns of table \"membership\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -35395,7 +36381,6 @@ "kind": "INPUT_OBJECT", "name": "membership_set_input", "description": "input type for updating data in table \"membership\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -35479,7 +36464,6 @@ "kind": "INPUT_OBJECT", "name": "membership_stream_cursor_input", "description": "Streaming cursor of the table \"membership\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -35519,7 +36503,6 @@ "kind": "INPUT_OBJECT", "name": "membership_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -35603,7 +36586,6 @@ "kind": "ENUM", "name": "membership_update_column", "description": "update columns of table \"membership\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -35651,7 +36633,6 @@ "kind": "INPUT_OBJECT", "name": "membership_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -35691,7 +36672,6 @@ "kind": "OBJECT", "name": "mutation_root", "description": "mutation root", - "isOneOf": null, "fields": [ { "name": "ban_app", @@ -39628,6 +40608,18 @@ "name": "update_app", "description": "update data of the table: \"app\"", "args": [ + { + "name": "_inc", + "description": "increments the numeric columns with given value of the filtered values", + "type": { + "kind": "INPUT_OBJECT", + "name": "app_inc_input", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "_set", "description": "sets the columns of the filtered rows to the given values", @@ -39669,6 +40661,18 @@ "name": "update_app_by_pk", "description": "update single row of the table: \"app\"", "args": [ + { + "name": "_inc", + "description": "increments the numeric columns with given value of the filtered values", + "type": { + "kind": "INPUT_OBJECT", + "name": "app_inc_input", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "_set", "description": "sets the columns of the filtered rows to the given values", @@ -42429,7 +43433,6 @@ "kind": "OBJECT", "name": "notification_log", "description": "columns and relationships of \"notification_log\"", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -42517,7 +43520,6 @@ "kind": "OBJECT", "name": "notification_log_aggregate", "description": "aggregated selection of \"notification_log\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -42565,7 +43567,6 @@ "kind": "OBJECT", "name": "notification_log_aggregate_fields", "description": "aggregate fields of \"notification_log\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -42650,7 +43651,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_bool_exp", "description": "Boolean expression to filter rows from the table \"notification_log\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -42774,7 +43774,6 @@ "kind": "ENUM", "name": "notification_log_constraint", "description": "unique or primary key constraints on table \"notification_log\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -42792,7 +43791,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_insert_input", "description": "input type for inserting data into table \"notification_log\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -42864,7 +43862,6 @@ "kind": "OBJECT", "name": "notification_log_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -42936,7 +43933,6 @@ "kind": "OBJECT", "name": "notification_log_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "app_id", @@ -43008,7 +44004,6 @@ "kind": "OBJECT", "name": "notification_log_mutation_response", "description": "response of any mutation on the table \"notification_log\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -43060,7 +44055,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_on_conflict", "description": "on_conflict condition type for table \"notification_log\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -43124,7 +44118,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_order_by", "description": "Ordering options when selecting data from \"notification_log\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -43196,7 +44189,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_pk_columns_input", "description": "primary key columns input for table: notification_log", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -43224,7 +44216,6 @@ "kind": "ENUM", "name": "notification_log_select_column", "description": "select columns of table \"notification_log\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -43266,7 +44257,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_set_input", "description": "input type for updating data in table \"notification_log\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -43338,7 +44328,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_stream_cursor_input", "description": "Streaming cursor of the table \"notification_log\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -43378,7 +44367,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -43450,7 +44438,6 @@ "kind": "ENUM", "name": "notification_log_update_column", "description": "update columns of table \"notification_log\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -43492,7 +44479,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -43532,7 +44518,6 @@ "kind": "OBJECT", "name": "notification_log_wallet_address", "description": "columns and relationships of \"notification_log_wallet_address\"", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -43608,7 +44593,6 @@ "kind": "OBJECT", "name": "notification_log_wallet_address_aggregate", "description": "aggregated selection of \"notification_log_wallet_address\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -43656,7 +44640,6 @@ "kind": "OBJECT", "name": "notification_log_wallet_address_aggregate_fields", "description": "aggregate fields of \"notification_log_wallet_address\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -43741,7 +44724,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_wallet_address_bool_exp", "description": "Boolean expression to filter rows from the table \"notification_log_wallet_address\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -43853,7 +44835,6 @@ "kind": "ENUM", "name": "notification_log_wallet_address_constraint", "description": "unique or primary key constraints on table \"notification_log_wallet_address\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -43871,7 +44852,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_wallet_address_insert_input", "description": "input type for inserting data into table \"notification_log_wallet_address\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -43931,7 +44911,6 @@ "kind": "OBJECT", "name": "notification_log_wallet_address_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -43991,7 +44970,6 @@ "kind": "OBJECT", "name": "notification_log_wallet_address_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -44051,7 +45029,6 @@ "kind": "OBJECT", "name": "notification_log_wallet_address_mutation_response", "description": "response of any mutation on the table \"notification_log_wallet_address\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -44103,7 +45080,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_wallet_address_on_conflict", "description": "on_conflict condition type for table \"notification_log_wallet_address\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -44167,7 +45143,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_wallet_address_order_by", "description": "Ordering options when selecting data from \"notification_log_wallet_address\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -44227,7 +45202,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_wallet_address_pk_columns_input", "description": "primary key columns input for table: notification_log_wallet_address", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -44255,7 +45229,6 @@ "kind": "ENUM", "name": "notification_log_wallet_address_select_column", "description": "select columns of table \"notification_log_wallet_address\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -44291,7 +45264,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_wallet_address_set_input", "description": "input type for updating data in table \"notification_log_wallet_address\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -44351,7 +45323,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_wallet_address_stream_cursor_input", "description": "Streaming cursor of the table \"notification_log_wallet_address\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -44391,7 +45362,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_wallet_address_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -44451,7 +45421,6 @@ "kind": "ENUM", "name": "notification_log_wallet_address_update_column", "description": "update columns of table \"notification_log_wallet_address\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -44487,7 +45456,6 @@ "kind": "INPUT_OBJECT", "name": "notification_log_wallet_address_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -44527,7 +45495,6 @@ "kind": "OBJECT", "name": "nullifier", "description": "columns and relationships of \"nullifier\"", - "isOneOf": null, "fields": [ { "name": "action", @@ -44651,7 +45618,6 @@ "kind": "OBJECT", "name": "nullifier_aggregate", "description": "aggregated selection of \"nullifier\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -44699,7 +45665,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_aggregate_bool_exp", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -44723,7 +45688,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_aggregate_bool_exp_count", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -44795,7 +45759,6 @@ "kind": "OBJECT", "name": "nullifier_aggregate_fields", "description": "aggregate fields of \"nullifier\"", - "isOneOf": null, "fields": [ { "name": "avg", @@ -44976,7 +45939,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_aggregate_order_by", "description": "order by aggregate values of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -45120,7 +46082,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_arr_rel_insert_input", "description": "input type for inserting array relation for remote table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -45168,7 +46129,6 @@ "kind": "OBJECT", "name": "nullifier_avg_fields", "description": "aggregate avg on columns", - "isOneOf": null, "fields": [ { "name": "uses", @@ -45192,7 +46152,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_avg_order_by", "description": "order by avg() on columns of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -45216,7 +46175,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_bool_exp", "description": "Boolean expression to filter rows from the table \"nullifier\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -45364,7 +46322,6 @@ "kind": "ENUM", "name": "nullifier_constraint", "description": "unique or primary key constraints on table \"nullifier\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -45388,7 +46345,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_inc_input", "description": "input type for incrementing numeric columns in table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -45412,7 +46368,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_insert_input", "description": "input type for inserting data into table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -45508,7 +46463,6 @@ "kind": "OBJECT", "name": "nullifier_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "action_id", @@ -45592,7 +46546,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_max_order_by", "description": "order by max() on columns of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -45676,7 +46629,6 @@ "kind": "OBJECT", "name": "nullifier_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "action_id", @@ -45760,7 +46712,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_min_order_by", "description": "order by min() on columns of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -45844,7 +46795,6 @@ "kind": "OBJECT", "name": "nullifier_mutation_response", "description": "response of any mutation on the table \"nullifier\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -45896,7 +46846,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_on_conflict", "description": "on_conflict condition type for table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -45960,7 +46909,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_order_by", "description": "Ordering options when selecting data from \"nullifier\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46056,7 +47004,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_pk_columns_input", "description": "primary key columns input for table: nullifier", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46084,7 +47031,6 @@ "kind": "ENUM", "name": "nullifier_select_column", "description": "select columns of table \"nullifier\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -46132,7 +47078,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_set_input", "description": "input type for updating data in table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46216,7 +47161,6 @@ "kind": "OBJECT", "name": "nullifier_stddev_fields", "description": "aggregate stddev on columns", - "isOneOf": null, "fields": [ { "name": "uses", @@ -46240,7 +47184,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_stddev_order_by", "description": "order by stddev() on columns of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46264,7 +47207,6 @@ "kind": "OBJECT", "name": "nullifier_stddev_pop_fields", "description": "aggregate stddev_pop on columns", - "isOneOf": null, "fields": [ { "name": "uses", @@ -46288,7 +47230,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_stddev_pop_order_by", "description": "order by stddev_pop() on columns of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46312,7 +47253,6 @@ "kind": "OBJECT", "name": "nullifier_stddev_samp_fields", "description": "aggregate stddev_samp on columns", - "isOneOf": null, "fields": [ { "name": "uses", @@ -46336,7 +47276,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_stddev_samp_order_by", "description": "order by stddev_samp() on columns of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46360,7 +47299,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_stream_cursor_input", "description": "Streaming cursor of the table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46400,7 +47338,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46484,7 +47421,6 @@ "kind": "OBJECT", "name": "nullifier_sum_fields", "description": "aggregate sum on columns", - "isOneOf": null, "fields": [ { "name": "uses", @@ -46508,7 +47444,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_sum_order_by", "description": "order by sum() on columns of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46532,7 +47467,6 @@ "kind": "ENUM", "name": "nullifier_update_column", "description": "update columns of table \"nullifier\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -46580,7 +47514,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46632,7 +47565,6 @@ "kind": "OBJECT", "name": "nullifier_var_pop_fields", "description": "aggregate var_pop on columns", - "isOneOf": null, "fields": [ { "name": "uses", @@ -46656,7 +47588,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_var_pop_order_by", "description": "order by var_pop() on columns of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46680,7 +47611,6 @@ "kind": "OBJECT", "name": "nullifier_var_samp_fields", "description": "aggregate var_samp on columns", - "isOneOf": null, "fields": [ { "name": "uses", @@ -46704,7 +47634,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_var_samp_order_by", "description": "order by var_samp() on columns of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46728,7 +47657,6 @@ "kind": "OBJECT", "name": "nullifier_variance_fields", "description": "aggregate variance on columns", - "isOneOf": null, "fields": [ { "name": "uses", @@ -46752,7 +47680,6 @@ "kind": "INPUT_OBJECT", "name": "nullifier_variance_order_by", "description": "order by variance() on columns of table \"nullifier\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46776,7 +47703,6 @@ "kind": "SCALAR", "name": "numeric", "description": null, - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -46787,7 +47713,6 @@ "kind": "INPUT_OBJECT", "name": "numeric_comparison_exp", "description": "Boolean expression to compare columns of type \"numeric\". All fields are combined with logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -46923,7 +47848,6 @@ "kind": "ENUM", "name": "order_by", "description": "column ordering options", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -46971,7 +47895,6 @@ "kind": "OBJECT", "name": "query_root", "description": null, - "isOneOf": null, "fields": [ { "name": "action", @@ -52569,7 +53492,6 @@ "kind": "OBJECT", "name": "redirect", "description": "columns and relationships of \"redirect\"", - "isOneOf": null, "fields": [ { "name": "action", @@ -52673,7 +53595,6 @@ "kind": "OBJECT", "name": "redirect_aggregate", "description": "aggregated selection of \"redirect\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -52721,7 +53642,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_aggregate_bool_exp", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -52745,7 +53665,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_aggregate_bool_exp_count", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -52817,7 +53736,6 @@ "kind": "OBJECT", "name": "redirect_aggregate_fields", "description": "aggregate fields of \"redirect\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -52902,7 +53820,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_aggregate_order_by", "description": "order by aggregate values of table \"redirect\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -52950,7 +53867,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_arr_rel_insert_input", "description": "input type for inserting array relation for remote table \"redirect\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -52998,7 +53914,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_bool_exp", "description": "Boolean expression to filter rows from the table \"redirect\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -53134,7 +54049,6 @@ "kind": "ENUM", "name": "redirect_constraint", "description": "unique or primary key constraints on table \"redirect\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -53152,7 +54066,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_insert_input", "description": "input type for inserting data into table \"redirect\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -53236,7 +54149,6 @@ "kind": "OBJECT", "name": "redirect_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "action_id", @@ -53308,7 +54220,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_max_order_by", "description": "order by max() on columns of table \"redirect\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -53380,7 +54291,6 @@ "kind": "OBJECT", "name": "redirect_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "action_id", @@ -53452,7 +54362,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_min_order_by", "description": "order by min() on columns of table \"redirect\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -53524,7 +54433,6 @@ "kind": "OBJECT", "name": "redirect_mutation_response", "description": "response of any mutation on the table \"redirect\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -53576,7 +54484,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_on_conflict", "description": "on_conflict condition type for table \"redirect\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -53640,7 +54547,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_order_by", "description": "Ordering options when selecting data from \"redirect\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -53724,7 +54630,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_pk_columns_input", "description": "primary key columns input for table: redirect", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -53752,7 +54657,6 @@ "kind": "ENUM", "name": "redirect_select_column", "description": "select columns of table \"redirect\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -53794,7 +54698,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_set_input", "description": "input type for updating data in table \"redirect\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -53866,7 +54769,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_stream_cursor_input", "description": "Streaming cursor of the table \"redirect\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -53906,7 +54808,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -53978,7 +54879,6 @@ "kind": "ENUM", "name": "redirect_update_column", "description": "update columns of table \"redirect\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -54020,7 +54920,6 @@ "kind": "INPUT_OBJECT", "name": "redirect_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54060,7 +54959,6 @@ "kind": "OBJECT", "name": "role", "description": "columns and relationships of \"role\"", - "isOneOf": null, "fields": [ { "name": "comment", @@ -54100,7 +54998,6 @@ "kind": "OBJECT", "name": "role_aggregate", "description": "aggregated selection of \"role\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -54148,7 +55045,6 @@ "kind": "OBJECT", "name": "role_aggregate_fields", "description": "aggregate fields of \"role\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -54233,7 +55129,6 @@ "kind": "INPUT_OBJECT", "name": "role_bool_exp", "description": "Boolean expression to filter rows from the table \"role\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54321,7 +55216,6 @@ "kind": "ENUM", "name": "role_constraint", "description": "unique or primary key constraints on table \"role\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -54339,7 +55233,6 @@ "kind": "ENUM", "name": "role_enum", "description": null, - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -54369,7 +55262,6 @@ "kind": "INPUT_OBJECT", "name": "role_enum_comparison_exp", "description": "Boolean expression to compare columns of type \"role_enum\". All fields are combined with logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54457,7 +55349,6 @@ "kind": "INPUT_OBJECT", "name": "role_insert_input", "description": "input type for inserting data into table \"role\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54493,7 +55384,6 @@ "kind": "OBJECT", "name": "role_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "comment", @@ -54529,7 +55419,6 @@ "kind": "OBJECT", "name": "role_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "comment", @@ -54565,7 +55454,6 @@ "kind": "OBJECT", "name": "role_mutation_response", "description": "response of any mutation on the table \"role\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -54617,7 +55505,6 @@ "kind": "INPUT_OBJECT", "name": "role_on_conflict", "description": "on_conflict condition type for table \"role\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54681,7 +55568,6 @@ "kind": "INPUT_OBJECT", "name": "role_order_by", "description": "Ordering options when selecting data from \"role\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54717,7 +55603,6 @@ "kind": "INPUT_OBJECT", "name": "role_pk_columns_input", "description": "primary key columns input for table: role", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54745,7 +55630,6 @@ "kind": "ENUM", "name": "role_select_column", "description": "select columns of table \"role\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -54769,7 +55653,6 @@ "kind": "INPUT_OBJECT", "name": "role_set_input", "description": "input type for updating data in table \"role\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54805,7 +55688,6 @@ "kind": "INPUT_OBJECT", "name": "role_stream_cursor_input", "description": "Streaming cursor of the table \"role\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54845,7 +55727,6 @@ "kind": "INPUT_OBJECT", "name": "role_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54881,7 +55762,6 @@ "kind": "ENUM", "name": "role_update_column", "description": "update columns of table \"role\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -54905,7 +55785,6 @@ "kind": "INPUT_OBJECT", "name": "role_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -54945,7 +55824,6 @@ "kind": "OBJECT", "name": "subscription_root", "description": null, - "isOneOf": null, "fields": [ { "name": "action", @@ -61921,7 +62799,6 @@ "kind": "OBJECT", "name": "team", "description": "columns and relationships of \"team\"", - "isOneOf": null, "fields": [ { "name": "api_keys", @@ -62587,7 +63464,6 @@ "kind": "OBJECT", "name": "team_aggregate", "description": "aggregated selection of \"team\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -62635,7 +63511,6 @@ "kind": "OBJECT", "name": "team_aggregate_fields", "description": "aggregate fields of \"team\"", - "isOneOf": null, "fields": [ { "name": "avg", @@ -62816,7 +63691,6 @@ "kind": "OBJECT", "name": "team_avg_fields", "description": "aggregate avg on columns", - "isOneOf": null, "fields": [ { "name": "team_owners_count", @@ -62840,7 +63714,6 @@ "kind": "INPUT_OBJECT", "name": "team_bool_exp", "description": "Boolean expression to filter rows from the table \"team\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -63036,7 +63909,6 @@ "kind": "ENUM", "name": "team_constraint", "description": "unique or primary key constraints on table \"team\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -63054,7 +63926,6 @@ "kind": "INPUT_OBJECT", "name": "team_insert_input", "description": "input type for inserting data into table \"team\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -63150,7 +64021,6 @@ "kind": "OBJECT", "name": "team_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -63222,7 +64092,6 @@ "kind": "OBJECT", "name": "team_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "created_at", @@ -63294,7 +64163,6 @@ "kind": "OBJECT", "name": "team_mutation_response", "description": "response of any mutation on the table \"team\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -63346,7 +64214,6 @@ "kind": "INPUT_OBJECT", "name": "team_obj_rel_insert_input", "description": "input type for inserting object relation for remote table \"team\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -63386,7 +64253,6 @@ "kind": "INPUT_OBJECT", "name": "team_on_conflict", "description": "on_conflict condition type for table \"team\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -63450,7 +64316,6 @@ "kind": "INPUT_OBJECT", "name": "team_order_by", "description": "Ordering options when selecting data from \"team\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -63558,7 +64423,6 @@ "kind": "INPUT_OBJECT", "name": "team_pk_columns_input", "description": "primary key columns input for table: team", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -63586,7 +64450,6 @@ "kind": "ENUM", "name": "team_select_column", "description": "select columns of table \"team\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -63622,7 +64485,6 @@ "kind": "INPUT_OBJECT", "name": "team_set_input", "description": "input type for updating data in table \"team\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -63682,7 +64544,6 @@ "kind": "OBJECT", "name": "team_stddev_fields", "description": "aggregate stddev on columns", - "isOneOf": null, "fields": [ { "name": "team_owners_count", @@ -63706,7 +64567,6 @@ "kind": "OBJECT", "name": "team_stddev_pop_fields", "description": "aggregate stddev_pop on columns", - "isOneOf": null, "fields": [ { "name": "team_owners_count", @@ -63730,7 +64590,6 @@ "kind": "OBJECT", "name": "team_stddev_samp_fields", "description": "aggregate stddev_samp on columns", - "isOneOf": null, "fields": [ { "name": "team_owners_count", @@ -63754,7 +64613,6 @@ "kind": "INPUT_OBJECT", "name": "team_stream_cursor_input", "description": "Streaming cursor of the table \"team\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -63794,7 +64652,6 @@ "kind": "INPUT_OBJECT", "name": "team_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -63854,7 +64711,6 @@ "kind": "OBJECT", "name": "team_sum_fields", "description": "aggregate sum on columns", - "isOneOf": null, "fields": [ { "name": "team_owners_count", @@ -63878,7 +64734,6 @@ "kind": "ENUM", "name": "team_update_column", "description": "update columns of table \"team\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -63914,7 +64769,6 @@ "kind": "INPUT_OBJECT", "name": "team_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { @@ -63954,7 +64808,6 @@ "kind": "OBJECT", "name": "team_var_pop_fields", "description": "aggregate var_pop on columns", - "isOneOf": null, "fields": [ { "name": "team_owners_count", @@ -63978,7 +64831,6 @@ "kind": "OBJECT", "name": "team_var_samp_fields", "description": "aggregate var_samp on columns", - "isOneOf": null, "fields": [ { "name": "team_owners_count", @@ -64002,7 +64854,6 @@ "kind": "OBJECT", "name": "team_variance_fields", "description": "aggregate variance on columns", - "isOneOf": null, "fields": [ { "name": "team_owners_count", @@ -64026,7 +64877,6 @@ "kind": "SCALAR", "name": "timestamptz", "description": null, - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -64037,7 +64887,6 @@ "kind": "INPUT_OBJECT", "name": "timestamptz_comparison_exp", "description": "Boolean expression to compare columns of type \"timestamptz\". All fields are combined with logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -64173,7 +65022,6 @@ "kind": "OBJECT", "name": "user", "description": "columns and relationships of \"user\"", - "isOneOf": null, "fields": [ { "name": "auth0Id", @@ -64559,7 +65407,6 @@ "kind": "OBJECT", "name": "user_aggregate", "description": "aggregated selection of \"user\"", - "isOneOf": null, "fields": [ { "name": "aggregate", @@ -64607,7 +65454,6 @@ "kind": "OBJECT", "name": "user_aggregate_fields", "description": "aggregate fields of \"user\"", - "isOneOf": null, "fields": [ { "name": "count", @@ -64692,7 +65538,6 @@ "kind": "INPUT_OBJECT", "name": "user_bool_exp", "description": "Boolean expression to filter rows from the table \"user\". All fields are combined with a logical 'AND'.", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -64936,7 +65781,6 @@ "kind": "ENUM", "name": "user_constraint", "description": "unique or primary key constraints on table \"user\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -64972,7 +65816,6 @@ "kind": "INPUT_OBJECT", "name": "user_insert_input", "description": "input type for inserting data into table \"user\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -65152,7 +65995,6 @@ "kind": "OBJECT", "name": "user_max_fields", "description": "aggregate max on columns", - "isOneOf": null, "fields": [ { "name": "auth0Id", @@ -65284,7 +66126,6 @@ "kind": "OBJECT", "name": "user_min_fields", "description": "aggregate min on columns", - "isOneOf": null, "fields": [ { "name": "auth0Id", @@ -65416,7 +66257,6 @@ "kind": "OBJECT", "name": "user_mutation_response", "description": "response of any mutation on the table \"user\"", - "isOneOf": null, "fields": [ { "name": "affected_rows", @@ -65468,7 +66308,6 @@ "kind": "INPUT_OBJECT", "name": "user_obj_rel_insert_input", "description": "input type for inserting object relation for remote table \"user\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -65508,7 +66347,6 @@ "kind": "INPUT_OBJECT", "name": "user_on_conflict", "description": "on_conflict condition type for table \"user\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -65572,7 +66410,6 @@ "kind": "INPUT_OBJECT", "name": "user_order_by", "description": "Ordering options when selecting data from \"user\".", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -65752,7 +66589,6 @@ "kind": "INPUT_OBJECT", "name": "user_pk_columns_input", "description": "primary key columns input for table: user", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -65780,7 +66616,6 @@ "kind": "ENUM", "name": "user_select_column", "description": "select columns of table \"user\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -65864,7 +66699,6 @@ "kind": "INPUT_OBJECT", "name": "user_set_input", "description": "input type for updating data in table \"user\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -66020,7 +66854,6 @@ "kind": "INPUT_OBJECT", "name": "user_stream_cursor_input", "description": "Streaming cursor of the table \"user\"", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -66060,7 +66893,6 @@ "kind": "INPUT_OBJECT", "name": "user_stream_cursor_value_input", "description": "Initial value of the column from where the streaming should start", - "isOneOf": false, "fields": null, "inputFields": [ { @@ -66216,7 +67048,6 @@ "kind": "ENUM", "name": "user_update_column", "description": "update columns of table \"user\"", - "isOneOf": null, "fields": null, "inputFields": null, "interfaces": null, @@ -66300,7 +67131,6 @@ "kind": "INPUT_OBJECT", "name": "user_updates", "description": null, - "isOneOf": false, "fields": null, "inputFields": [ { diff --git a/web/graphql/graphql.ts b/web/graphql/graphql.ts index b897179f5..988ebd4e5 100644 --- a/web/graphql/graphql.ts +++ b/web/graphql/graphql.ts @@ -26,6 +26,7 @@ export type Scalars = { Boolean: { input: boolean; output: boolean }; Int: { input: number; output: number }; Float: { input: number; output: number }; + bigint: { input: unknown; output: unknown }; jsonb: { input: any; output: any }; numeric: { input: number; output: number }; timestamptz: { input: string; output: string }; @@ -1389,6 +1390,8 @@ export type App = { is_staging: Scalars["Boolean"]["output"]; logo_url: Scalars["String"]["output"]; name: Scalars["String"]["output"]; + rating_count?: Maybe; + rating_sum?: Maybe; status: Scalars["String"]["output"]; /** An object relationship */ team: Team; @@ -1470,9 +1473,17 @@ export type App_Aggregate_Bool_Exp_Count = { /** aggregate fields of "app" */ export type App_Aggregate_Fields = { __typename?: "app_aggregate_fields"; + avg?: Maybe; count: Scalars["Int"]["output"]; max?: Maybe; min?: Maybe; + stddev?: Maybe; + stddev_pop?: Maybe; + stddev_samp?: Maybe; + sum?: Maybe; + var_pop?: Maybe; + var_samp?: Maybe; + variance?: Maybe; }; /** aggregate fields of "app" */ @@ -1483,9 +1494,17 @@ export type App_Aggregate_FieldsCountArgs = { /** order by aggregate values of table "app" */ export type App_Aggregate_Order_By = { + avg?: InputMaybe; count?: InputMaybe; max?: InputMaybe; min?: InputMaybe; + stddev?: InputMaybe; + stddev_pop?: InputMaybe; + stddev_samp?: InputMaybe; + sum?: InputMaybe; + var_pop?: InputMaybe; + var_samp?: InputMaybe; + variance?: InputMaybe; }; /** input type for inserting array relation for remote table "app" */ @@ -1495,6 +1514,19 @@ export type App_Arr_Rel_Insert_Input = { on_conflict?: InputMaybe; }; +/** aggregate avg on columns */ +export type App_Avg_Fields = { + __typename?: "app_avg_fields"; + rating_count?: Maybe; + rating_sum?: Maybe; +}; + +/** order by avg() on columns of table "app" */ +export type App_Avg_Order_By = { + rating_count?: InputMaybe; + rating_sum?: InputMaybe; +}; + /** Boolean expression to filter rows from the table "app". All fields are combined with a logical 'AND'. */ export type App_Bool_Exp = { _and?: InputMaybe>; @@ -1513,6 +1545,8 @@ export type App_Bool_Exp = { is_staging?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team?: InputMaybe; team_id?: InputMaybe; @@ -1526,6 +1560,12 @@ export enum App_Constraint { AppPkey = "app_pkey", } +/** input type for incrementing numeric columns in table "app" */ +export type App_Inc_Input = { + rating_count?: InputMaybe; + rating_sum?: InputMaybe; +}; + /** input type for inserting data into table "app" */ export type App_Insert_Input = { actions?: InputMaybe; @@ -1539,6 +1579,8 @@ export type App_Insert_Input = { is_staging?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team?: InputMaybe; team_id?: InputMaybe; @@ -1555,6 +1597,8 @@ export type App_Max_Fields = { id?: Maybe; logo_url?: Maybe; name?: Maybe; + rating_count?: Maybe; + rating_sum?: Maybe; status?: Maybe; team_id?: Maybe; updated_at?: Maybe; @@ -1569,6 +1613,8 @@ export type App_Max_Order_By = { id?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team_id?: InputMaybe; updated_at?: InputMaybe; @@ -2415,6 +2461,8 @@ export type App_Min_Fields = { id?: Maybe; logo_url?: Maybe; name?: Maybe; + rating_count?: Maybe; + rating_sum?: Maybe; status?: Maybe; team_id?: Maybe; updated_at?: Maybe; @@ -2429,6 +2477,8 @@ export type App_Min_Order_By = { id?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team_id?: InputMaybe; updated_at?: InputMaybe; @@ -2471,6 +2521,8 @@ export type App_Order_By = { is_staging?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team?: InputMaybe; team_id?: InputMaybe; @@ -2650,8 +2702,10 @@ export type App_Report = { created_at: Scalars["timestamptz"]["output"]; details: Scalars["String"]["output"]; id: Scalars["String"]["output"]; + purpose?: Maybe; reporter_email?: Maybe; user_id?: Maybe; + violation?: Maybe; }; /** aggregated selection of "app_report" */ @@ -2685,8 +2739,10 @@ export type App_Report_Bool_Exp = { created_at?: InputMaybe; details?: InputMaybe; id?: InputMaybe; + purpose?: InputMaybe; reporter_email?: InputMaybe; user_id?: InputMaybe; + violation?: InputMaybe; }; /** unique or primary key constraints on table "app_report" */ @@ -2702,8 +2758,10 @@ export type App_Report_Insert_Input = { created_at?: InputMaybe; details?: InputMaybe; id?: InputMaybe; + purpose?: InputMaybe; reporter_email?: InputMaybe; user_id?: InputMaybe; + violation?: InputMaybe; }; /** aggregate max on columns */ @@ -2714,8 +2772,10 @@ export type App_Report_Max_Fields = { created_at?: Maybe; details?: Maybe; id?: Maybe; + purpose?: Maybe; reporter_email?: Maybe; user_id?: Maybe; + violation?: Maybe; }; /** aggregate min on columns */ @@ -2726,8 +2786,10 @@ export type App_Report_Min_Fields = { created_at?: Maybe; details?: Maybe; id?: Maybe; + purpose?: Maybe; reporter_email?: Maybe; user_id?: Maybe; + violation?: Maybe; }; /** response of any mutation on the table "app_report" */ @@ -2753,8 +2815,10 @@ export type App_Report_Order_By = { created_at?: InputMaybe; details?: InputMaybe; id?: InputMaybe; + purpose?: InputMaybe; reporter_email?: InputMaybe; user_id?: InputMaybe; + violation?: InputMaybe; }; /** primary key columns input for table: app_report */ @@ -2775,9 +2839,13 @@ export enum App_Report_Select_Column { /** column name */ Id = "id", /** column name */ + Purpose = "purpose", + /** column name */ ReporterEmail = "reporter_email", /** column name */ UserId = "user_id", + /** column name */ + Violation = "violation", } /** input type for updating data in table "app_report" */ @@ -2787,8 +2855,10 @@ export type App_Report_Set_Input = { created_at?: InputMaybe; details?: InputMaybe; id?: InputMaybe; + purpose?: InputMaybe; reporter_email?: InputMaybe; user_id?: InputMaybe; + violation?: InputMaybe; }; /** Streaming cursor of the table "app_report" */ @@ -2806,8 +2876,10 @@ export type App_Report_Stream_Cursor_Value_Input = { created_at?: InputMaybe; details?: InputMaybe; id?: InputMaybe; + purpose?: InputMaybe; reporter_email?: InputMaybe; user_id?: InputMaybe; + violation?: InputMaybe; }; /** update columns of table "app_report" */ @@ -2823,9 +2895,13 @@ export enum App_Report_Update_Column { /** column name */ Id = "id", /** column name */ + Purpose = "purpose", + /** column name */ ReporterEmail = "reporter_email", /** column name */ UserId = "user_id", + /** column name */ + Violation = "violation", } export type App_Report_Updates = { @@ -3114,6 +3190,10 @@ export enum App_Select_Column { /** column name */ Name = "name", /** column name */ + RatingCount = "rating_count", + /** column name */ + RatingSum = "rating_sum", + /** column name */ Status = "status", /** column name */ TeamId = "team_id", @@ -3154,6 +3234,8 @@ export type App_Set_Input = { is_staging?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team_id?: InputMaybe; updated_at?: InputMaybe; @@ -3399,6 +3481,45 @@ export type App_Stats_Returning_Variance_Fields = { verifications?: Maybe; }; +/** aggregate stddev on columns */ +export type App_Stddev_Fields = { + __typename?: "app_stddev_fields"; + rating_count?: Maybe; + rating_sum?: Maybe; +}; + +/** order by stddev() on columns of table "app" */ +export type App_Stddev_Order_By = { + rating_count?: InputMaybe; + rating_sum?: InputMaybe; +}; + +/** aggregate stddev_pop on columns */ +export type App_Stddev_Pop_Fields = { + __typename?: "app_stddev_pop_fields"; + rating_count?: Maybe; + rating_sum?: Maybe; +}; + +/** order by stddev_pop() on columns of table "app" */ +export type App_Stddev_Pop_Order_By = { + rating_count?: InputMaybe; + rating_sum?: InputMaybe; +}; + +/** aggregate stddev_samp on columns */ +export type App_Stddev_Samp_Fields = { + __typename?: "app_stddev_samp_fields"; + rating_count?: Maybe; + rating_sum?: Maybe; +}; + +/** order by stddev_samp() on columns of table "app" */ +export type App_Stddev_Samp_Order_By = { + rating_count?: InputMaybe; + rating_sum?: InputMaybe; +}; + /** Streaming cursor of the table "app" */ export type App_Stream_Cursor_Input = { /** Stream column input with initial value */ @@ -3418,12 +3539,27 @@ export type App_Stream_Cursor_Value_Input = { is_staging?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team_id?: InputMaybe; updated_at?: InputMaybe; verified_at?: InputMaybe; }; +/** aggregate sum on columns */ +export type App_Sum_Fields = { + __typename?: "app_sum_fields"; + rating_count?: Maybe; + rating_sum?: Maybe; +}; + +/** order by sum() on columns of table "app" */ +export type App_Sum_Order_By = { + rating_count?: InputMaybe; + rating_sum?: InputMaybe; +}; + /** update columns of table "app" */ export enum App_Update_Column { /** column name */ @@ -3445,6 +3581,10 @@ export enum App_Update_Column { /** column name */ Name = "name", /** column name */ + RatingCount = "rating_count", + /** column name */ + RatingSum = "rating_sum", + /** column name */ Status = "status", /** column name */ TeamId = "team_id", @@ -3455,12 +3595,53 @@ export enum App_Update_Column { } export type App_Updates = { + /** increments the numeric columns with given value of the filtered values */ + _inc?: InputMaybe; /** sets the columns of the filtered rows to the given values */ _set?: InputMaybe; /** filter the rows which have to be updated */ where: App_Bool_Exp; }; +/** aggregate var_pop on columns */ +export type App_Var_Pop_Fields = { + __typename?: "app_var_pop_fields"; + rating_count?: Maybe; + rating_sum?: Maybe; +}; + +/** order by var_pop() on columns of table "app" */ +export type App_Var_Pop_Order_By = { + rating_count?: InputMaybe; + rating_sum?: InputMaybe; +}; + +/** aggregate var_samp on columns */ +export type App_Var_Samp_Fields = { + __typename?: "app_var_samp_fields"; + rating_count?: Maybe; + rating_sum?: Maybe; +}; + +/** order by var_samp() on columns of table "app" */ +export type App_Var_Samp_Order_By = { + rating_count?: InputMaybe; + rating_sum?: InputMaybe; +}; + +/** aggregate variance on columns */ +export type App_Variance_Fields = { + __typename?: "app_variance_fields"; + rating_count?: Maybe; + rating_sum?: Maybe; +}; + +/** order by variance() on columns of table "app" */ +export type App_Variance_Order_By = { + rating_count?: InputMaybe; + rating_sum?: InputMaybe; +}; + /** columns and relationships of "auth_code" */ export type Auth_Code = { __typename?: "auth_code"; @@ -3764,6 +3945,19 @@ export type Auth_Code_Updates = { where: Auth_Code_Bool_Exp; }; +/** Boolean expression to compare columns of type "bigint". All fields are combined with logical 'AND'. */ +export type Bigint_Comparison_Exp = { + _eq?: InputMaybe; + _gt?: InputMaybe; + _gte?: InputMaybe; + _in?: InputMaybe>; + _is_null?: InputMaybe; + _lt?: InputMaybe; + _lte?: InputMaybe; + _neq?: InputMaybe; + _nin?: InputMaybe>; +}; + /** columns and relationships of "cache" */ export type Cache = { __typename?: "cache"; @@ -5789,12 +5983,14 @@ export type Mutation_RootUpdate_Api_Key_ManyArgs = { /** mutation root */ export type Mutation_RootUpdate_AppArgs = { + _inc?: InputMaybe; _set?: InputMaybe; where: App_Bool_Exp; }; /** mutation root */ export type Mutation_RootUpdate_App_By_PkArgs = { + _inc?: InputMaybe; _set?: InputMaybe; pk_columns: App_Pk_Columns_Input; }; diff --git a/web/tests/api/v2/app/submit-app-review.test.ts b/web/tests/api/v2/app/submit-app-review.test.ts index 2045a5022..5435a5683 100644 --- a/web/tests/api/v2/app/submit-app-review.test.ts +++ b/web/tests/api/v2/app/submit-app-review.test.ts @@ -3,6 +3,8 @@ import { NextRequest } from "next/server"; import { appReviewMockProof } from "../../__mocks__/app-review-proof.mock"; const UpsertAppReview = jest.fn(); +const UpdateAppRatingSumMutation = jest.fn(); +const GetAppReview = jest.fn(); jest.mock( "../../../../api/v2/app/submit-app-review/graphql/upsert-app-review.generated.ts", @@ -13,6 +15,24 @@ jest.mock( })), ); +jest.mock( + "../../../../api/v2/app/submit-app-review/graphql/update-review-counter.generated.ts", + jest.fn(() => ({ + getSdk: () => ({ + UpdateAppRatingSumMutation, + }), + })), +); + +jest.mock( + "../../../../api/v2/app/submit-app-review/graphql/fetch-current-app-review.generated.ts", + jest.fn(() => ({ + getSdk: () => ({ + GetAppReview, + }), + })), +); + global.fetch = jest.fn(() => Promise.resolve({ json: jest.fn(() => Promise.resolve({})), @@ -50,6 +70,20 @@ describe("/api/v2/app/submit-app-review", () => { }, }); + UpdateAppRatingSumMutation.mockResolvedValue({ + update_app: { + affected_rows: 1, + }, + }); + + GetAppReview.mockResolvedValue({ + app_reviews: [ + { + rating: 3, + }, + ], + }); + const res = await POST(mockReq); expect(res.status).toBe(200); }); From 33d43b5e353077aea7f1230a86f7a47dffac4cdb Mon Sep 17 00:00:00 2001 From: Andy Wang <41224501+andy-t-wang@users.noreply.github.com> Date: Mon, 9 Dec 2024 21:25:53 +0100 Subject: [PATCH 3/8] fix app ratings (#1083) --- .../databases/default/tables/public_app.yaml | 2 + .../down.sql | 13 ++ .../up.sql | 15 ++ .../graphql/get-app-rating.generated.ts | 63 ------ .../app-rating/graphql/get-app-rating.graphql | 5 - web/api/helpers/app-rating/index.ts | 63 ------ web/api/helpers/app-store.ts | 6 +- .../update-review-counter.generated.ts | 4 +- .../graphql/update-review-counter.graphql | 2 +- .../graphql/get-app-metadata.generated.ts | 4 + .../[app_id]/graphql/get-app-metadata.graphql | 2 + .../graphql/get-app-metadata.generated.ts | 4 + .../[app_id]/graphql/get-app-metadata.graphql | 2 + .../graphql/get-app-rankings.generated.ts | 4 + .../apps/graphql/get-app-rankings.graphql | 2 + .../graphql/get-highlighted-apps.generated.ts | 4 + .../apps/graphql/get-highlighted-apps.graphql | 2 + web/graphql/graphql.schema.json | 197 +++--------------- web/graphql/graphql.ts | 50 ++--- web/lib/types.ts | 2 + web/tests/api/v2/minikit-app-metadata.test.ts | 14 +- web/tests/api/v2/public/apps/app.test.ts | 19 +- web/tests/api/v2/public/apps/apps.test.ts | 23 +- 23 files changed, 135 insertions(+), 367 deletions(-) create mode 100644 hasura/migrations/default/1733773864649_alter_table_public_app_alter_column_rating_sum/down.sql create mode 100644 hasura/migrations/default/1733773864649_alter_table_public_app_alter_column_rating_sum/up.sql delete mode 100644 web/api/helpers/app-rating/graphql/get-app-rating.generated.ts delete mode 100644 web/api/helpers/app-rating/graphql/get-app-rating.graphql delete mode 100644 web/api/helpers/app-rating/index.ts diff --git a/hasura/metadata/databases/default/tables/public_app.yaml b/hasura/metadata/databases/default/tables/public_app.yaml index 901fa6677..6dbbc4733 100644 --- a/hasura/metadata/databases/default/tables/public_app.yaml +++ b/hasura/metadata/databases/default/tables/public_app.yaml @@ -93,6 +93,8 @@ select_permissions: - is_archived - is_banned - is_staging + - rating_count + - rating_sum - status - team_id filter: {} diff --git a/hasura/migrations/default/1733773864649_alter_table_public_app_alter_column_rating_sum/down.sql b/hasura/migrations/default/1733773864649_alter_table_public_app_alter_column_rating_sum/down.sql new file mode 100644 index 000000000..b1e321fe8 --- /dev/null +++ b/hasura/migrations/default/1733773864649_alter_table_public_app_alter_column_rating_sum/down.sql @@ -0,0 +1,13 @@ +ALTER TABLE "public"."app" +ALTER COLUMN "rating_count" TYPE bigint; + +ALTER TABLE "public"."app" +ALTER COLUMN "rating_sum" TYPE bigint; + +alter table "public"."app" +alter column "rating_sum" +drop not null; + +alter table "public"."app" +alter column "rating_count" +drop not null; \ No newline at end of file diff --git a/hasura/migrations/default/1733773864649_alter_table_public_app_alter_column_rating_sum/up.sql b/hasura/migrations/default/1733773864649_alter_table_public_app_alter_column_rating_sum/up.sql new file mode 100644 index 000000000..0f5497767 --- /dev/null +++ b/hasura/migrations/default/1733773864649_alter_table_public_app_alter_column_rating_sum/up.sql @@ -0,0 +1,15 @@ +ALTER TABLE "public"."app" +ALTER COLUMN "rating_sum" TYPE int4; + +ALTER TABLE "public"."app" +ALTER COLUMN "rating_count" TYPE int4; + +alter table "public"."app" +alter column "rating_sum" +set + not null; + +alter table "public"."app" +alter column "rating_count" +set + not null; \ No newline at end of file diff --git a/web/api/helpers/app-rating/graphql/get-app-rating.generated.ts b/web/api/helpers/app-rating/graphql/get-app-rating.generated.ts deleted file mode 100644 index c91b17685..000000000 --- a/web/api/helpers/app-rating/graphql/get-app-rating.generated.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* eslint-disable import/no-relative-parent-imports -- auto generated file */ -import * as Types from "@/graphql/graphql"; - -import { GraphQLClient, RequestOptions } from "graphql-request"; -import gql from "graphql-tag"; -type GraphQLClientRequestHeaders = RequestOptions["requestHeaders"]; -export type GetAppRatingQueryVariables = Types.Exact<{ - app_id: Types.Scalars["String"]["input"]; -}>; - -export type GetAppRatingQuery = { - __typename?: "query_root"; - app_metadata: Array<{ - __typename?: "app_metadata"; - app_rating?: number | null; - }>; -}; - -export const GetAppRatingDocument = gql` - query GetAppRating($app_id: String!) { - app_metadata(where: { app_id: { _eq: $app_id } }) { - app_rating - } - } -`; - -export type SdkFunctionWrapper = ( - action: (requestHeaders?: Record) => Promise, - operationName: string, - operationType?: string, - variables?: any, -) => Promise; - -const defaultWrapper: SdkFunctionWrapper = ( - action, - _operationName, - _operationType, - _variables, -) => action(); - -export function getSdk( - client: GraphQLClient, - withWrapper: SdkFunctionWrapper = defaultWrapper, -) { - return { - GetAppRating( - variables: GetAppRatingQueryVariables, - requestHeaders?: GraphQLClientRequestHeaders, - ): Promise { - return withWrapper( - (wrappedRequestHeaders) => - client.request(GetAppRatingDocument, variables, { - ...requestHeaders, - ...wrappedRequestHeaders, - }), - "GetAppRating", - "query", - variables, - ); - }, - }; -} -export type Sdk = ReturnType; diff --git a/web/api/helpers/app-rating/graphql/get-app-rating.graphql b/web/api/helpers/app-rating/graphql/get-app-rating.graphql deleted file mode 100644 index 8b21ff03d..000000000 --- a/web/api/helpers/app-rating/graphql/get-app-rating.graphql +++ /dev/null @@ -1,5 +0,0 @@ -query GetAppRating($app_id: String!) { - app_metadata(where: { app_id: { _eq: $app_id } }) { - app_rating - } -} diff --git a/web/api/helpers/app-rating/index.ts b/web/api/helpers/app-rating/index.ts deleted file mode 100644 index 639b82250..000000000 --- a/web/api/helpers/app-rating/index.ts +++ /dev/null @@ -1,63 +0,0 @@ -"use server"; -import { getAPIServiceGraphqlClient } from "../graphql"; -import { getSdk as getAppRatingSdk } from "./graphql/get-app-rating.generated"; - -// Helper function to get rating with Redis caching -export async function getAppRating(appId: string): Promise { - const redisKey = `app:${appId}:rating`; - const lockKey = `lock:${appId}:rating`; - - const redis = global.RedisClient; - - if (!redis) { - throw new Error("Redis client not found"); - } - - try { - // Try to get from cache first - let rating = await redis.get(redisKey); - - if (rating !== null) { - return parseFloat(rating); - } - - // Try to acquire lock - const acquiredLock = await redis.set(lockKey, "pending", "EX", 30); - - if (!acquiredLock) { - for (let i = 0; i < 3; i++) { - await new Promise((resolve) => setTimeout(resolve, 1000)); - rating = await redis.get(redisKey); - if (rating !== null) { - return parseFloat(rating); - } - } - - console.warn("Lock timeout for app rating calculation", { appId }); - } - - const client = await getAPIServiceGraphqlClient(); - - // Calculate rating from DB - const result = await getAppRatingSdk(client).GetAppRating({ - app_id: appId, - }); - - const calculatedRating = result.app_metadata[0].app_rating ?? 0; - - // Cache for 24 hours - await redis.set(redisKey, calculatedRating.toString(), "EX", 24 * 60 * 60); - - return calculatedRating; // Return as float - } catch (error) { - console.warn("Error getting app rating with cache", { error, appId }); - return 0; // Return 0 if there's an error - } finally { - try { - await redis.del(lockKey); - await redis.quit(); // TODO: Remove this logic - } catch (redisError) { - console.error("Error closing Redis connection", { redisError }); - } - } -} diff --git a/web/api/helpers/app-store.ts b/web/api/helpers/app-store.ts index 66b2b4a8b..b68cd0df4 100644 --- a/web/api/helpers/app-store.ts +++ b/web/api/helpers/app-store.ts @@ -20,9 +20,9 @@ export const formatAppMetadata = async ( (stat) => stat.app_id === appMetadata.app_id, ); - // const appRating = await getAppRating(appMetadata.app_id); - - const appRating = 0; + const appRating = parseFloat( + (appData.app.rating_sum / appData.app.rating_count).toFixed(2), + ); const localisedContent = appMetadata.localisations?.[0]; diff --git a/web/api/v2/app/submit-app-review/graphql/update-review-counter.generated.ts b/web/api/v2/app/submit-app-review/graphql/update-review-counter.generated.ts index fc026c90b..b88d8091f 100644 --- a/web/api/v2/app/submit-app-review/graphql/update-review-counter.generated.ts +++ b/web/api/v2/app/submit-app-review/graphql/update-review-counter.generated.ts @@ -6,7 +6,7 @@ import gql from "graphql-tag"; type GraphQLClientRequestHeaders = RequestOptions["requestHeaders"]; export type UpdateAppRatingSumMutationMutationVariables = Types.Exact<{ app_id: Types.Scalars["String"]["input"]; - rating: Types.Scalars["bigint"]["input"]; + rating: Types.Scalars["Int"]["input"]; }>; export type UpdateAppRatingSumMutationMutation = { @@ -18,7 +18,7 @@ export type UpdateAppRatingSumMutationMutation = { }; export const UpdateAppRatingSumMutationDocument = gql` - mutation UpdateAppRatingSumMutation($app_id: String!, $rating: bigint!) { + mutation UpdateAppRatingSumMutation($app_id: String!, $rating: Int!) { update_app( where: { id: { _eq: $app_id } } _inc: { rating_count: 1, rating_sum: $rating } diff --git a/web/api/v2/app/submit-app-review/graphql/update-review-counter.graphql b/web/api/v2/app/submit-app-review/graphql/update-review-counter.graphql index d7aef652e..3c06aa67c 100644 --- a/web/api/v2/app/submit-app-review/graphql/update-review-counter.graphql +++ b/web/api/v2/app/submit-app-review/graphql/update-review-counter.graphql @@ -1,4 +1,4 @@ -mutation UpdateAppRatingSumMutation($app_id: String!, $rating: bigint!) { +mutation UpdateAppRatingSumMutation($app_id: String!, $rating: Int!) { update_app( where: { id: { _eq: $app_id } } _inc: { rating_count: 1, rating_sum: $rating } diff --git a/web/api/v2/minikit/app-metadata/[app_id]/graphql/get-app-metadata.generated.ts b/web/api/v2/minikit/app-metadata/[app_id]/graphql/get-app-metadata.generated.ts index af5e13452..35b52cff0 100644 --- a/web/api/v2/minikit/app-metadata/[app_id]/graphql/get-app-metadata.generated.ts +++ b/web/api/v2/minikit/app-metadata/[app_id]/graphql/get-app-metadata.generated.ts @@ -47,6 +47,8 @@ export type GetAppMetadataQuery = { }>; app: { __typename?: "app"; + rating_sum: number; + rating_count: number; team: { __typename?: "team"; name?: string | null }; }; }>; @@ -92,6 +94,8 @@ export const GetAppMetadataDocument = gql` team { name } + rating_sum + rating_count } } } diff --git a/web/api/v2/minikit/app-metadata/[app_id]/graphql/get-app-metadata.graphql b/web/api/v2/minikit/app-metadata/[app_id]/graphql/get-app-metadata.graphql index fa429357b..c130c557e 100644 --- a/web/api/v2/minikit/app-metadata/[app_id]/graphql/get-app-metadata.graphql +++ b/web/api/v2/minikit/app-metadata/[app_id]/graphql/get-app-metadata.graphql @@ -37,6 +37,8 @@ query GetAppMetadata($app_id: String!, $locale: String!) { team { name } + rating_sum + rating_count } } } diff --git a/web/api/v2/public/app/[app_id]/graphql/get-app-metadata.generated.ts b/web/api/v2/public/app/[app_id]/graphql/get-app-metadata.generated.ts index 1da934bd0..08009585d 100644 --- a/web/api/v2/public/app/[app_id]/graphql/get-app-metadata.generated.ts +++ b/web/api/v2/public/app/[app_id]/graphql/get-app-metadata.generated.ts @@ -47,6 +47,8 @@ export type GetAppMetadataQuery = { }>; app: { __typename?: "app"; + rating_sum: number; + rating_count: number; team: { __typename?: "team"; name?: string | null }; }; }>; @@ -92,6 +94,8 @@ export const GetAppMetadataDocument = gql` team { name } + rating_sum + rating_count } } } diff --git a/web/api/v2/public/app/[app_id]/graphql/get-app-metadata.graphql b/web/api/v2/public/app/[app_id]/graphql/get-app-metadata.graphql index 4360ea63e..72713c899 100644 --- a/web/api/v2/public/app/[app_id]/graphql/get-app-metadata.graphql +++ b/web/api/v2/public/app/[app_id]/graphql/get-app-metadata.graphql @@ -37,6 +37,8 @@ query GetAppMetadata($app_id: String!, $locale: String!) { team { name } + rating_sum + rating_count } } } diff --git a/web/api/v2/public/apps/graphql/get-app-rankings.generated.ts b/web/api/v2/public/apps/graphql/get-app-rankings.generated.ts index 5f639bedb..341fd48e5 100644 --- a/web/api/v2/public/apps/graphql/get-app-rankings.generated.ts +++ b/web/api/v2/public/apps/graphql/get-app-rankings.generated.ts @@ -48,6 +48,8 @@ export type GetAppsQuery = { }>; app: { __typename?: "app"; + rating_count: number; + rating_sum: number; team: { __typename?: "team"; name?: string | null }; }; }>; @@ -99,6 +101,8 @@ export const GetAppsDocument = gql` team { name } + rating_count + rating_sum } } } diff --git a/web/api/v2/public/apps/graphql/get-app-rankings.graphql b/web/api/v2/public/apps/graphql/get-app-rankings.graphql index c25872702..9f10ba2c6 100644 --- a/web/api/v2/public/apps/graphql/get-app-rankings.graphql +++ b/web/api/v2/public/apps/graphql/get-app-rankings.graphql @@ -43,6 +43,8 @@ query GetApps($limit: Int!, $offset: Int!, $locale: String!) { team { name } + rating_count + rating_sum } } } diff --git a/web/api/v2/public/apps/graphql/get-highlighted-apps.generated.ts b/web/api/v2/public/apps/graphql/get-highlighted-apps.generated.ts index 7a2cb16cf..b211fec2d 100644 --- a/web/api/v2/public/apps/graphql/get-highlighted-apps.generated.ts +++ b/web/api/v2/public/apps/graphql/get-highlighted-apps.generated.ts @@ -51,6 +51,8 @@ export type GetHighlightsQuery = { }>; app: { __typename?: "app"; + rating_count: number; + rating_sum: number; team: { __typename?: "team"; name?: string | null }; }; }>; @@ -108,6 +110,8 @@ export const GetHighlightsDocument = gql` team { name } + rating_count + rating_sum } } } diff --git a/web/api/v2/public/apps/graphql/get-highlighted-apps.graphql b/web/api/v2/public/apps/graphql/get-highlighted-apps.graphql index c8ef6c298..8fa793a2b 100644 --- a/web/api/v2/public/apps/graphql/get-highlighted-apps.graphql +++ b/web/api/v2/public/apps/graphql/get-highlighted-apps.graphql @@ -50,6 +50,8 @@ query GetHighlights( team { name } + rating_count + rating_sum } } } diff --git a/web/graphql/graphql.schema.json b/web/graphql/graphql.schema.json index a298676fa..886107cb0 100644 --- a/web/graphql/graphql.schema.json +++ b/web/graphql/graphql.schema.json @@ -10645,9 +10645,13 @@ "description": null, "args": [], "type": { - "kind": "SCALAR", - "name": "bigint", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -10657,9 +10661,13 @@ "description": null, "args": [], "type": { - "kind": "SCALAR", - "name": "bigint", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -11704,7 +11712,7 @@ "description": null, "type": { "kind": "INPUT_OBJECT", - "name": "bigint_comparison_exp", + "name": "Int_comparison_exp", "ofType": null }, "defaultValue": null, @@ -11716,7 +11724,7 @@ "description": null, "type": { "kind": "INPUT_OBJECT", - "name": "bigint_comparison_exp", + "name": "Int_comparison_exp", "ofType": null }, "defaultValue": null, @@ -11816,7 +11824,7 @@ "description": null, "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "defaultValue": null, @@ -11828,7 +11836,7 @@ "description": null, "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "defaultValue": null, @@ -11983,7 +11991,7 @@ "description": null, "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "defaultValue": null, @@ -11995,7 +12003,7 @@ "description": null, "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "defaultValue": null, @@ -12150,7 +12158,7 @@ "args": [], "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "isDeprecated": false, @@ -12162,7 +12170,7 @@ "args": [], "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "isDeprecated": false, @@ -19309,7 +19317,7 @@ "args": [], "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "isDeprecated": false, @@ -19321,7 +19329,7 @@ "args": [], "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "isDeprecated": false, @@ -24403,7 +24411,7 @@ "description": null, "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "defaultValue": null, @@ -24415,7 +24423,7 @@ "description": null, "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "defaultValue": null, @@ -26342,7 +26350,7 @@ "description": null, "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "defaultValue": null, @@ -26354,7 +26362,7 @@ "description": null, "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "defaultValue": null, @@ -26425,7 +26433,7 @@ "args": [], "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "isDeprecated": false, @@ -26437,7 +26445,7 @@ "args": [], "type": { "kind": "SCALAR", - "name": "bigint", + "name": "Int", "ofType": null }, "isDeprecated": false, @@ -28987,151 +28995,6 @@ "enumValues": null, "possibleTypes": null }, - { - "kind": "SCALAR", - "name": "bigint", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "bigint_comparison_exp", - "description": "Boolean expression to compare columns of type \"bigint\". All fields are combined with logical 'AND'.", - "fields": null, - "inputFields": [ - { - "name": "_eq", - "description": null, - "type": { - "kind": "SCALAR", - "name": "bigint", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "_gt", - "description": null, - "type": { - "kind": "SCALAR", - "name": "bigint", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "_gte", - "description": null, - "type": { - "kind": "SCALAR", - "name": "bigint", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "_in", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "bigint", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "_is_null", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "_lt", - "description": null, - "type": { - "kind": "SCALAR", - "name": "bigint", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "_lte", - "description": null, - "type": { - "kind": "SCALAR", - "name": "bigint", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "_neq", - "description": null, - "type": { - "kind": "SCALAR", - "name": "bigint", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "_nin", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "bigint", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, { "kind": "OBJECT", "name": "cache", diff --git a/web/graphql/graphql.ts b/web/graphql/graphql.ts index 988ebd4e5..636a00a15 100644 --- a/web/graphql/graphql.ts +++ b/web/graphql/graphql.ts @@ -26,7 +26,6 @@ export type Scalars = { Boolean: { input: boolean; output: boolean }; Int: { input: number; output: number }; Float: { input: number; output: number }; - bigint: { input: unknown; output: unknown }; jsonb: { input: any; output: any }; numeric: { input: number; output: number }; timestamptz: { input: string; output: string }; @@ -1390,8 +1389,8 @@ export type App = { is_staging: Scalars["Boolean"]["output"]; logo_url: Scalars["String"]["output"]; name: Scalars["String"]["output"]; - rating_count?: Maybe; - rating_sum?: Maybe; + rating_count: Scalars["Int"]["output"]; + rating_sum: Scalars["Int"]["output"]; status: Scalars["String"]["output"]; /** An object relationship */ team: Team; @@ -1545,8 +1544,8 @@ export type App_Bool_Exp = { is_staging?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; - rating_count?: InputMaybe; - rating_sum?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team?: InputMaybe; team_id?: InputMaybe; @@ -1562,8 +1561,8 @@ export enum App_Constraint { /** input type for incrementing numeric columns in table "app" */ export type App_Inc_Input = { - rating_count?: InputMaybe; - rating_sum?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; }; /** input type for inserting data into table "app" */ @@ -1579,8 +1578,8 @@ export type App_Insert_Input = { is_staging?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; - rating_count?: InputMaybe; - rating_sum?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team?: InputMaybe; team_id?: InputMaybe; @@ -1597,8 +1596,8 @@ export type App_Max_Fields = { id?: Maybe; logo_url?: Maybe; name?: Maybe; - rating_count?: Maybe; - rating_sum?: Maybe; + rating_count?: Maybe; + rating_sum?: Maybe; status?: Maybe; team_id?: Maybe; updated_at?: Maybe; @@ -2461,8 +2460,8 @@ export type App_Min_Fields = { id?: Maybe; logo_url?: Maybe; name?: Maybe; - rating_count?: Maybe; - rating_sum?: Maybe; + rating_count?: Maybe; + rating_sum?: Maybe; status?: Maybe; team_id?: Maybe; updated_at?: Maybe; @@ -3234,8 +3233,8 @@ export type App_Set_Input = { is_staging?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; - rating_count?: InputMaybe; - rating_sum?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team_id?: InputMaybe; updated_at?: InputMaybe; @@ -3539,8 +3538,8 @@ export type App_Stream_Cursor_Value_Input = { is_staging?: InputMaybe; logo_url?: InputMaybe; name?: InputMaybe; - rating_count?: InputMaybe; - rating_sum?: InputMaybe; + rating_count?: InputMaybe; + rating_sum?: InputMaybe; status?: InputMaybe; team_id?: InputMaybe; updated_at?: InputMaybe; @@ -3550,8 +3549,8 @@ export type App_Stream_Cursor_Value_Input = { /** aggregate sum on columns */ export type App_Sum_Fields = { __typename?: "app_sum_fields"; - rating_count?: Maybe; - rating_sum?: Maybe; + rating_count?: Maybe; + rating_sum?: Maybe; }; /** order by sum() on columns of table "app" */ @@ -3945,19 +3944,6 @@ export type Auth_Code_Updates = { where: Auth_Code_Bool_Exp; }; -/** Boolean expression to compare columns of type "bigint". All fields are combined with logical 'AND'. */ -export type Bigint_Comparison_Exp = { - _eq?: InputMaybe; - _gt?: InputMaybe; - _gte?: InputMaybe; - _in?: InputMaybe>; - _is_null?: InputMaybe; - _lt?: InputMaybe; - _lte?: InputMaybe; - _neq?: InputMaybe; - _nin?: InputMaybe>; -}; - /** columns and relationships of "cache" */ export type Cache = { __typename?: "cache"; diff --git a/web/lib/types.ts b/web/lib/types.ts index da3bbea66..b2d5547b2 100644 --- a/web/lib/types.ts +++ b/web/lib/types.ts @@ -212,6 +212,8 @@ export type AppStoreMetadataFields = { verification_status: string; app: { team: { name?: string | null }; + rating_sum: number; + rating_count: number; }; }; diff --git a/web/tests/api/v2/minikit-app-metadata.test.ts b/web/tests/api/v2/minikit-app-metadata.test.ts index 3240e7c99..7f113c702 100644 --- a/web/tests/api/v2/minikit-app-metadata.test.ts +++ b/web/tests/api/v2/minikit-app-metadata.test.ts @@ -28,10 +28,6 @@ jest.mock( }), ); -jest.mock("@/api/helpers/app-rating", () => ({ - getAppRating: jest.fn().mockResolvedValue(3.4), -})); - // #endregion const createMockRequest = (params: { @@ -87,9 +83,8 @@ const validAppMetadataResponse = [ support_link: "mailto:test@test.com", supported_countries: ["us"], supported_languages: ["en"], - app_rating: 0, associated_domains: ["https://worldcoin.org"], - app: { team: { name: "test" } }, + app: { team: { name: "test" }, rating_sum: 10, rating_count: 3 }, }, ]; @@ -127,7 +122,7 @@ const app_metadata = { supported_countries: ["us"], supported_languages: ["en"], associated_domains: ["https://worldcoin.org"], - app_rating: 0, + app_rating: 3.33, unique_users: 0, impressions: 0, team_name: "test", @@ -184,8 +179,7 @@ describe("/api/v2/minikit/app-metadata/[app_id] [success cases]", () => { associated_domains: ["https://worldcoin.org"], supported_countries: ["us"], supported_languages: ["en"], - app_rating: 0, - app: { team: { name: "test" } }, + app: { team: { name: "test" }, rating_sum: 10, rating_count: 3 }, }, ], }); @@ -223,7 +217,7 @@ describe("/api/v2/minikit/app-metadata/[app_id] [success cases]", () => { support_link: "mailto:test@test.com", supported_countries: ["us"], supported_languages: ["en"], - app_rating: 0, + app_rating: 3.33, unique_users: 0, impressions: 0, team_name: "test", diff --git a/web/tests/api/v2/public/apps/app.test.ts b/web/tests/api/v2/public/apps/app.test.ts index e8653cd55..71754db52 100644 --- a/web/tests/api/v2/public/apps/app.test.ts +++ b/web/tests/api/v2/public/apps/app.test.ts @@ -37,12 +37,13 @@ jest.mock( contracts: ["0x0c892815f0B058E69987920A23FBb33c834289cf"], permit2_tokens: ["0x0c892815f0B058E69987920A23FBb33c834289cf"], supported_languages: ["en", "es"], - app_rating: 0, verification_status: "unverified", app: { team: { name: "Example Team", }, + rating_sum: 10, + rating_count: 3, }, }, ], @@ -51,10 +52,6 @@ jest.mock( }), ); -jest.mock("@/api/helpers/app-rating", () => ({ - getAppRating: jest.fn().mockResolvedValue(3.4), -})); - describe("/api/public/app/[app_id]", () => { test("Returns correct value for valid unverified app", async () => { const request = new NextRequest("https://cdn.test.com/api/public/app/1", { @@ -92,7 +89,7 @@ describe("/api/public/app/[app_id]", () => { support_link: "andy@gmail.com", supported_countries: ["us"], supported_languages: ["en", "es"], - app_rating: 0, + app_rating: 3.33, unique_users: 0, impressions: 0, verification_status: "unverified", @@ -136,12 +133,13 @@ describe("/api/public/app/[app_id]", () => { contracts: ["0x0c892815f0B058E69987920A23FBb33c834289cf"], permit2_tokens: ["0x0c892815f0B058E69987920A23FBb33c834289cf"], supported_languages: ["en", "es"], - app_rating: 0, verification_status: "verified", app: { team: { name: "Example Team", }, + rating_sum: 10, + rating_count: 3, }, }, ], @@ -158,6 +156,7 @@ describe("/api/public/app/[app_id]", () => { app_data: { name: "Example App", app_id: "1", + app_rating: 3.33, short_name: "test", logo_img_url: "https://cdn.test.com/1/logo.png", showcase_img_urls: [ @@ -183,7 +182,6 @@ describe("/api/public/app/[app_id]", () => { support_link: "andy@gmail.com", supported_countries: ["us"], supported_languages: ["en", "es"], - app_rating: 0, unique_users: 0, impressions: 0, verification_status: "verified", @@ -236,11 +234,12 @@ describe("/api/public/app/[app_id]", () => { permit2_tokens: ["0x0c892815f0B058E69987920A23FBb33c834289cf"], supported_countries: ["us"], supported_languages: ["en", "es"], - app_rating: 0, app: { team: { name: "Example Team", }, + rating_sum: 10, + rating_count: 3, }, }, ], @@ -272,7 +271,7 @@ describe("/api/public/app/[app_id]", () => { associated_domains: ["https://worldcoin.org"], contracts: ["0x0c892815f0B058E69987920A23FBb33c834289cf"], permit2_tokens: ["0x0c892815f0B058E69987920A23FBb33c834289cf"], - app_rating: 0, + app_rating: 3.33, unique_users: 0, impressions: 0, whitelisted_addresses: ["0x1234", "0x5678"], diff --git a/web/tests/api/v2/public/apps/apps.test.ts b/web/tests/api/v2/public/apps/apps.test.ts index 86a9da83c..379cff0fe 100644 --- a/web/tests/api/v2/public/apps/apps.test.ts +++ b/web/tests/api/v2/public/apps/apps.test.ts @@ -43,15 +43,8 @@ jest.mock( }), ); -jest.mock("@/api/helpers/app-rating", () => ({ - getAppRating: jest.fn().mockResolvedValue(3.4), -})); - beforeEach(() => { jest.resetAllMocks(); - - const { getAppRating } = require("@/api/helpers/app-rating"); - getAppRating.mockResolvedValue(3.4); }); describe("/api/v2/public/apps", () => { @@ -131,6 +124,8 @@ describe("/api/v2/public/apps", () => { team: { name: "Example Team", }, + rating_sum: 10, + rating_count: 3, }, }, { @@ -158,6 +153,8 @@ describe("/api/v2/public/apps", () => { team: { name: "Example Team", }, + rating_sum: 10, + rating_count: 3, }, }, { @@ -189,6 +186,8 @@ describe("/api/v2/public/apps", () => { team: { name: "Example Team", }, + rating_sum: 10, + rating_count: 3, }, }, ], @@ -232,7 +231,7 @@ describe("/api/v2/public/apps", () => { }, world_app_button_text: "random", world_app_description: "random", - app_rating: 0, + app_rating: 3.33, verification_status: "verified", }, { @@ -263,7 +262,7 @@ describe("/api/v2/public/apps", () => { team_name: "Example Team", world_app_button_text: "random", world_app_description: "random", - app_rating: 0, + app_rating: 3.33, verification_status: "verified", }, { @@ -282,7 +281,7 @@ describe("/api/v2/public/apps", () => { whitelisted_addresses: ["0x1234", "0x5678"], unique_users: 0, impressions: 0, - app_rating: 0, + app_rating: 3.33, app_mode: "mini-app", associated_domains: ["https://worldcoin.org"], contracts: ["0x0c892815f0B058E69987920A23FBb33c834289cf"], @@ -348,6 +347,8 @@ describe("/api/v2/public/apps", () => { team: { name: "Example Team", }, + rating_sum: 10, + rating_count: 3, }, }, ], @@ -387,7 +388,7 @@ describe("/api/v2/public/apps", () => { supported_languages: ["en", "es"], ratings_external_nullifier: "0x00ca597c4f12f9f85a633bb04cfdc877af7c2d91a6c1c7fe45031b495a227a58", - app_rating: 0, + app_rating: 3.33, unique_users: 0, impressions: 0, whitelisted_addresses: ["0x1234", "0x5678"], From 2508b6450f9d6e005ad2bade59265d62857331da Mon Sep 17 00:00:00 2001 From: Andy Wang <41224501+andy-t-wang@users.noreply.github.com> Date: Mon, 9 Dec 2024 21:59:41 +0100 Subject: [PATCH 4/8] add default rating (#1084) --- web/api/helpers/app-store.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/api/helpers/app-store.ts b/web/api/helpers/app-store.ts index b68cd0df4..06f7f993c 100644 --- a/web/api/helpers/app-store.ts +++ b/web/api/helpers/app-store.ts @@ -51,7 +51,7 @@ export const formatAppMetadata = async ( return { ...appMetadataWithoutLocalisations, name: name, - app_rating: appRating, + app_rating: appRating ?? 0, world_app_button_text: localisedContent?.world_app_button_text ?? appMetadata.world_app_button_text, From 6fc32acf566e71fef4e8605baede5cf35062af31 Mon Sep 17 00:00:00 2001 From: Andy Wang <41224501+andy-t-wang@users.noreply.github.com> Date: Mon, 9 Dec 2024 22:58:51 +0100 Subject: [PATCH 5/8] default update (#1085) --- web/api/helpers/app-store.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/web/api/helpers/app-store.ts b/web/api/helpers/app-store.ts index 06f7f993c..d05d5e9fc 100644 --- a/web/api/helpers/app-store.ts +++ b/web/api/helpers/app-store.ts @@ -20,9 +20,12 @@ export const formatAppMetadata = async ( (stat) => stat.app_id === appMetadata.app_id, ); - const appRating = parseFloat( - (appData.app.rating_sum / appData.app.rating_count).toFixed(2), - ); + const appRating = + appData.app.rating_count > 0 + ? parseFloat( + (appData.app.rating_sum / appData.app.rating_count).toFixed(2), + ) + : 0; const localisedContent = appMetadata.localisations?.[0]; From 0c9cf44906728ebe0b57193f2104b57c960aeb81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Struck?= <98230431+michalstruck@users.noreply.github.com> Date: Wed, 11 Dec 2024 12:03:19 +0100 Subject: [PATCH 6/8] Server side validation (#1064) * fix: server side validation on app config basic form * refactor: remove redundant code * refactor: rename * refactor: AppStoreLocalised form server side validation * fix: centralize common yup schema * refactor: further centralize app schemas * fix: server side validation on app top bar * chore: cleanup & update metadata * chore: cleanup * fix: insert & validate apps server side, limit user perms * fix overly permissive url * fix: more permissive title regex * fix: support links server side transform and https link schema improvement * fix: ci * cleanup * cleanup * feat: app config advanced form server side validation * fix: limit permissions * fix: permission control * cleanup * fix: app insert permissions fix * fix: postreview cleanup * fix: logging & deps --- .../databases/default/tables/public_app.yaml | 9 +- .../default/tables/public_app_metadata.yaml | 65 ++-- .../default/tables/public_localisations.yaml | 10 +- web/components/Category/index.tsx | 4 +- web/graphql-codegen.types.js | 22 ++ web/lib/categories.ts | 6 +- web/lib/constants.ts | 5 + web/lib/permissions/README.md | 5 + .../get-app-insert-permissions.generated.ts | 81 +++++ .../server/get-app-insert-permissions.graphql | 16 + ...p-metadata-update-permissions.generated.ts | 97 ++++++ ...et-app-metadata-update-permissions.graphql | 27 ++ .../get-app-update-permissions.generated.ts | 84 ++++++ .../server/get-app-update-permissions.graphql | 17 ++ ...alisations-insert-permissions.generated.ts | 87 ++++++ ...t-localisations-insert-permissions.graphql | 27 ++ ...alisations-update-permissions.generated.ts | 87 ++++++ ...t-localisations-update-permissions.graphql | 27 ++ web/lib/permissions/index.ts | 126 ++++++++ web/lib/schema/index.ts | 109 +++++++ web/lib/use-refetch-queries.ts | 34 +++ .../graphql/client/update-setup.generated.ts | 106 ------- .../graphql/server/update-setup.generated.ts | 92 ++++++ .../{client => server}/update-setup.graphql | 2 - .../Advanced/page/SetupForm/index.tsx | 140 +++------ .../Advanced/page/form-schema.ts | 38 +++ .../Configuration/Advanced/page/index.tsx | 4 +- .../Advanced/page/server/submit.ts | 70 +++++ .../client/insert-localisation.generated.ts | 68 ----- .../graphql/client/update-app.generated.ts | 76 ----- .../client/update-localisation.generated.ts | 76 ----- .../server/add-new-locale.generated.ts | 72 +++++ .../graphql/server/add-new-locale.graphql | 8 + .../server/insert-localisation.generated.ts | 64 ++++ .../insert-localisation.graphql | 0 .../graphql/server/update-app.generated.ts | 71 +++++ .../{client => server}/update-app.graphql | 0 .../server/update-localisation.generated.ts | 71 +++++ .../update-localisation.graphql | 0 .../AppStore/AppStoreLocalised/index.tsx | 157 ++++------ .../AppStore/AppStoreLocalised/utils/util.ts | 77 +---- .../ImageForm/ImageDisplay/index.tsx | 0 .../ImageForm/ImageLoader/index.tsx | 0 .../client/update-hero-image.generated.ts | 0 .../graphql/client/update-hero-image.graphql | 0 .../client/update-showcase-image.generated.ts | 0 .../client/update-showcase-image.graphql | 0 .../AppStore/{page => }/ImageForm/index.tsx | 9 +- .../Configuration/AppStore/form-schema.ts | 99 ++++++ .../Configuration/AppStore/page/index.tsx | 4 +- .../Configuration/AppStore/server/submit.ts | 285 ++++++++++++++++++ .../AppTopBar/FormSkeleton/index.tsx | 0 .../graphql/client/update-logo.generated.ts | 0 .../graphql/client/update-logo.graphql | 0 .../AppTopBar/LogoImageUpload/index.tsx | 9 +- .../validate-localisations.generated.ts | 0 .../client/validate-localisations.graphql | 0 .../graphql/server/submit-app.generated.ts | 75 +++++ .../graphql/server}/submit-app.graphql | 0 .../AppTopBar/SubmitAppModal/index.tsx | 60 ++-- .../AppTopBar/VersionSwitcher/index.tsx | 4 +- .../Configuration/AppTopBar/form-schema.ts | 36 +++ .../client/create-editable-row.generated.ts | 0 .../client/create-editable-row.graphql | 0 .../{PageComponents => }/AppTopBar/index.tsx | 113 ++----- .../Configuration/AppTopBar/server/submit.ts | 50 +++ .../BasicInformation/form-schema.ts | 15 + .../graphql/client/update-app.generated.ts | 76 ----- .../graphql/server/update-app.generated.ts | 71 +++++ .../{client => server}/update-app.graphql | 0 .../Configuration/BasicInformation/index.tsx | 54 +--- .../BasicInformation/server/submit.ts | 37 +++ .../AppId/Configuration/Danger/page/index.tsx | 4 +- .../graphql/client/submit-app.generated.ts | 81 ----- .../TeamId/Apps/AppId/Configuration/page.tsx | 4 +- .../graphql/client/fetch-apps.generated.ts | 2 + .../AppSelector/graphql/client/fetch-apps.gql | 1 + .../layout/CreateAppDialog/form-schema.ts | 18 ++ .../graphql/client/insert-app.generated.ts | 99 ------ .../graphql/server/insert-app.generated.ts | 89 ++++++ .../graphql/{client => server}/insert-app.gql | 0 .../Portal/layout/CreateAppDialog/index.tsx | 121 +++----- .../layout/CreateAppDialog/server/submit.ts | 50 +++ 83 files changed, 2461 insertions(+), 1142 deletions(-) create mode 100644 web/lib/permissions/README.md create mode 100644 web/lib/permissions/graphql/server/get-app-insert-permissions.generated.ts create mode 100644 web/lib/permissions/graphql/server/get-app-insert-permissions.graphql create mode 100644 web/lib/permissions/graphql/server/get-app-metadata-update-permissions.generated.ts create mode 100644 web/lib/permissions/graphql/server/get-app-metadata-update-permissions.graphql create mode 100644 web/lib/permissions/graphql/server/get-app-update-permissions.generated.ts create mode 100644 web/lib/permissions/graphql/server/get-app-update-permissions.graphql create mode 100644 web/lib/permissions/graphql/server/get-localisations-insert-permissions.generated.ts create mode 100644 web/lib/permissions/graphql/server/get-localisations-insert-permissions.graphql create mode 100644 web/lib/permissions/graphql/server/get-localisations-update-permissions.generated.ts create mode 100644 web/lib/permissions/graphql/server/get-localisations-update-permissions.graphql create mode 100644 web/lib/permissions/index.ts create mode 100644 web/lib/schema/index.ts create mode 100644 web/lib/use-refetch-queries.ts delete mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/Advanced/page/SetupForm/graphql/client/update-setup.generated.ts create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/Advanced/page/SetupForm/graphql/server/update-setup.generated.ts rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/Advanced/page/SetupForm/graphql/{client => server}/update-setup.graphql (84%) create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/Advanced/page/form-schema.ts create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/Advanced/page/server/submit.ts delete mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/client/insert-localisation.generated.ts delete mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/client/update-app.generated.ts delete mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/client/update-localisation.generated.ts create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/server/add-new-locale.generated.ts create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/server/add-new-locale.graphql create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/server/insert-localisation.generated.ts rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/{client => server}/insert-localisation.graphql (100%) create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/server/update-app.generated.ts rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/{client => server}/update-app.graphql (100%) create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/server/update-localisation.generated.ts rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/AppStoreLocalised/graphql/{client => server}/update-localisation.graphql (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/{page => }/ImageForm/ImageDisplay/index.tsx (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/{page => }/ImageForm/ImageLoader/index.tsx (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/{page => }/ImageForm/graphql/client/update-hero-image.generated.ts (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/{page => }/ImageForm/graphql/client/update-hero-image.graphql (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/{page => }/ImageForm/graphql/client/update-showcase-image.generated.ts (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/{page => }/ImageForm/graphql/client/update-showcase-image.graphql (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/{page => }/ImageForm/index.tsx (98%) create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/form-schema.ts create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppStore/server/submit.ts rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/FormSkeleton/index.tsx (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/LogoImageUpload/graphql/client/update-logo.generated.ts (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/LogoImageUpload/graphql/client/update-logo.graphql (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/LogoImageUpload/index.tsx (97%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/SubmitAppModal/graphql/client/validate-localisations.generated.ts (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/SubmitAppModal/graphql/client/validate-localisations.graphql (100%) create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppTopBar/SubmitAppModal/graphql/server/submit-app.generated.ts rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents/AppTopBar/SubmitAppModal/graphql/client => AppTopBar/SubmitAppModal/graphql/server}/submit-app.graphql (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/SubmitAppModal/index.tsx (86%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/VersionSwitcher/index.tsx (94%) create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppTopBar/form-schema.ts rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/graphql/client/create-editable-row.generated.ts (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/graphql/client/create-editable-row.graphql (100%) rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/{PageComponents => }/AppTopBar/index.tsx (71%) create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppTopBar/server/submit.ts create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/BasicInformation/form-schema.ts delete mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/BasicInformation/graphql/client/update-app.generated.ts create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/BasicInformation/graphql/server/update-app.generated.ts rename web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/BasicInformation/graphql/{client => server}/update-app.graphql (100%) create mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/BasicInformation/server/submit.ts delete mode 100644 web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/PageComponents/AppTopBar/SubmitAppModal/graphql/client/submit-app.generated.ts create mode 100644 web/scenes/Portal/layout/CreateAppDialog/form-schema.ts delete mode 100644 web/scenes/Portal/layout/CreateAppDialog/graphql/client/insert-app.generated.ts create mode 100644 web/scenes/Portal/layout/CreateAppDialog/graphql/server/insert-app.generated.ts rename web/scenes/Portal/layout/CreateAppDialog/graphql/{client => server}/insert-app.gql (100%) create mode 100644 web/scenes/Portal/layout/CreateAppDialog/server/submit.ts diff --git a/hasura/metadata/databases/default/tables/public_app.yaml b/hasura/metadata/databases/default/tables/public_app.yaml index 6dbbc4733..fc7a9aae6 100644 --- a/hasura/metadata/databases/default/tables/public_app.yaml +++ b/hasura/metadata/databases/default/tables/public_app.yaml @@ -40,8 +40,8 @@ insert_permissions: check: {} columns: - engine - - id - is_staging + - name - team_id - role: user permission: @@ -57,12 +57,6 @@ insert_permissions: - role: _eq: ADMIN columns: - - description_internal - - engine - - is_archived - - is_staging - - name - - status - team_id select_permissions: - role: api_key @@ -143,7 +137,6 @@ update_permissions: - role: user permission: columns: - - description_internal - is_archived - status filter: diff --git a/hasura/metadata/databases/default/tables/public_app_metadata.yaml b/hasura/metadata/databases/default/tables/public_app_metadata.yaml index 3c7903c8d..1131211c5 100644 --- a/hasura/metadata/databases/default/tables/public_app_metadata.yaml +++ b/hasura/metadata/databases/default/tables/public_app_metadata.yaml @@ -62,18 +62,19 @@ insert_permissions: permission: check: {} columns: - - app_id - app_mode - app_website_url - associated_domains + - can_import_all_contacts - category - contracts - description - hero_image_url - - id - integration_url + - is_allowed_unlimited_notifications - is_developer_allow_listing - logo_img_url + - max_notifications_per_day - name - permit2_tokens - short_name @@ -86,8 +87,6 @@ insert_permissions: - whitelisted_addresses - world_app_button_text - world_app_description - - is_allowed_unlimited_notifications - - max_notifications_per_day comment: "" - role: user permission: @@ -109,30 +108,11 @@ insert_permissions: columns: - app_id - app_mode - - app_website_url - - associated_domains - - can_import_all_contacts - - category - - contracts - - description - hero_image_url - - integration_url - - is_developer_allow_listing - logo_img_url - - name - - permit2_tokens - - short_name - showcase_img_urls - - source_code_url - - support_link - - supported_countries - supported_languages - verification_status - - whitelisted_addresses - - world_app_button_text - - world_app_description - - is_allowed_unlimited_notifications - - max_notifications_per_day select_permissions: - role: api_key permission: @@ -357,6 +337,45 @@ update_permissions: _in: - changes_requested - verified + - role: service + permission: + columns: + - app_mode + - app_website_url + - associated_domains + - can_import_all_contacts + - category + - contracts + - created_at + - description + - hero_image_url + - integration_url + - is_allowed_unlimited_notifications + - is_developer_allow_listing + - is_reviewer_app_store_approved + - is_reviewer_world_app_approved + - is_row_verified + - logo_img_url + - max_notifications_per_day + - name + - permit2_tokens + - review_message + - reviewed_by + - short_name + - showcase_img_urls + - source_code_url + - support_link + - supported_countries + - supported_languages + - updated_at + - verification_status + - verified_at + - whitelisted_addresses + - world_app_button_text + - world_app_description + filter: {} + check: null + comment: "" - role: user permission: columns: diff --git a/hasura/metadata/databases/default/tables/public_localisations.yaml b/hasura/metadata/databases/default/tables/public_localisations.yaml index 9d52ee9dd..15317d903 100644 --- a/hasura/metadata/databases/default/tables/public_localisations.yaml +++ b/hasura/metadata/databases/default/tables/public_localisations.yaml @@ -98,14 +98,22 @@ select_permissions: _eq: X-Hasura-User-Id comment: "" update_permissions: - - role: user + - role: service permission: columns: + - app_metadata_id - description + - locale - name - short_name - world_app_button_text - world_app_description + filter: {} + check: null + comment: "" + - role: user + permission: + columns: [] filter: app_metadata: _and: diff --git a/web/components/Category/index.tsx b/web/components/Category/index.tsx index 03add2cd2..d35ffcb22 100644 --- a/web/components/Category/index.tsx +++ b/web/components/Category/index.tsx @@ -70,7 +70,9 @@ export const CategorySelector = (props: { return ( Date: Wed, 11 Dec 2024 16:16:09 +0100 Subject: [PATCH 7/8] fix: check permissions in basicinformation form (#1087) * fix: check permissions in basicinformation form * cleanup --- .../TeamId/Apps/AppId/Configuration/AppTopBar/index.tsx | 1 + .../AppId/Configuration/BasicInformation/server/submit.ts | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppTopBar/index.tsx b/web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppTopBar/index.tsx index a1c1c7caf..e653a054b 100644 --- a/web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppTopBar/index.tsx +++ b/web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/AppTopBar/index.tsx @@ -79,6 +79,7 @@ export const AppTopBar = (props: AppTopBarProps) => { ); try { submitAppForReviewSchema.validateSync({ ...appMetadata, ...description }); + return true; } catch (error) { return false; } diff --git a/web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/BasicInformation/server/submit.ts b/web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/BasicInformation/server/submit.ts index 30bed0738..a66b4b7fe 100644 --- a/web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/BasicInformation/server/submit.ts +++ b/web/scenes/Portal/Teams/TeamId/Apps/AppId/Configuration/BasicInformation/server/submit.ts @@ -2,6 +2,7 @@ import { getAPIServiceGraphqlClient } from "@/api/helpers/graphql"; import { validateRequestSchema } from "@/api/helpers/validate-request-schema"; +import { getIsUserAllowedToUpdateAppMetadata } from "@/lib/permissions"; import { schema } from "../form-schema"; import { getSdk as getUpdateAppSdk, @@ -13,6 +14,12 @@ export async function validateAndSubmitServerSide( input: UpdateAppInfoMutationVariables["input"], ) { try { + const isUserAllowedToUpdateAppMetadata = + await getIsUserAllowedToUpdateAppMetadata(app_metadata_id); + if (!isUserAllowedToUpdateAppMetadata) { + throw new Error("Invalid permissions"); + } + const { isValid, parsedParams: parsedInput } = await validateRequestSchema({ schema, value: input, From b7d09a4fbbf330951888d50fe457f9baa3715082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Struck?= <98230431+michalstruck@users.noreply.github.com> Date: Thu, 12 Dec 2024 12:46:37 +0100 Subject: [PATCH 8/8] fix: allow service to insert app_id on metadata (#1088) --- .../metadata/databases/default/tables/public_app_metadata.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/hasura/metadata/databases/default/tables/public_app_metadata.yaml b/hasura/metadata/databases/default/tables/public_app_metadata.yaml index 1131211c5..c5296cf4a 100644 --- a/hasura/metadata/databases/default/tables/public_app_metadata.yaml +++ b/hasura/metadata/databases/default/tables/public_app_metadata.yaml @@ -62,6 +62,7 @@ insert_permissions: permission: check: {} columns: + - app_id - app_mode - app_website_url - associated_domains