blob: 0bef0511f61ced986dd1c68c24c1a90701b9713d [file] [log] [blame]
// This is a generated file (see the discoveryapis_generator project).
// ignore_for_file: camel_case_types
// ignore_for_file: comment_references
// ignore_for_file: lines_longer_than_80_chars
// ignore_for_file: non_constant_identifier_names
// ignore_for_file: prefer_interpolation_to_compose_strings
// ignore_for_file: unnecessary_brace_in_string_interps
// ignore_for_file: unnecessary_lambdas
// ignore_for_file: unnecessary_string_interpolations
/// Retail API - v2
///
/// Cloud Retail service enables customers to build end-to-end personalized
/// recommendation systems without requiring a high level of expertise in
/// machine learning, recommendation system, or Google Cloud.
///
/// For more information, see <https://cloud.google.com/recommendations>
///
/// Create an instance of [CloudRetailApi] to access these resources:
///
/// - [ProjectsResource]
/// - [ProjectsLocationsResource]
/// - [ProjectsLocationsCatalogsResource]
/// - [ProjectsLocationsCatalogsAttributesConfigResource]
/// - [ProjectsLocationsCatalogsBranchesResource]
/// - [ProjectsLocationsCatalogsBranchesOperationsResource]
/// - [ProjectsLocationsCatalogsBranchesProductsResource]
/// - [ProjectsLocationsCatalogsCompletionDataResource]
/// - [ProjectsLocationsCatalogsControlsResource]
/// - [ProjectsLocationsCatalogsModelsResource]
/// - [ProjectsLocationsCatalogsOperationsResource]
/// - [ProjectsLocationsCatalogsPlacementsResource]
/// - [ProjectsLocationsCatalogsServingConfigsResource]
/// - [ProjectsLocationsCatalogsUserEventsResource]
/// - [ProjectsLocationsOperationsResource]
/// - [ProjectsOperationsResource]
library;
import 'dart:async' as async;
import 'dart:convert' as convert;
import 'dart:core' as core;
import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
import 'package:http/http.dart' as http;
// ignore: deprecated_member_use_from_same_package
import '../shared.dart';
import '../src/user_agent.dart';
export 'package:_discoveryapis_commons/_discoveryapis_commons.dart'
show ApiRequestError, DetailedApiRequestError;
/// Cloud Retail service enables customers to build end-to-end personalized
/// recommendation systems without requiring a high level of expertise in
/// machine learning, recommendation system, or Google Cloud.
class CloudRetailApi {
/// See, edit, configure, and delete your Google Cloud data and see the email
/// address for your Google Account.
static const cloudPlatformScope =
'https://www.googleapis.com/auth/cloud-platform';
final commons.ApiRequester _requester;
ProjectsResource get projects => ProjectsResource(_requester);
CloudRetailApi(http.Client client,
{core.String rootUrl = 'https://retail.googleapis.com/',
core.String servicePath = ''})
: _requester =
commons.ApiRequester(client, rootUrl, servicePath, requestHeaders);
}
class ProjectsResource {
final commons.ApiRequester _requester;
ProjectsLocationsResource get locations =>
ProjectsLocationsResource(_requester);
ProjectsOperationsResource get operations =>
ProjectsOperationsResource(_requester);
ProjectsResource(commons.ApiRequester client) : _requester = client;
}
class ProjectsLocationsResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsResource get catalogs =>
ProjectsLocationsCatalogsResource(_requester);
ProjectsLocationsOperationsResource get operations =>
ProjectsLocationsOperationsResource(_requester);
ProjectsLocationsResource(commons.ApiRequester client) : _requester = client;
}
class ProjectsLocationsCatalogsResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsAttributesConfigResource get attributesConfig =>
ProjectsLocationsCatalogsAttributesConfigResource(_requester);
ProjectsLocationsCatalogsBranchesResource get branches =>
ProjectsLocationsCatalogsBranchesResource(_requester);
ProjectsLocationsCatalogsCompletionDataResource get completionData =>
ProjectsLocationsCatalogsCompletionDataResource(_requester);
ProjectsLocationsCatalogsControlsResource get controls =>
ProjectsLocationsCatalogsControlsResource(_requester);
ProjectsLocationsCatalogsModelsResource get models =>
ProjectsLocationsCatalogsModelsResource(_requester);
ProjectsLocationsCatalogsOperationsResource get operations =>
ProjectsLocationsCatalogsOperationsResource(_requester);
ProjectsLocationsCatalogsPlacementsResource get placements =>
ProjectsLocationsCatalogsPlacementsResource(_requester);
ProjectsLocationsCatalogsServingConfigsResource get servingConfigs =>
ProjectsLocationsCatalogsServingConfigsResource(_requester);
ProjectsLocationsCatalogsUserEventsResource get userEvents =>
ProjectsLocationsCatalogsUserEventsResource(_requester);
ProjectsLocationsCatalogsResource(commons.ApiRequester client)
: _requester = client;
/// Completes the specified prefix with keyword suggestions.
///
/// This feature is only available for users who have Retail Search enabled.
/// Enable Retail Search on Cloud Console before using this feature.
///
/// Request parameters:
///
/// [catalog] - Required. Catalog for which the completion is performed. Full
/// resource name of catalog, such as `projects / *
/// /locations/global/catalogs/default_catalog`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [dataset] - Determines which dataset to use for fetching completion.
/// "user-data" will use the imported dataset through
/// CompletionService.ImportCompletionData. "cloud-retail" will use the
/// dataset generated by cloud retail based on user events. If leave empty, it
/// will use the "user-data". Current supported values: * user-data *
/// cloud-retail: This option requires enabling auto-learning function first.
/// See
/// [guidelines](https://cloud.google.com/retail/docs/completion-overview#generated-completion-dataset).
///
/// [deviceType] - The device type context for completion suggestions. We
/// recommend that you leave this field empty. It can apply different
/// suggestions on different device types, e.g. `DESKTOP`, `MOBILE`. If it is
/// empty, the suggestions are across all device types. Supported formats: *
/// `UNKNOWN_DEVICE_TYPE` * `DESKTOP` * `MOBILE` * A customized string starts
/// with `OTHER_`, e.g. `OTHER_IPHONE`.
///
/// [entity] - The entity for customers that may run multiple different
/// entities, domains, sites or regions, for example, "Google US", "Google
/// Ads", "Waymo", "google.com", "youtube.com", etc. If this is set, it should
/// be exactly matched with UserEvent.entity to get per-entity autocomplete
/// results.
///
/// [languageCodes] - Note that this field applies for `user-data` dataset
/// only. For requests with `cloud-retail` dataset, setting this field has no
/// effect. The language filters applied to the output suggestions. If set, it
/// should contain the language of the query. If not set, suggestions are
/// returned without considering language restrictions. This is the BCP-47
/// language code, such as "en-US" or "sr-Latn". For more information, see
/// [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47). The
/// maximum number of language codes is 3.
///
/// [maxSuggestions] - Completion max suggestions. If left unset or set to 0,
/// then will fallback to the configured value
/// CompletionConfig.max_suggestions. The maximum allowed max suggestions is
/// 20. If it is set higher, it will be capped by 20.
///
/// [query] - Required. The query used to generate suggestions. The maximum
/// number of allowed characters is 255.
///
/// [visitorId] - Required field. A unique identifier for tracking visitors.
/// For example, this could be implemented with an HTTP cookie, which should
/// be able to uniquely identify a visitor on a single device. This unique
/// identifier should not change if the visitor logs in or out of the website.
/// The field must be a UTF-8 encoded string with a length limit of 128
/// characters. Otherwise, an INVALID_ARGUMENT error is returned.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2CompleteQueryResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2CompleteQueryResponse> completeQuery(
core.String catalog, {
core.String? dataset,
core.String? deviceType,
core.String? entity,
core.List<core.String>? languageCodes,
core.int? maxSuggestions,
core.String? query,
core.String? visitorId,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if (dataset != null) 'dataset': [dataset],
if (deviceType != null) 'deviceType': [deviceType],
if (entity != null) 'entity': [entity],
if (languageCodes != null) 'languageCodes': languageCodes,
if (maxSuggestions != null) 'maxSuggestions': ['${maxSuggestions}'],
if (query != null) 'query': [query],
if (visitorId != null) 'visitorId': [visitorId],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$catalog') + ':completeQuery';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2CompleteQueryResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Gets an AttributesConfig.
///
/// Request parameters:
///
/// [name] - Required. Full AttributesConfig resource name. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/attributesConfig`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/attributesConfig$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2AttributesConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2AttributesConfig> getAttributesConfig(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2AttributesConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Gets a CompletionConfig.
///
/// Request parameters:
///
/// [name] - Required. Full CompletionConfig resource name. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/completionConfig`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/completionConfig$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2CompletionConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2CompletionConfig> getCompletionConfig(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2CompletionConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Get which branch is currently default branch set by
/// CatalogService.SetDefaultBranch method under a specified parent catalog.
///
/// Request parameters:
///
/// [catalog] - The parent catalog resource name, such as `projects / *
/// /locations/global/catalogs/default_catalog`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2GetDefaultBranchResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2GetDefaultBranchResponse> getDefaultBranch(
core.String catalog, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$catalog') + ':getDefaultBranch';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2GetDefaultBranchResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Lists all the Catalogs associated with the project.
///
/// Request parameters:
///
/// [parent] - Required. The account resource name with an associated
/// location. If the caller does not have permission to list Catalogs under
/// this location, regardless of whether or not this location exists, a
/// PERMISSION_DENIED error is returned.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [pageSize] - Maximum number of Catalogs to return. If unspecified,
/// defaults to 50. The maximum allowed value is 1000. Values above 1000 will
/// be coerced to 1000. If this field is negative, an INVALID_ARGUMENT is
/// returned.
///
/// [pageToken] - A page token ListCatalogsResponse.next_page_token, received
/// from a previous CatalogService.ListCatalogs call. Provide this to retrieve
/// the subsequent page. When paginating, all other parameters provided to
/// CatalogService.ListCatalogs must match the call that provided the page
/// token. Otherwise, an INVALID_ARGUMENT error is returned.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2ListCatalogsResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2ListCatalogsResponse> list(
core.String parent, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/catalogs';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2ListCatalogsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Updates the Catalogs.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. Immutable. The fully qualified resource name of the
/// catalog.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [updateMask] - Indicates which fields in the provided Catalog to update.
/// If an unsupported or unknown field is provided, an INVALID_ARGUMENT error
/// is returned.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Catalog].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Catalog> patch(
GoogleCloudRetailV2Catalog request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (updateMask != null) 'updateMask': [updateMask],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2Catalog.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Set a specified branch id as default branch.
///
/// API methods such as SearchService.Search, ProductService.GetProduct,
/// ProductService.ListProducts will treat requests using "default_branch" to
/// the actual branch id set as default. For example, if `projects / *
/// /locations / * /catalogs / * /branches/1` is set as default, setting
/// SearchRequest.branch to `projects / * /locations / * /catalogs / *
/// /branches/default_branch` is equivalent to setting SearchRequest.branch to
/// `projects / * /locations / * /catalogs / * /branches/1`. Using multiple
/// branches can be useful when developers would like to have a staging branch
/// to test and verify for future usage. When it becomes ready, developers
/// switch on the staging branch using this API while keeping using `projects
/// / * /locations / * /catalogs / * /branches/default_branch` as
/// SearchRequest.branch to route the traffic to this staging branch. CAUTION:
/// If you have live predict/search traffic, switching the default branch
/// could potentially cause outages if the ID space of the new branch is very
/// different from the old one. More specifically: * PredictionService will
/// only return product IDs from branch {newBranch}. * SearchService will only
/// return product IDs from branch {newBranch} (if branch is not explicitly
/// set). * UserEventService will only join events with products from branch
/// {newBranch}.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [catalog] - Full resource name of the catalog, such as `projects / *
/// /locations/global/catalogs/default_catalog`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleProtobufEmpty> setDefaultBranch(
GoogleCloudRetailV2SetDefaultBranchRequest request,
core.String catalog, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$catalog') + ':setDefaultBranch';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Updates the AttributesConfig.
///
/// The catalog attributes in the request will be updated in the catalog, or
/// inserted if they do not exist. Existing catalog attributes not included in
/// the request will remain unchanged. Attributes that are assigned to
/// products, but do not exist at the catalog level, are always included in
/// the response. The product attribute is assigned default values for missing
/// catalog attribute fields, e.g., searchable and dynamic facetable options.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. Immutable. The fully qualified resource name of the
/// attribute config. Format: `projects / * /locations / * /catalogs / *
/// /attributesConfig`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/attributesConfig$`.
///
/// [updateMask] - Indicates which fields in the provided AttributesConfig to
/// update. The following is the only supported field: *
/// AttributesConfig.catalog_attributes If not set, all supported fields are
/// updated.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2AttributesConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2AttributesConfig> updateAttributesConfig(
GoogleCloudRetailV2AttributesConfig request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (updateMask != null) 'updateMask': [updateMask],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2AttributesConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Updates the CompletionConfigs.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. Immutable. Fully qualified name `projects / *
/// /locations / * /catalogs / * /completionConfig`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/completionConfig$`.
///
/// [updateMask] - Indicates which fields in the provided CompletionConfig to
/// update. The following are the only supported fields: *
/// CompletionConfig.matching_order * CompletionConfig.max_suggestions *
/// CompletionConfig.min_prefix_length * CompletionConfig.auto_learning If not
/// set, all supported fields are updated.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2CompletionConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2CompletionConfig> updateCompletionConfig(
GoogleCloudRetailV2CompletionConfig request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (updateMask != null) 'updateMask': [updateMask],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2CompletionConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsCatalogsAttributesConfigResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsAttributesConfigResource(commons.ApiRequester client)
: _requester = client;
/// Adds the specified CatalogAttribute to the AttributesConfig.
///
/// If the CatalogAttribute to add already exists, an ALREADY_EXISTS error is
/// returned.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [attributesConfig] - Required. Full AttributesConfig resource name.
/// Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/attributesConfig`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/attributesConfig$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2AttributesConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2AttributesConfig> addCatalogAttribute(
GoogleCloudRetailV2AddCatalogAttributeRequest request,
core.String attributesConfig, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' +
core.Uri.encodeFull('$attributesConfig') +
':addCatalogAttribute';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2AttributesConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Removes the specified CatalogAttribute from the AttributesConfig.
///
/// If the CatalogAttribute to remove does not exist, a NOT_FOUND error is
/// returned.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [attributesConfig] - Required. Full AttributesConfig resource name.
/// Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/attributesConfig`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/attributesConfig$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2AttributesConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2AttributesConfig> removeCatalogAttribute(
GoogleCloudRetailV2RemoveCatalogAttributeRequest request,
core.String attributesConfig, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' +
core.Uri.encodeFull('$attributesConfig') +
':removeCatalogAttribute';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2AttributesConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Replaces the specified CatalogAttribute in the AttributesConfig by
/// updating the catalog attribute with the same CatalogAttribute.key.
///
/// If the CatalogAttribute to replace does not exist, a NOT_FOUND error is
/// returned.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [attributesConfig] - Required. Full AttributesConfig resource name.
/// Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/attributesConfig`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/attributesConfig$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2AttributesConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2AttributesConfig> replaceCatalogAttribute(
GoogleCloudRetailV2ReplaceCatalogAttributeRequest request,
core.String attributesConfig, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' +
core.Uri.encodeFull('$attributesConfig') +
':replaceCatalogAttribute';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2AttributesConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsCatalogsBranchesResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsBranchesOperationsResource get operations =>
ProjectsLocationsCatalogsBranchesOperationsResource(_requester);
ProjectsLocationsCatalogsBranchesProductsResource get products =>
ProjectsLocationsCatalogsBranchesProductsResource(_requester);
ProjectsLocationsCatalogsBranchesResource(commons.ApiRequester client)
: _requester = client;
}
class ProjectsLocationsCatalogsBranchesOperationsResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsBranchesOperationsResource(
commons.ApiRequester client)
: _requester = client;
/// Gets the latest state of a long-running operation.
///
/// Clients can use this method to poll the operation result at intervals as
/// recommended by the API service.
///
/// Request parameters:
///
/// [name] - The name of the operation resource.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+/operations/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsCatalogsBranchesProductsResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsBranchesProductsResource(commons.ApiRequester client)
: _requester = client;
/// It is recommended to use the ProductService.AddLocalInventories method
/// instead of ProductService.AddFulfillmentPlaces.
///
/// ProductService.AddLocalInventories achieves the same results but provides
/// more fine-grained control over ingesting local inventory data.
/// Incrementally adds place IDs to Product.fulfillment_info.place_ids. This
/// process is asynchronous and does not require the Product to exist before
/// updating fulfillment information. If the request is valid, the update will
/// be enqueued and processed downstream. As a consequence, when a response is
/// returned, the added place IDs are not immediately manifested in the
/// Product queried by ProductService.GetProduct or
/// ProductService.ListProducts. The returned Operations will be obsolete
/// after 1 day, and GetOperation API will return NOT_FOUND afterwards. If
/// conflicting updates are issued, the Operations associated with the stale
/// updates will not be marked as done until being obsolete.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [product] - Required. Full resource name of Product, such as `projects / *
/// /locations/global/catalogs/default_catalog/branches/default_branch/products/some_product_id`.
/// If the caller does not have permission to access the Product, regardless
/// of whether or not it exists, a PERMISSION_DENIED error is returned.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+/products/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> addFulfillmentPlaces(
GoogleCloudRetailV2AddFulfillmentPlacesRequest request,
core.String product, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ =
'v2/' + core.Uri.encodeFull('$product') + ':addFulfillmentPlaces';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Updates local inventory information for a Product at a list of places,
/// while respecting the last update timestamps of each inventory field.
///
/// This process is asynchronous and does not require the Product to exist
/// before updating inventory information. If the request is valid, the update
/// will be enqueued and processed downstream. As a consequence, when a
/// response is returned, updates are not immediately manifested in the
/// Product queried by ProductService.GetProduct or
/// ProductService.ListProducts. Local inventory information can only be
/// modified using this method. ProductService.CreateProduct and
/// ProductService.UpdateProduct has no effect on local inventories. The
/// returned Operations will be obsolete after 1 day, and GetOperation API
/// will return NOT_FOUND afterwards. If conflicting updates are issued, the
/// Operations associated with the stale updates will not be marked as done
/// until being obsolete.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [product] - Required. Full resource name of Product, such as `projects / *
/// /locations/global/catalogs/default_catalog/branches/default_branch/products/some_product_id`.
/// If the caller does not have permission to access the Product, regardless
/// of whether or not it exists, a PERMISSION_DENIED error is returned.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+/products/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> addLocalInventories(
GoogleCloudRetailV2AddLocalInventoriesRequest request,
core.String product, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ =
'v2/' + core.Uri.encodeFull('$product') + ':addLocalInventories';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Creates a Product.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The parent catalog resource name, such as `projects /
/// * /locations/global/catalogs/default_catalog/branches/default_branch`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+$`.
///
/// [productId] - Required. The ID to use for the Product, which will become
/// the final component of the Product.name. If the caller does not have
/// permission to create the Product, regardless of whether or not it exists,
/// a PERMISSION_DENIED error is returned. This field must be unique among all
/// Products with the same parent. Otherwise, an ALREADY_EXISTS error is
/// returned. This field must be a UTF-8 encoded string with a length limit of
/// 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Product].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Product> create(
GoogleCloudRetailV2Product request,
core.String parent, {
core.String? productId,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (productId != null) 'productId': [productId],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/products';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2Product.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Deletes a Product.
///
/// Request parameters:
///
/// [name] - Required. Full resource name of Product, such as `projects / *
/// /locations/global/catalogs/default_catalog/branches/default_branch/products/some_product_id`.
/// If the caller does not have permission to delete the Product, regardless
/// of whether or not it exists, a PERMISSION_DENIED error is returned. If the
/// Product to delete does not exist, a NOT_FOUND error is returned. The
/// Product to delete can neither be a Product.Type.COLLECTION Product member
/// nor a Product.Type.PRIMARY Product with more than one variants. Otherwise,
/// an INVALID_ARGUMENT error is returned. All inventory information for the
/// named Product will be deleted.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+/products/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleProtobufEmpty> delete(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'DELETE',
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Gets a Product.
///
/// Request parameters:
///
/// [name] - Required. Full resource name of Product, such as `projects / *
/// /locations/global/catalogs/default_catalog/branches/default_branch/products/some_product_id`.
/// If the caller does not have permission to access the Product, regardless
/// of whether or not it exists, a PERMISSION_DENIED error is returned. If the
/// requested Product does not exist, a NOT_FOUND error is returned.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+/products/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Product].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Product> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2Product.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Bulk import of multiple Products.
///
/// Request processing may be synchronous. Non-existing items are created.
/// Note that it is possible for a subset of the Products to be successfully
/// updated.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required.
/// `projects/1234/locations/global/catalogs/default_catalog/branches/default_branch`
/// If no updateMask is specified, requires products.create permission. If
/// updateMask is specified, requires products.update permission.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> import(
GoogleCloudRetailV2ImportProductsRequest request,
core.String parent, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/products:import';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Gets a list of Products.
///
/// Request parameters:
///
/// [parent] - Required. The parent branch resource name, such as `projects /
/// * /locations/global/catalogs/default_catalog/branches/0`. Use
/// `default_branch` as the branch ID, to list products under the default
/// branch. If the caller does not have permission to list Products under this
/// branch, regardless of whether or not this branch exists, a
/// PERMISSION_DENIED error is returned.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+$`.
///
/// [filter] - A filter to apply on the list results. Supported features: *
/// List all the products under the parent branch if filter is unset. * List
/// Product.Type.VARIANT Products sharing the same Product.Type.PRIMARY
/// Product. For example: `primary_product_id = "some_product_id"` * List
/// Products bundled in a Product.Type.COLLECTION Product. For example:
/// `collection_product_id = "some_product_id"` * List Products with a
/// partibular type. For example: `type = "PRIMARY"` `type = "VARIANT"` `type
/// = "COLLECTION"` If the field is unrecognizable, an INVALID_ARGUMENT error
/// is returned. If the specified Product.Type.PRIMARY Product or
/// Product.Type.COLLECTION Product does not exist, a NOT_FOUND error is
/// returned.
///
/// [pageSize] - Maximum number of Products to return. If unspecified,
/// defaults to 100. The maximum allowed value is 1000. Values above 1000 will
/// be coerced to 1000. If this field is negative, an INVALID_ARGUMENT error
/// is returned.
///
/// [pageToken] - A page token ListProductsResponse.next_page_token, received
/// from a previous ProductService.ListProducts call. Provide this to retrieve
/// the subsequent page. When paginating, all other parameters provided to
/// ProductService.ListProducts must match the call that provided the page
/// token. Otherwise, an INVALID_ARGUMENT error is returned.
///
/// [readMask] - The fields of Product to return in the responses. If not set
/// or empty, the following fields are returned: * Product.name * Product.id *
/// Product.title * Product.uri * Product.images * Product.price_info *
/// Product.brands If "*" is provided, all fields are returned. Product.name
/// is always returned no matter what mask is set. If an unsupported or
/// unknown field is provided, an INVALID_ARGUMENT error is returned.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2ListProductsResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2ListProductsResponse> list(
core.String parent, {
core.String? filter,
core.int? pageSize,
core.String? pageToken,
core.String? readMask,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if (filter != null) 'filter': [filter],
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if (readMask != null) 'readMask': [readMask],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/products';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2ListProductsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Updates a Product.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Immutable. Full resource name of the product, such as `projects /
/// *
/// /locations/global/catalogs/default_catalog/branches/default_branch/products/product_id`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+/products/.*$`.
///
/// [allowMissing] - If set to true, and the Product is not found, a new
/// Product will be created. In this situation, `update_mask` is ignored.
///
/// [updateMask] - Indicates which fields in the provided Product to update.
/// The immutable and output only fields are NOT supported. If not set, all
/// supported fields (the fields that are neither immutable nor output only)
/// are updated. If an unsupported or unknown field is provided, an
/// INVALID_ARGUMENT error is returned. The attribute key can be updated by
/// setting the mask path as "attributes.${key_name}". If a key name is
/// present in the mask but not in the patching product from the request, this
/// key will be deleted after the update.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Product].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Product> patch(
GoogleCloudRetailV2Product request,
core.String name, {
core.bool? allowMissing,
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (allowMissing != null) 'allowMissing': ['${allowMissing}'],
if (updateMask != null) 'updateMask': [updateMask],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2Product.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// It is recommended to use the ProductService.RemoveLocalInventories method
/// instead of ProductService.RemoveFulfillmentPlaces.
///
/// ProductService.RemoveLocalInventories achieves the same results but
/// provides more fine-grained control over ingesting local inventory data.
/// Incrementally removes place IDs from a Product.fulfillment_info.place_ids.
/// This process is asynchronous and does not require the Product to exist
/// before updating fulfillment information. If the request is valid, the
/// update will be enqueued and processed downstream. As a consequence, when a
/// response is returned, the removed place IDs are not immediately manifested
/// in the Product queried by ProductService.GetProduct or
/// ProductService.ListProducts. The returned Operations will be obsolete
/// after 1 day, and GetOperation API will return NOT_FOUND afterwards. If
/// conflicting updates are issued, the Operations associated with the stale
/// updates will not be marked as done until being obsolete.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [product] - Required. Full resource name of Product, such as `projects / *
/// /locations/global/catalogs/default_catalog/branches/default_branch/products/some_product_id`.
/// If the caller does not have permission to access the Product, regardless
/// of whether or not it exists, a PERMISSION_DENIED error is returned.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+/products/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> removeFulfillmentPlaces(
GoogleCloudRetailV2RemoveFulfillmentPlacesRequest request,
core.String product, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ =
'v2/' + core.Uri.encodeFull('$product') + ':removeFulfillmentPlaces';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Remove local inventory information for a Product at a list of places at a
/// removal timestamp.
///
/// This process is asynchronous. If the request is valid, the removal will be
/// enqueued and processed downstream. As a consequence, when a response is
/// returned, removals are not immediately manifested in the Product queried
/// by ProductService.GetProduct or ProductService.ListProducts. Local
/// inventory information can only be removed using this method.
/// ProductService.CreateProduct and ProductService.UpdateProduct has no
/// effect on local inventories. The returned Operations will be obsolete
/// after 1 day, and GetOperation API will return NOT_FOUND afterwards. If
/// conflicting updates are issued, the Operations associated with the stale
/// updates will not be marked as done until being obsolete.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [product] - Required. Full resource name of Product, such as `projects / *
/// /locations/global/catalogs/default_catalog/branches/default_branch/products/some_product_id`.
/// If the caller does not have permission to access the Product, regardless
/// of whether or not it exists, a PERMISSION_DENIED error is returned.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+/products/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> removeLocalInventories(
GoogleCloudRetailV2RemoveLocalInventoriesRequest request,
core.String product, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ =
'v2/' + core.Uri.encodeFull('$product') + ':removeLocalInventories';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Updates inventory information for a Product while respecting the last
/// update timestamps of each inventory field.
///
/// This process is asynchronous and does not require the Product to exist
/// before updating fulfillment information. If the request is valid, the
/// update is enqueued and processed downstream. As a consequence, when a
/// response is returned, updates are not immediately manifested in the
/// Product queried by ProductService.GetProduct or
/// ProductService.ListProducts. When inventory is updated with
/// ProductService.CreateProduct and ProductService.UpdateProduct, the
/// specified inventory field value(s) overwrite any existing value(s) while
/// ignoring the last update time for this field. Furthermore, the last update
/// times for the specified inventory fields are overwritten by the times of
/// the ProductService.CreateProduct or ProductService.UpdateProduct request.
/// If no inventory fields are set in CreateProductRequest.product, then any
/// pre-existing inventory information for this product is used. If no
/// inventory fields are set in SetInventoryRequest.set_mask, then any
/// existing inventory information is preserved. Pre-existing inventory
/// information can only be updated with ProductService.SetInventory,
/// ProductService.AddFulfillmentPlaces, and
/// ProductService.RemoveFulfillmentPlaces. The returned Operations is
/// obsolete after one day, and the GetOperation API returns `NOT_FOUND`
/// afterwards. If conflicting updates are issued, the Operations associated
/// with the stale updates are not marked as done until they are obsolete.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Immutable. Full resource name of the product, such as `projects /
/// *
/// /locations/global/catalogs/default_catalog/branches/default_branch/products/product_id`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/branches/\[^/\]+/products/.*$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> setInventory(
GoogleCloudRetailV2SetInventoryRequest request,
core.String name, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name') + ':setInventory';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsCatalogsCompletionDataResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsCompletionDataResource(commons.ApiRequester client)
: _requester = client;
/// Bulk import of processed completion dataset.
///
/// Request processing is asynchronous. Partial updating is not supported. The
/// operation is successfully finished only after the imported suggestions are
/// indexed successfully and ready for serving. The process takes hours. This
/// feature is only available for users who have Retail Search enabled. Enable
/// Retail Search on Cloud Console before using this feature.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The catalog which the suggestions dataset belongs to.
/// Format: `projects/1234/locations/global/catalogs/default_catalog`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> import(
GoogleCloudRetailV2ImportCompletionDataRequest request,
core.String parent, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ =
'v2/' + core.Uri.encodeFull('$parent') + '/completionData:import';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsCatalogsControlsResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsControlsResource(commons.ApiRequester client)
: _requester = client;
/// Creates a Control.
///
/// If the Control to create already exists, an ALREADY_EXISTS error is
/// returned.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. Full resource name of parent catalog. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [controlId] - Required. The ID to use for the Control, which will become
/// the final component of the Control's resource name. This value should be
/// 4-63 characters, and valid characters are /a-z-_/.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Control].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Control> create(
GoogleCloudRetailV2Control request,
core.String parent, {
core.String? controlId,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (controlId != null) 'controlId': [controlId],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/controls';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2Control.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Deletes a Control.
///
/// If the Control to delete does not exist, a NOT_FOUND error is returned.
///
/// Request parameters:
///
/// [name] - Required. The resource name of the Control to delete. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/controls/{control_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/controls/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleProtobufEmpty> delete(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'DELETE',
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Gets a Control.
///
/// Request parameters:
///
/// [name] - Required. The resource name of the Control to get. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/controls/{control_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/controls/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Control].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Control> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2Control.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Lists all Controls by their parent Catalog.
///
/// Request parameters:
///
/// [parent] - Required. The catalog resource name. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [filter] - Optional. A filter to apply on the list results. Supported
/// features: * List all the products under the parent branch if filter is
/// unset. * List controls that are used in a single ServingConfig:
/// 'serving_config = "boosted_home_page_cvr"'
///
/// [pageSize] - Optional. Maximum number of results to return. If
/// unspecified, defaults to 50. Max allowed value is 1000.
///
/// [pageToken] - Optional. A page token, received from a previous
/// `ListControls` call. Provide this to retrieve the subsequent page.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2ListControlsResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2ListControlsResponse> list(
core.String parent, {
core.String? filter,
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if (filter != null) 'filter': [filter],
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/controls';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2ListControlsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Updates a Control.
///
/// Control cannot be set to a different oneof field, if so an
/// INVALID_ARGUMENT is returned. If the Control to update does not exist, a
/// NOT_FOUND error is returned.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Immutable. Fully qualified name `projects / *
/// /locations/global/catalogs / * /controls / * `
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/controls/\[^/\]+$`.
///
/// [updateMask] - Indicates which fields in the provided Control to update.
/// The following are NOT supported: * Control.name If not set or empty, all
/// supported fields are updated.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Control].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Control> patch(
GoogleCloudRetailV2Control request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (updateMask != null) 'updateMask': [updateMask],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2Control.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsCatalogsModelsResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsModelsResource(commons.ApiRequester client)
: _requester = client;
/// Creates a new model.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The parent resource under which to create the model.
/// Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [dryRun] - Optional. Whether to run a dry run to validate the request
/// (without actually creating the model).
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> create(
GoogleCloudRetailV2Model request,
core.String parent, {
core.bool? dryRun,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (dryRun != null) 'dryRun': ['${dryRun}'],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/models';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Deletes an existing model.
///
/// Request parameters:
///
/// [name] - Required. The resource name of the Model to delete. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/models/{model_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/models/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleProtobufEmpty> delete(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'DELETE',
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Gets a model.
///
/// Request parameters:
///
/// [name] - Required. The resource name of the Model to get. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog}/models/{model_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/models/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Model].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Model> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2Model.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Lists all the models linked to this event store.
///
/// Request parameters:
///
/// [parent] - Required. The parent for which to list models. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [pageSize] - Optional. Maximum number of results to return. If
/// unspecified, defaults to 50. Max allowed value is 1000.
///
/// [pageToken] - Optional. A page token, received from a previous
/// `ListModels` call. Provide this to retrieve the subsequent page.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2ListModelsResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2ListModelsResponse> list(
core.String parent, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/models';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2ListModelsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Update of model metadata.
///
/// Only fields that currently can be updated are: `filtering_option` and
/// `periodic_tuning_state`. If other values are provided, this API method
/// ignores them.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. The fully qualified resource name of the model. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/models/{model_id}`
/// catalog_id has char limit of 50. recommendation_model_id has char limit of
/// 40.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/models/\[^/\]+$`.
///
/// [updateMask] - Optional. Indicates which fields in the provided 'model' to
/// update. If not set, by default updates all fields.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Model].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Model> patch(
GoogleCloudRetailV2Model request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (updateMask != null) 'updateMask': [updateMask],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2Model.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Pauses the training of an existing model.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. The name of the model to pause. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/models/{model_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/models/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Model].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Model> pause(
GoogleCloudRetailV2PauseModelRequest request,
core.String name, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name') + ':pause';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2Model.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Resumes the training of an existing model.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. The name of the model to resume. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/models/{model_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/models/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2Model].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2Model> resume(
GoogleCloudRetailV2ResumeModelRequest request,
core.String name, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name') + ':resume';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2Model.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Tunes an existing model.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Required. The resource name of the model to tune. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/models/{model_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/models/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> tune(
GoogleCloudRetailV2TuneModelRequest request,
core.String name, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name') + ':tune';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsCatalogsOperationsResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsOperationsResource(commons.ApiRequester client)
: _requester = client;
/// Gets the latest state of a long-running operation.
///
/// Clients can use this method to poll the operation result at intervals as
/// recommended by the API service.
///
/// Request parameters:
///
/// [name] - The name of the operation resource.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/operations/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Lists operations that match the specified filter in the request.
///
/// If the server doesn't support this method, it returns `UNIMPLEMENTED`.
///
/// Request parameters:
///
/// [name] - The name of the operation's parent resource.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [filter] - The standard list filter.
///
/// [pageSize] - The standard list page size.
///
/// [pageToken] - The standard list page token.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningListOperationsResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningListOperationsResponse> list(
core.String name, {
core.String? filter,
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if (filter != null) 'filter': [filter],
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name') + '/operations';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleLongrunningListOperationsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsCatalogsPlacementsResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsPlacementsResource(commons.ApiRequester client)
: _requester = client;
/// Makes a recommendation prediction.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [placement] - Required. Full resource name of the format:
/// `{placement=projects / *
/// /locations/global/catalogs/default_catalog/servingConfigs / * }` or
/// `{placement=projects / *
/// /locations/global/catalogs/default_catalog/placements / * }`. We recommend
/// using the `servingConfigs` resource. `placements` is a legacy resource.
/// The ID of the Recommendations AI serving config or placement. Before you
/// can request predictions from your model, you must create at least one
/// serving config or placement for it. For more information, see
/// [Manage serving configs](https://cloud.google.com/retail/docs/manage-configs).
/// The full list of available serving configs can be seen at
/// https://console.cloud.google.com/ai/retail/catalogs/default_catalog/configs
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/placements/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2PredictResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2PredictResponse> predict(
GoogleCloudRetailV2PredictRequest request,
core.String placement, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$placement') + ':predict';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2PredictResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Performs a search.
///
/// This feature is only available for users who have Retail Search enabled.
/// Enable Retail Search on Cloud Console before using this feature.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [placement] - Required. The resource name of the Retail Search serving
/// config, such as `projects / *
/// /locations/global/catalogs/default_catalog/servingConfigs/default_serving_config`
/// or the name of the legacy placement resource, such as `projects / *
/// /locations/global/catalogs/default_catalog/placements/default_search`.
/// This field is used to identify the serving config name and the set of
/// models that will be used to make the search.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/placements/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2SearchResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2SearchResponse> search(
GoogleCloudRetailV2SearchRequest request,
core.String placement, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$placement') + ':search';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2SearchResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsCatalogsServingConfigsResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsServingConfigsResource(commons.ApiRequester client)
: _requester = client;
/// Enables a Control on the specified ServingConfig.
///
/// The control is added in the last position of the list of controls it
/// belongs to (e.g. if it's a facet spec control it will be applied in the
/// last position of servingConfig.facetSpecIds) Returns a ALREADY_EXISTS
/// error if the control has already been applied. Returns a
/// FAILED_PRECONDITION error if the addition could exceed maximum number of
/// control allowed for that type of control.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [servingConfig] - Required. The source ServingConfig resource name .
/// Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/servingConfigs/{serving_config_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/servingConfigs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2ServingConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2ServingConfig> addControl(
GoogleCloudRetailV2AddControlRequest request,
core.String servingConfig, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$servingConfig') + ':addControl';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2ServingConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Creates a ServingConfig.
///
/// A maximum of 100 ServingConfigs are allowed in a Catalog, otherwise a
/// FAILED_PRECONDITION error is returned.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. Full resource name of parent. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [servingConfigId] - Required. The ID to use for the ServingConfig, which
/// will become the final component of the ServingConfig's resource name. This
/// value should be 4-63 characters, and valid characters are /a-z-_/.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2ServingConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2ServingConfig> create(
GoogleCloudRetailV2ServingConfig request,
core.String parent, {
core.String? servingConfigId,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (servingConfigId != null) 'servingConfigId': [servingConfigId],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/servingConfigs';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2ServingConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Deletes a ServingConfig.
///
/// Returns a NotFound error if the ServingConfig does not exist.
///
/// Request parameters:
///
/// [name] - Required. The resource name of the ServingConfig to delete.
/// Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/servingConfigs/{serving_config_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/servingConfigs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleProtobufEmpty].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleProtobufEmpty> delete(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'DELETE',
queryParams: queryParams_,
);
return GoogleProtobufEmpty.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Gets a ServingConfig.
///
/// Returns a NotFound error if the ServingConfig does not exist.
///
/// Request parameters:
///
/// [name] - Required. The resource name of the ServingConfig to get. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/servingConfigs/{serving_config_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/servingConfigs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2ServingConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2ServingConfig> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2ServingConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Lists all ServingConfigs linked to this catalog.
///
/// Request parameters:
///
/// [parent] - Required. The catalog resource name. Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [pageSize] - Optional. Maximum number of results to return. If
/// unspecified, defaults to 100. If a value greater than 100 is provided, at
/// most 100 results are returned.
///
/// [pageToken] - Optional. A page token, received from a previous
/// `ListServingConfigs` call. Provide this to retrieve the subsequent page.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2ListServingConfigsResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2ListServingConfigsResponse> list(
core.String parent, {
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/servingConfigs';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleCloudRetailV2ListServingConfigsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Updates a ServingConfig.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [name] - Immutable. Fully qualified name `projects / *
/// /locations/global/catalogs / * /servingConfig / * `
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/servingConfigs/\[^/\]+$`.
///
/// [updateMask] - Indicates which fields in the provided ServingConfig to
/// update. The following are NOT supported: * ServingConfig.name If not set,
/// all supported fields are updated.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2ServingConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2ServingConfig> patch(
GoogleCloudRetailV2ServingConfig request,
core.String name, {
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (updateMask != null) 'updateMask': [updateMask],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2ServingConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Makes a recommendation prediction.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [placement] - Required. Full resource name of the format:
/// `{placement=projects / *
/// /locations/global/catalogs/default_catalog/servingConfigs / * }` or
/// `{placement=projects / *
/// /locations/global/catalogs/default_catalog/placements / * }`. We recommend
/// using the `servingConfigs` resource. `placements` is a legacy resource.
/// The ID of the Recommendations AI serving config or placement. Before you
/// can request predictions from your model, you must create at least one
/// serving config or placement for it. For more information, see
/// [Manage serving configs](https://cloud.google.com/retail/docs/manage-configs).
/// The full list of available serving configs can be seen at
/// https://console.cloud.google.com/ai/retail/catalogs/default_catalog/configs
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/servingConfigs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2PredictResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2PredictResponse> predict(
GoogleCloudRetailV2PredictRequest request,
core.String placement, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$placement') + ':predict';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2PredictResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Disables a Control on the specified ServingConfig.
///
/// The control is removed from the ServingConfig. Returns a NOT_FOUND error
/// if the Control is not enabled for the ServingConfig.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [servingConfig] - Required. The source ServingConfig resource name .
/// Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/servingConfigs/{serving_config_id}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/servingConfigs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2ServingConfig].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2ServingConfig> removeControl(
GoogleCloudRetailV2RemoveControlRequest request,
core.String servingConfig, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ =
'v2/' + core.Uri.encodeFull('$servingConfig') + ':removeControl';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2ServingConfig.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Performs a search.
///
/// This feature is only available for users who have Retail Search enabled.
/// Enable Retail Search on Cloud Console before using this feature.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [placement] - Required. The resource name of the Retail Search serving
/// config, such as `projects / *
/// /locations/global/catalogs/default_catalog/servingConfigs/default_serving_config`
/// or the name of the legacy placement resource, such as `projects / *
/// /locations/global/catalogs/default_catalog/placements/default_search`.
/// This field is used to identify the serving config name and the set of
/// models that will be used to make the search.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+/servingConfigs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2SearchResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2SearchResponse> search(
GoogleCloudRetailV2SearchRequest request,
core.String placement, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$placement') + ':search';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2SearchResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsCatalogsUserEventsResource {
final commons.ApiRequester _requester;
ProjectsLocationsCatalogsUserEventsResource(commons.ApiRequester client)
: _requester = client;
/// Writes a single user event from the browser.
///
/// This uses a GET request to due to browser restriction of POST-ing to a 3rd
/// party domain. This method is used only by the Retail API JavaScript pixel
/// and Google Tag Manager. Users should not call this method directly.
///
/// Request parameters:
///
/// [parent] - Required. The parent catalog name, such as
/// `projects/1234/locations/global/catalogs/default_catalog`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [ets] - The event timestamp in milliseconds. This prevents browser caching
/// of otherwise identical get requests. The name is abbreviated to reduce the
/// payload bytes.
///
/// [prebuiltRule] - The prebuilt rule name that can convert a specific type
/// of raw_json. For example: "ga4_bq" rule for the GA4 user event schema.
///
/// [rawJson] - An arbitrary serialized JSON string that contains necessary
/// information that can comprise a user event. When this field is specified,
/// the user_event field will be ignored. Note: line-delimited JSON is not
/// supported, a single JSON only.
///
/// [uri] - The URL including cgi-parameters but excluding the hash fragment
/// with a length limit of 5,000 characters. This is often more useful than
/// the referer URL, because many browsers only send the domain for 3rd party
/// requests.
///
/// [userEvent] - Required. URL encoded UserEvent proto with a length limit of
/// 2,000,000 characters.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleApiHttpBody].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleApiHttpBody> collect(
core.String parent, {
core.String? ets,
core.String? prebuiltRule,
core.String? rawJson,
core.String? uri,
core.String? userEvent,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if (ets != null) 'ets': [ets],
if (prebuiltRule != null) 'prebuiltRule': [prebuiltRule],
if (rawJson != null) 'rawJson': [rawJson],
if (uri != null) 'uri': [uri],
if (userEvent != null) 'userEvent': [userEvent],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/userEvents:collect';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleApiHttpBody.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Bulk import of User events.
///
/// Request processing might be synchronous. Events that already exist are
/// skipped. Use this method for backfilling historical user events.
/// `Operation.response` is of type `ImportResponse`. Note that it is possible
/// for a subset of the items to be successfully inserted.
/// `Operation.metadata` is of type `ImportMetadata`.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required.
/// `projects/1234/locations/global/catalogs/default_catalog`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> import(
GoogleCloudRetailV2ImportUserEventsRequest request,
core.String parent, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/userEvents:import';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Deletes permanently all user events specified by the filter provided.
///
/// Depending on the number of events specified by the filter, this operation
/// could take hours or days to complete. To test a filter, use the list
/// command first.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The resource name of the catalog under which the
/// events are created. The format is
/// `projects/${projectId}/locations/global/catalogs/${catalogId}`
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> purge(
GoogleCloudRetailV2PurgeUserEventsRequest request,
core.String parent, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/userEvents:purge';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Starts a user-event rejoin operation with latest product catalog.
///
/// Events are not annotated with detailed product information for products
/// that are missing from the catalog when the user event is ingested. These
/// events are stored as unjoined events with limited usage on training and
/// serving. You can use this method to start a join operation on specified
/// events with the latest version of product catalog. You can also use this
/// method to correct events joined with the wrong product catalog. A rejoin
/// operation can take hours or days to complete.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The parent catalog resource name, such as
/// `projects/1234/locations/global/catalogs/default_catalog`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> rejoin(
GoogleCloudRetailV2RejoinUserEventsRequest request,
core.String parent, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/userEvents:rejoin';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Writes a single user event.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [parent] - Required. The parent catalog resource name, such as
/// `projects/1234/locations/global/catalogs/default_catalog`.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/catalogs/\[^/\]+$`.
///
/// [writeAsync] - If set to true, the user event will be written
/// asynchronously after validation, and the API will respond without waiting
/// for the write. Therefore, silent failures can occur even if the API
/// returns success. In case of silent failures, error messages can be found
/// in Stackdriver logs.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleCloudRetailV2UserEvent].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleCloudRetailV2UserEvent> write(
GoogleCloudRetailV2UserEvent request,
core.String parent, {
core.bool? writeAsync,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if (writeAsync != null) 'writeAsync': ['${writeAsync}'],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$parent') + '/userEvents:write';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return GoogleCloudRetailV2UserEvent.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsLocationsOperationsResource {
final commons.ApiRequester _requester;
ProjectsLocationsOperationsResource(commons.ApiRequester client)
: _requester = client;
/// Gets the latest state of a long-running operation.
///
/// Clients can use this method to poll the operation result at intervals as
/// recommended by the API service.
///
/// Request parameters:
///
/// [name] - The name of the operation resource.
/// Value must have pattern
/// `^projects/\[^/\]+/locations/\[^/\]+/operations/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Lists operations that match the specified filter in the request.
///
/// If the server doesn't support this method, it returns `UNIMPLEMENTED`.
///
/// Request parameters:
///
/// [name] - The name of the operation's parent resource.
/// Value must have pattern `^projects/\[^/\]+/locations/\[^/\]+$`.
///
/// [filter] - The standard list filter.
///
/// [pageSize] - The standard list page size.
///
/// [pageToken] - The standard list page token.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningListOperationsResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningListOperationsResponse> list(
core.String name, {
core.String? filter,
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if (filter != null) 'filter': [filter],
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name') + '/operations';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleLongrunningListOperationsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
class ProjectsOperationsResource {
final commons.ApiRequester _requester;
ProjectsOperationsResource(commons.ApiRequester client) : _requester = client;
/// Gets the latest state of a long-running operation.
///
/// Clients can use this method to poll the operation result at intervals as
/// recommended by the API service.
///
/// Request parameters:
///
/// [name] - The name of the operation resource.
/// Value must have pattern `^projects/\[^/\]+/operations/\[^/\]+$`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningOperation].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningOperation> get(
core.String name, {
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleLongrunningOperation.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
/// Lists operations that match the specified filter in the request.
///
/// If the server doesn't support this method, it returns `UNIMPLEMENTED`.
///
/// Request parameters:
///
/// [name] - The name of the operation's parent resource.
/// Value must have pattern `^projects/\[^/\]+$`.
///
/// [filter] - The standard list filter.
///
/// [pageSize] - The standard list page size.
///
/// [pageToken] - The standard list page token.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [GoogleLongrunningListOperationsResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<GoogleLongrunningListOperationsResponse> list(
core.String name, {
core.String? filter,
core.int? pageSize,
core.String? pageToken,
core.String? $fields,
}) async {
final queryParams_ = <core.String, core.List<core.String>>{
if (filter != null) 'filter': [filter],
if (pageSize != null) 'pageSize': ['${pageSize}'],
if (pageToken != null) 'pageToken': [pageToken],
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v2/' + core.Uri.encodeFull('$name') + '/operations';
final response_ = await _requester.request(
url_,
'GET',
queryParams: queryParams_,
);
return GoogleLongrunningListOperationsResponse.fromJson(
response_ as core.Map<core.String, core.dynamic>);
}
}
/// Message that represents an arbitrary HTTP body.
///
/// It should only be used for payload formats that can't be represented as
/// JSON, such as raw binary or an HTML page. This message can be used both in
/// streaming and non-streaming API methods in the request as well as the
/// response. It can be used as a top-level request field, which is convenient
/// if one wants to extract parameters from either the URL or HTTP template into
/// the request fields and also want access to the raw HTTP body. Example:
/// message GetResourceRequest { // A unique request id. string request_id = 1;
/// // The raw HTTP body is bound to this field. google.api.HttpBody http_body =
/// 2; } service ResourceService { rpc GetResource(GetResourceRequest) returns
/// (google.api.HttpBody); rpc UpdateResource(google.api.HttpBody) returns
/// (google.protobuf.Empty); } Example with streaming methods: service
/// CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream
/// google.api.HttpBody); rpc UpdateCalendar(stream google.api.HttpBody) returns
/// (stream google.api.HttpBody); } Use of this type only changes how the
/// request and response bodies are handled, all other features will continue to
/// work unchanged.
typedef GoogleApiHttpBody = $HttpBody;
/// Request for CatalogService.AddCatalogAttribute method.
class GoogleCloudRetailV2AddCatalogAttributeRequest {
/// The CatalogAttribute to add.
///
/// Required.
GoogleCloudRetailV2CatalogAttribute? catalogAttribute;
GoogleCloudRetailV2AddCatalogAttributeRequest({
this.catalogAttribute,
});
GoogleCloudRetailV2AddCatalogAttributeRequest.fromJson(core.Map json_)
: this(
catalogAttribute: json_.containsKey('catalogAttribute')
? GoogleCloudRetailV2CatalogAttribute.fromJson(
json_['catalogAttribute']
as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (catalogAttribute != null) 'catalogAttribute': catalogAttribute!,
};
}
/// Request for AddControl method.
class GoogleCloudRetailV2AddControlRequest {
/// The id of the control to apply.
///
/// Assumed to be in the same catalog as the serving config - if id is not
/// found a NOT_FOUND error is returned.
///
/// Required.
core.String? controlId;
GoogleCloudRetailV2AddControlRequest({
this.controlId,
});
GoogleCloudRetailV2AddControlRequest.fromJson(core.Map json_)
: this(
controlId: json_.containsKey('controlId')
? json_['controlId'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (controlId != null) 'controlId': controlId!,
};
}
/// Request message for ProductService.AddFulfillmentPlaces method.
class GoogleCloudRetailV2AddFulfillmentPlacesRequest {
/// The time when the fulfillment updates are issued, used to prevent
/// out-of-order updates on fulfillment information.
///
/// If not provided, the internal system time will be used.
core.String? addTime;
/// If set to true, and the Product is not found, the fulfillment information
/// will still be processed and retained for at most 1 day and processed once
/// the Product is created.
///
/// If set to false, a NOT_FOUND error is returned if the Product is not
/// found.
core.bool? allowMissing;
/// The IDs for this type, such as the store IDs for "pickup-in-store" or the
/// region IDs for "same-day-delivery" to be added for this type.
///
/// Duplicate IDs will be automatically ignored. At least 1 value is required,
/// and a maximum of 2000 values are allowed. Each value must be a string with
/// a length limit of 10 characters, matching the pattern `[a-zA-Z0-9_-]+`,
/// such as "store1" or "REGION-2". Otherwise, an INVALID_ARGUMENT error is
/// returned. If the total number of place IDs exceeds 2000 for this type
/// after adding, then the update will be rejected.
///
/// Required.
core.List<core.String>? placeIds;
/// The fulfillment type, including commonly used types (such as pickup in
/// store and same day delivery), and custom types.
///
/// Supported values: * "pickup-in-store" * "ship-to-store" *
/// "same-day-delivery" * "next-day-delivery" * "custom-type-1" *
/// "custom-type-2" * "custom-type-3" * "custom-type-4" * "custom-type-5" If
/// this field is set to an invalid value other than these, an
/// INVALID_ARGUMENT error is returned. This field directly corresponds to
/// Product.fulfillment_info.type.
///
/// Required.
core.String? type;
GoogleCloudRetailV2AddFulfillmentPlacesRequest({
this.addTime,
this.allowMissing,
this.placeIds,
this.type,
});
GoogleCloudRetailV2AddFulfillmentPlacesRequest.fromJson(core.Map json_)
: this(
addTime: json_.containsKey('addTime')
? json_['addTime'] as core.String
: null,
allowMissing: json_.containsKey('allowMissing')
? json_['allowMissing'] as core.bool
: null,
placeIds: json_.containsKey('placeIds')
? (json_['placeIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
type: json_.containsKey('type') ? json_['type'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (addTime != null) 'addTime': addTime!,
if (allowMissing != null) 'allowMissing': allowMissing!,
if (placeIds != null) 'placeIds': placeIds!,
if (type != null) 'type': type!,
};
}
/// Request message for ProductService.AddLocalInventories method.
class GoogleCloudRetailV2AddLocalInventoriesRequest {
/// Indicates which inventory fields in the provided list of LocalInventory to
/// update.
///
/// The field is updated to the provided value. If a field is set while the
/// place does not have a previous local inventory, the local inventory at
/// that store is created. If a field is set while the value of that field is
/// not provided, the original field value, if it exists, is deleted. If the
/// mask is not set or set with empty paths, all inventory fields will be
/// updated. If an unsupported or unknown field is provided, an
/// INVALID_ARGUMENT error is returned and the entire update will be ignored.
core.String? addMask;
/// The time when the inventory updates are issued.
///
/// Used to prevent out-of-order updates on local inventory fields. If not
/// provided, the internal system time will be used.
core.String? addTime;
/// If set to true, and the Product is not found, the local inventory will
/// still be processed and retained for at most 1 day and processed once the
/// Product is created.
///
/// If set to false, a NOT_FOUND error is returned if the Product is not
/// found.
core.bool? allowMissing;
/// A list of inventory information at difference places.
///
/// Each place is identified by its place ID. At most 3000 inventories are
/// allowed per request.
///
/// Required.
core.List<GoogleCloudRetailV2LocalInventory>? localInventories;
GoogleCloudRetailV2AddLocalInventoriesRequest({
this.addMask,
this.addTime,
this.allowMissing,
this.localInventories,
});
GoogleCloudRetailV2AddLocalInventoriesRequest.fromJson(core.Map json_)
: this(
addMask: json_.containsKey('addMask')
? json_['addMask'] as core.String
: null,
addTime: json_.containsKey('addTime')
? json_['addTime'] as core.String
: null,
allowMissing: json_.containsKey('allowMissing')
? json_['allowMissing'] as core.bool
: null,
localInventories: json_.containsKey('localInventories')
? (json_['localInventories'] as core.List)
.map((value) => GoogleCloudRetailV2LocalInventory.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (addMask != null) 'addMask': addMask!,
if (addTime != null) 'addTime': addTime!,
if (allowMissing != null) 'allowMissing': allowMissing!,
if (localInventories != null) 'localInventories': localInventories!,
};
}
/// Catalog level attribute config.
class GoogleCloudRetailV2AttributesConfig {
/// The AttributeConfigLevel used for this catalog.
///
/// Output only.
/// Possible string values are:
/// - "ATTRIBUTE_CONFIG_LEVEL_UNSPECIFIED" : Value used when unset. In this
/// case, server behavior defaults to CATALOG_LEVEL_ATTRIBUTE_CONFIG.
/// - "PRODUCT_LEVEL_ATTRIBUTE_CONFIG" : At this level, we honor the attribute
/// configurations set in Product.attributes.
/// - "CATALOG_LEVEL_ATTRIBUTE_CONFIG" : At this level, we honor the attribute
/// configurations set in CatalogConfig.attribute_configs.
core.String? attributeConfigLevel;
/// Enable attribute(s) config at catalog level.
///
/// For example, indexable, dynamic_facetable, or searchable for each
/// attribute. The key is catalog attribute's name. For example: `color`,
/// `brands`, `attributes.custom_attribute`, such as `attributes.xyz`. The
/// maximum number of catalog attributes allowed in a request is 1000.
core.Map<core.String, GoogleCloudRetailV2CatalogAttribute>? catalogAttributes;
/// The fully qualified resource name of the attribute config.
///
/// Format: `projects / * /locations / * /catalogs / * /attributesConfig`
///
/// Required. Immutable.
core.String? name;
GoogleCloudRetailV2AttributesConfig({
this.attributeConfigLevel,
this.catalogAttributes,
this.name,
});
GoogleCloudRetailV2AttributesConfig.fromJson(core.Map json_)
: this(
attributeConfigLevel: json_.containsKey('attributeConfigLevel')
? json_['attributeConfigLevel'] as core.String
: null,
catalogAttributes: json_.containsKey('catalogAttributes')
? (json_['catalogAttributes']
as core.Map<core.String, core.dynamic>)
.map(
(key, value) => core.MapEntry(
key,
GoogleCloudRetailV2CatalogAttribute.fromJson(
value as core.Map<core.String, core.dynamic>),
),
)
: null,
name: json_.containsKey('name') ? json_['name'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (attributeConfigLevel != null)
'attributeConfigLevel': attributeConfigLevel!,
if (catalogAttributes != null) 'catalogAttributes': catalogAttributes!,
if (name != null) 'name': name!,
};
}
/// An intended audience of the Product for whom it's sold.
class GoogleCloudRetailV2Audience {
/// The age groups of the audience.
///
/// Strongly encouraged to use the standard values: "newborn" (up to 3 months
/// old), "infant" (3–12 months old), "toddler" (1–5 years old), "kids" (5–13
/// years old), "adult" (typically teens or older). At most 5 values are
/// allowed. Each value must be a UTF-8 encoded string with a length limit of
/// 128 characters. Otherwise, an INVALID_ARGUMENT error is returned. Google
/// Merchant Center property
/// [age_group](https://support.google.com/merchants/answer/6324463).
/// Schema.org property
/// [Product.audience.suggestedMinAge](https://schema.org/suggestedMinAge) and
/// [Product.audience.suggestedMaxAge](https://schema.org/suggestedMaxAge).
core.List<core.String>? ageGroups;
/// The genders of the audience.
///
/// Strongly encouraged to use the standard values: "male", "female",
/// "unisex". At most 5 values are allowed. Each value must be a UTF-8 encoded
/// string with a length limit of 128 characters. Otherwise, an
/// INVALID_ARGUMENT error is returned. Google Merchant Center property
/// [gender](https://support.google.com/merchants/answer/6324479). Schema.org
/// property
/// [Product.audience.suggestedGender](https://schema.org/suggestedGender).
core.List<core.String>? genders;
GoogleCloudRetailV2Audience({
this.ageGroups,
this.genders,
});
GoogleCloudRetailV2Audience.fromJson(core.Map json_)
: this(
ageGroups: json_.containsKey('ageGroups')
? (json_['ageGroups'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
genders: json_.containsKey('genders')
? (json_['genders'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (ageGroups != null) 'ageGroups': ageGroups!,
if (genders != null) 'genders': genders!,
};
}
/// BigQuery source import data from.
class GoogleCloudRetailV2BigQuerySource {
/// The schema to use when parsing the data from the source.
///
/// Supported values for product imports: * `product` (default): One JSON
/// Product per line. Each product must have a valid Product.id. *
/// `product_merchant_center`: See
/// [Importing catalog data from Merchant Center](https://cloud.google.com/retail/recommendations-ai/docs/upload-catalog#mc).
/// Supported values for user events imports: * `user_event` (default): One
/// JSON UserEvent per line. * `user_event_ga360`: The schema is available
/// here: https://support.google.com/analytics/answer/3437719. *
/// `user_event_ga4`: The schema is available here:
/// https://support.google.com/analytics/answer/7029846. Supported values for
/// autocomplete imports: * `suggestions` (default): One JSON completion
/// suggestion per line. * `denylist`: One JSON deny suggestion per line. *
/// `allowlist`: One JSON allow suggestion per line.
core.String? dataSchema;
/// The BigQuery data set to copy the data from with a length limit of 1,024
/// characters.
///
/// Required.
core.String? datasetId;
/// Intermediate Cloud Storage directory used for the import with a length
/// limit of 2,000 characters.
///
/// Can be specified if one wants to have the BigQuery export to a specific
/// Cloud Storage directory.
core.String? gcsStagingDir;
/// BigQuery time partitioned table's _PARTITIONDATE in YYYY-MM-DD format.
///
/// Only supported in ImportProductsRequest.
GoogleTypeDate? partitionDate;
/// The project ID (can be project # or ID) that the BigQuery source is in
/// with a length limit of 128 characters.
///
/// If not specified, inherits the project ID from the parent request.
core.String? projectId;
/// The BigQuery table to copy the data from with a length limit of 1,024
/// characters.
///
/// Required.
core.String? tableId;
GoogleCloudRetailV2BigQuerySource({
this.dataSchema,
this.datasetId,
this.gcsStagingDir,
this.partitionDate,
this.projectId,
this.tableId,
});
GoogleCloudRetailV2BigQuerySource.fromJson(core.Map json_)
: this(
dataSchema: json_.containsKey('dataSchema')
? json_['dataSchema'] as core.String
: null,
datasetId: json_.containsKey('datasetId')
? json_['datasetId'] as core.String
: null,
gcsStagingDir: json_.containsKey('gcsStagingDir')
? json_['gcsStagingDir'] as core.String
: null,
partitionDate: json_.containsKey('partitionDate')
? GoogleTypeDate.fromJson(
json_['partitionDate'] as core.Map<core.String, core.dynamic>)
: null,
projectId: json_.containsKey('projectId')
? json_['projectId'] as core.String
: null,
tableId: json_.containsKey('tableId')
? json_['tableId'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (dataSchema != null) 'dataSchema': dataSchema!,
if (datasetId != null) 'datasetId': datasetId!,
if (gcsStagingDir != null) 'gcsStagingDir': gcsStagingDir!,
if (partitionDate != null) 'partitionDate': partitionDate!,
if (projectId != null) 'projectId': projectId!,
if (tableId != null) 'tableId': tableId!,
};
}
/// The catalog configuration.
class GoogleCloudRetailV2Catalog {
/// The catalog display name.
///
/// This field must be a UTF-8 encoded string with a length limit of 128
/// characters. Otherwise, an INVALID_ARGUMENT error is returned.
///
/// Required. Immutable.
core.String? displayName;
/// The fully qualified resource name of the catalog.
///
/// Required. Immutable.
core.String? name;
/// The product level configuration.
///
/// Required.
GoogleCloudRetailV2ProductLevelConfig? productLevelConfig;
GoogleCloudRetailV2Catalog({
this.displayName,
this.name,
this.productLevelConfig,
});
GoogleCloudRetailV2Catalog.fromJson(core.Map json_)
: this(
displayName: json_.containsKey('displayName')
? json_['displayName'] as core.String
: null,
name: json_.containsKey('name') ? json_['name'] as core.String : null,
productLevelConfig: json_.containsKey('productLevelConfig')
? GoogleCloudRetailV2ProductLevelConfig.fromJson(
json_['productLevelConfig']
as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (displayName != null) 'displayName': displayName!,
if (name != null) 'name': name!,
if (productLevelConfig != null)
'productLevelConfig': productLevelConfig!,
};
}
/// Catalog level attribute config for an attribute.
///
/// For example, if customers want to enable/disable facet for a specific
/// attribute.
class GoogleCloudRetailV2CatalogAttribute {
/// If DYNAMIC_FACETABLE_ENABLED, attribute values are available for dynamic
/// facet.
///
/// Could only be DYNAMIC_FACETABLE_DISABLED if
/// CatalogAttribute.indexable_option is INDEXABLE_DISABLED. Otherwise, an
/// INVALID_ARGUMENT error is returned. Must be specified, otherwise throws
/// INVALID_FORMAT error.
/// Possible string values are:
/// - "DYNAMIC_FACETABLE_OPTION_UNSPECIFIED" : Value used when unset.
/// - "DYNAMIC_FACETABLE_ENABLED" : Dynamic facetable option enabled for an
/// attribute.
/// - "DYNAMIC_FACETABLE_DISABLED" : Dynamic facetable option disabled for an
/// attribute.
core.String? dynamicFacetableOption;
/// If EXACT_SEARCHABLE_ENABLED, attribute values will be exact searchable.
///
/// This property only applies to textual custom attributes and requires
/// indexable set to enabled to enable exact-searchable. If unset, the server
/// behavior defaults to EXACT_SEARCHABLE_DISABLED.
/// Possible string values are:
/// - "EXACT_SEARCHABLE_OPTION_UNSPECIFIED" : Value used when unset.
/// - "EXACT_SEARCHABLE_ENABLED" : Exact searchable option enabled for an
/// attribute.
/// - "EXACT_SEARCHABLE_DISABLED" : Exact searchable option disabled for an
/// attribute.
core.String? exactSearchableOption;
/// Indicates whether this attribute has been used by any products.
///
/// `True` if at least one Product is using this attribute in
/// Product.attributes. Otherwise, this field is `False`. CatalogAttribute can
/// be pre-loaded by using CatalogService.AddCatalogAttribute,
/// CatalogService.ImportCatalogAttributes, or
/// CatalogService.UpdateAttributesConfig APIs. This field is `False` for
/// pre-loaded CatalogAttributes. Only pre-loaded catalog attributes that are
/// neither in use by products nor predefined can be deleted. Catalog
/// attributes that are either in use by products or are predefined attributes
/// cannot be deleted; however, their configuration properties will reset to
/// default values upon removal request. After catalog changes, it takes about
/// 10 minutes for this field to update.
///
/// Output only.
core.bool? inUse;
/// When AttributesConfig.attribute_config_level is
/// CATALOG_LEVEL_ATTRIBUTE_CONFIG, if INDEXABLE_ENABLED attribute values are
/// indexed so that it can be filtered, faceted, or boosted in
/// SearchService.Search.
///
/// Must be specified, otherwise throws INVALID_FORMAT error.
/// Possible string values are:
/// - "INDEXABLE_OPTION_UNSPECIFIED" : Value used when unset.
/// - "INDEXABLE_ENABLED" : Indexable option enabled for an attribute.
/// - "INDEXABLE_DISABLED" : Indexable option disabled for an attribute.
core.String? indexableOption;
/// Attribute name.
///
/// For example: `color`, `brands`, `attributes.custom_attribute`, such as
/// `attributes.xyz`. To be indexable, the attribute name can contain only
/// alpha-numeric characters and underscores. For example, an attribute named
/// `attributes.abc_xyz` can be indexed, but an attribute named
/// `attributes.abc-xyz` cannot be indexed. If the attribute key starts with
/// `attributes.`, then the attribute is a custom attribute. Attributes such
/// as `brands`, `patterns`, and `title` are built-in and called system
/// attributes.
///
/// Required.
core.String? key;
/// If RETRIEVABLE_ENABLED, attribute values are retrievable in the search
/// results.
///
/// If unset, the server behavior defaults to RETRIEVABLE_DISABLED.
/// Possible string values are:
/// - "RETRIEVABLE_OPTION_UNSPECIFIED" : Value used when unset.
/// - "RETRIEVABLE_ENABLED" : Retrievable option enabled for an attribute.
/// - "RETRIEVABLE_DISABLED" : Retrievable option disabled for an attribute.
core.String? retrievableOption;
/// When AttributesConfig.attribute_config_level is
/// CATALOG_LEVEL_ATTRIBUTE_CONFIG, if SEARCHABLE_ENABLED, attribute values
/// are searchable by text queries in SearchService.Search.
///
/// If SEARCHABLE_ENABLED but attribute type is numerical, attribute values
/// will not be searchable by text queries in SearchService.Search, as there
/// are no text values associated to numerical attributes. Must be specified,
/// otherwise throws INVALID_FORMAT error.
/// Possible string values are:
/// - "SEARCHABLE_OPTION_UNSPECIFIED" : Value used when unset.
/// - "SEARCHABLE_ENABLED" : Searchable option enabled for an attribute.
/// - "SEARCHABLE_DISABLED" : Searchable option disabled for an attribute.
core.String? searchableOption;
/// The type of this attribute.
///
/// This is derived from the attribute in Product.attributes.
///
/// Output only.
/// Possible string values are:
/// - "UNKNOWN" : The type of the attribute is unknown. Used when type cannot
/// be derived from attribute that is not in_use.
/// - "TEXTUAL" : Textual attribute.
/// - "NUMERICAL" : Numerical attribute.
core.String? type;
GoogleCloudRetailV2CatalogAttribute({
this.dynamicFacetableOption,
this.exactSearchableOption,
this.inUse,
this.indexableOption,
this.key,
this.retrievableOption,
this.searchableOption,
this.type,
});
GoogleCloudRetailV2CatalogAttribute.fromJson(core.Map json_)
: this(
dynamicFacetableOption: json_.containsKey('dynamicFacetableOption')
? json_['dynamicFacetableOption'] as core.String
: null,
exactSearchableOption: json_.containsKey('exactSearchableOption')
? json_['exactSearchableOption'] as core.String
: null,
inUse:
json_.containsKey('inUse') ? json_['inUse'] as core.bool : null,
indexableOption: json_.containsKey('indexableOption')
? json_['indexableOption'] as core.String
: null,
key: json_.containsKey('key') ? json_['key'] as core.String : null,
retrievableOption: json_.containsKey('retrievableOption')
? json_['retrievableOption'] as core.String
: null,
searchableOption: json_.containsKey('searchableOption')
? json_['searchableOption'] as core.String
: null,
type: json_.containsKey('type') ? json_['type'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (dynamicFacetableOption != null)
'dynamicFacetableOption': dynamicFacetableOption!,
if (exactSearchableOption != null)
'exactSearchableOption': exactSearchableOption!,
if (inUse != null) 'inUse': inUse!,
if (indexableOption != null) 'indexableOption': indexableOption!,
if (key != null) 'key': key!,
if (retrievableOption != null) 'retrievableOption': retrievableOption!,
if (searchableOption != null) 'searchableOption': searchableOption!,
if (type != null) 'type': type!,
};
}
/// The color information of a Product.
class GoogleCloudRetailV2ColorInfo {
/// The standard color families.
///
/// Strongly recommended to use the following standard color groups: "Red",
/// "Pink", "Orange", "Yellow", "Purple", "Green", "Cyan", "Blue", "Brown",
/// "White", "Gray", "Black" and "Mixed". Normally it is expected to have only
/// 1 color family. May consider using single "Mixed" instead of multiple
/// values. A maximum of 5 values are allowed. Each value must be a UTF-8
/// encoded string with a length limit of 128 characters. Otherwise, an
/// INVALID_ARGUMENT error is returned. Google Merchant Center property
/// [color](https://support.google.com/merchants/answer/6324487). Schema.org
/// property [Product.color](https://schema.org/color).
core.List<core.String>? colorFamilies;
/// The color display names, which may be different from standard color family
/// names, such as the color aliases used in the website frontend.
///
/// Normally it is expected to have only 1 color. May consider using single
/// "Mixed" instead of multiple values. A maximum of 75 colors are allowed.
/// Each value must be a UTF-8 encoded string with a length limit of 128
/// characters. Otherwise, an INVALID_ARGUMENT error is returned. Google
/// Merchant Center property
/// [color](https://support.google.com/merchants/answer/6324487). Schema.org
/// property [Product.color](https://schema.org/color).
core.List<core.String>? colors;
GoogleCloudRetailV2ColorInfo({
this.colorFamilies,
this.colors,
});
GoogleCloudRetailV2ColorInfo.fromJson(core.Map json_)
: this(
colorFamilies: json_.containsKey('colorFamilies')
? (json_['colorFamilies'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
colors: json_.containsKey('colors')
? (json_['colors'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (colorFamilies != null) 'colorFamilies': colorFamilies!,
if (colors != null) 'colors': colors!,
};
}
/// Response of the autocomplete query.
class GoogleCloudRetailV2CompleteQueryResponse {
/// A unique complete token.
///
/// This should be included in the UserEvent.completion_detail for search
/// events resulting from this completion, which enables accurate attribution
/// of complete model performance.
core.String? attributionToken;
/// Results of the matching suggestions.
///
/// The result list is ordered and the first result is top suggestion.
core.List<GoogleCloudRetailV2CompleteQueryResponseCompletionResult>?
completionResults;
/// Matched recent searches of this user.
///
/// The maximum number of recent searches is 10. This field is a restricted
/// feature. Contact Retail Search support team if you are interested in
/// enabling it. This feature is only available when
/// CompleteQueryRequest.visitor_id field is set and UserEvent is imported.
/// The recent searches satisfy the follow rules: * They are ordered from
/// latest to oldest. * They are matched with CompleteQueryRequest.query case
/// insensitively. * They are transformed to lower case. * They are UTF-8
/// safe. Recent searches are deduplicated. More recent searches will be
/// reserved when duplication happens.
core.List<GoogleCloudRetailV2CompleteQueryResponseRecentSearchResult>?
recentSearchResults;
GoogleCloudRetailV2CompleteQueryResponse({
this.attributionToken,
this.completionResults,
this.recentSearchResults,
});
GoogleCloudRetailV2CompleteQueryResponse.fromJson(core.Map json_)
: this(
attributionToken: json_.containsKey('attributionToken')
? json_['attributionToken'] as core.String
: null,
completionResults: json_.containsKey('completionResults')
? (json_['completionResults'] as core.List)
.map((value) =>
GoogleCloudRetailV2CompleteQueryResponseCompletionResult
.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
recentSearchResults: json_.containsKey('recentSearchResults')
? (json_['recentSearchResults'] as core.List)
.map((value) =>
GoogleCloudRetailV2CompleteQueryResponseRecentSearchResult
.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (attributionToken != null) 'attributionToken': attributionToken!,
if (completionResults != null) 'completionResults': completionResults!,
if (recentSearchResults != null)
'recentSearchResults': recentSearchResults!,
};
}
/// Resource that represents completion results.
class GoogleCloudRetailV2CompleteQueryResponseCompletionResult {
/// Custom attributes for the suggestion term.
///
/// * For "user-data", the attributes are additional custom attributes
/// ingested through BigQuery. * For "cloud-retail", the attributes are
/// product attributes generated by Cloud Retail. It requires
/// UserEvent.product_details is imported properly.
core.Map<core.String, GoogleCloudRetailV2CustomAttribute>? attributes;
/// The suggestion for the query.
core.String? suggestion;
GoogleCloudRetailV2CompleteQueryResponseCompletionResult({
this.attributes,
this.suggestion,
});
GoogleCloudRetailV2CompleteQueryResponseCompletionResult.fromJson(
core.Map json_)
: this(
attributes: json_.containsKey('attributes')
? (json_['attributes'] as core.Map<core.String, core.dynamic>)
.map(
(key, value) => core.MapEntry(
key,
GoogleCloudRetailV2CustomAttribute.fromJson(
value as core.Map<core.String, core.dynamic>),
),
)
: null,
suggestion: json_.containsKey('suggestion')
? json_['suggestion'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (attributes != null) 'attributes': attributes!,
if (suggestion != null) 'suggestion': suggestion!,
};
}
/// Recent search of this user.
class GoogleCloudRetailV2CompleteQueryResponseRecentSearchResult {
/// The recent search query.
core.String? recentSearch;
GoogleCloudRetailV2CompleteQueryResponseRecentSearchResult({
this.recentSearch,
});
GoogleCloudRetailV2CompleteQueryResponseRecentSearchResult.fromJson(
core.Map json_)
: this(
recentSearch: json_.containsKey('recentSearch')
? json_['recentSearch'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (recentSearch != null) 'recentSearch': recentSearch!,
};
}
/// Catalog level autocomplete config for customers to customize autocomplete
/// feature's settings.
class GoogleCloudRetailV2CompletionConfig {
/// The source data for the latest import of the autocomplete allowlist
/// phrases.
///
/// Output only.
GoogleCloudRetailV2CompletionDataInputConfig? allowlistInputConfig;
/// If set to true, the auto learning function is enabled.
///
/// Auto learning uses user data to generate suggestions using ML techniques.
/// Default value is false. Only after enabling auto learning can users use
/// `cloud-retail` data in CompleteQueryRequest.
core.bool? autoLearning;
/// The source data for the latest import of the autocomplete denylist
/// phrases.
///
/// Output only.
GoogleCloudRetailV2CompletionDataInputConfig? denylistInputConfig;
/// Name of the LRO corresponding to the latest allowlist import.
///
/// Can use GetOperation API to retrieve the latest state of the Long Running
/// Operation.
///
/// Output only.
core.String? lastAllowlistImportOperation;
/// Name of the LRO corresponding to the latest denylist import.
///
/// Can use GetOperation API to retrieve the latest state of the Long Running
/// Operation.
///
/// Output only.
core.String? lastDenylistImportOperation;
/// Name of the LRO corresponding to the latest suggestion terms list import.
///
/// Can use GetOperation API to retrieve the latest state of the Long Running
/// Operation.
///
/// Output only.
core.String? lastSuggestionsImportOperation;
/// Specifies the matching order for autocomplete suggestions, e.g., a query
/// consisting of 'sh' with 'out-of-order' specified would suggest "women's
/// shoes", whereas a query of 'red s' with 'exact-prefix' specified would
/// suggest "red shoes".
///
/// Currently supported values: * 'out-of-order' * 'exact-prefix' Default
/// value: 'exact-prefix'.
core.String? matchingOrder;
/// The maximum number of autocomplete suggestions returned per term.
///
/// Default value is 20. If left unset or set to 0, then will fallback to
/// default value. Value range is 1 to 20.
core.int? maxSuggestions;
/// The minimum number of characters needed to be typed in order to get
/// suggestions.
///
/// Default value is 2. If left unset or set to 0, then will fallback to
/// default value. Value range is 1 to 20.
core.int? minPrefixLength;
/// Fully qualified name `projects / * /locations / * /catalogs / *
/// /completionConfig`
///
/// Required. Immutable.
core.String? name;
/// The source data for the latest import of the autocomplete suggestion
/// phrases.
///
/// Output only.
GoogleCloudRetailV2CompletionDataInputConfig? suggestionsInputConfig;
GoogleCloudRetailV2CompletionConfig({
this.allowlistInputConfig,
this.autoLearning,
this.denylistInputConfig,
this.lastAllowlistImportOperation,
this.lastDenylistImportOperation,
this.lastSuggestionsImportOperation,
this.matchingOrder,
this.maxSuggestions,
this.minPrefixLength,
this.name,
this.suggestionsInputConfig,
});
GoogleCloudRetailV2CompletionConfig.fromJson(core.Map json_)
: this(
allowlistInputConfig: json_.containsKey('allowlistInputConfig')
? GoogleCloudRetailV2CompletionDataInputConfig.fromJson(
json_['allowlistInputConfig']
as core.Map<core.String, core.dynamic>)
: null,
autoLearning: json_.containsKey('autoLearning')
? json_['autoLearning'] as core.bool
: null,
denylistInputConfig: json_.containsKey('denylistInputConfig')
? GoogleCloudRetailV2CompletionDataInputConfig.fromJson(
json_['denylistInputConfig']
as core.Map<core.String, core.dynamic>)
: null,
lastAllowlistImportOperation:
json_.containsKey('lastAllowlistImportOperation')
? json_['lastAllowlistImportOperation'] as core.String
: null,
lastDenylistImportOperation:
json_.containsKey('lastDenylistImportOperation')
? json_['lastDenylistImportOperation'] as core.String
: null,
lastSuggestionsImportOperation:
json_.containsKey('lastSuggestionsImportOperation')
? json_['lastSuggestionsImportOperation'] as core.String
: null,
matchingOrder: json_.containsKey('matchingOrder')
? json_['matchingOrder'] as core.String
: null,
maxSuggestions: json_.containsKey('maxSuggestions')
? json_['maxSuggestions'] as core.int
: null,
minPrefixLength: json_.containsKey('minPrefixLength')
? json_['minPrefixLength'] as core.int
: null,
name: json_.containsKey('name') ? json_['name'] as core.String : null,
suggestionsInputConfig: json_.containsKey('suggestionsInputConfig')
? GoogleCloudRetailV2CompletionDataInputConfig.fromJson(
json_['suggestionsInputConfig']
as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (allowlistInputConfig != null)
'allowlistInputConfig': allowlistInputConfig!,
if (autoLearning != null) 'autoLearning': autoLearning!,
if (denylistInputConfig != null)
'denylistInputConfig': denylistInputConfig!,
if (lastAllowlistImportOperation != null)
'lastAllowlistImportOperation': lastAllowlistImportOperation!,
if (lastDenylistImportOperation != null)
'lastDenylistImportOperation': lastDenylistImportOperation!,
if (lastSuggestionsImportOperation != null)
'lastSuggestionsImportOperation': lastSuggestionsImportOperation!,
if (matchingOrder != null) 'matchingOrder': matchingOrder!,
if (maxSuggestions != null) 'maxSuggestions': maxSuggestions!,
if (minPrefixLength != null) 'minPrefixLength': minPrefixLength!,
if (name != null) 'name': name!,
if (suggestionsInputConfig != null)
'suggestionsInputConfig': suggestionsInputConfig!,
};
}
/// The input config source for completion data.
class GoogleCloudRetailV2CompletionDataInputConfig {
/// BigQuery input source.
///
/// Add the IAM permission "BigQuery Data Viewer" for
/// cloud-retail-customer-data-access@system.gserviceaccount.com before using
/// this feature otherwise an error is thrown.
///
/// Required.
GoogleCloudRetailV2BigQuerySource? bigQuerySource;
GoogleCloudRetailV2CompletionDataInputConfig({
this.bigQuerySource,
});
GoogleCloudRetailV2CompletionDataInputConfig.fromJson(core.Map json_)
: this(
bigQuerySource: json_.containsKey('bigQuerySource')
? GoogleCloudRetailV2BigQuerySource.fromJson(
json_['bigQuerySource']
as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (bigQuerySource != null) 'bigQuerySource': bigQuerySource!,
};
}
/// Detailed completion information including completion attribution token and
/// clicked completion info.
class GoogleCloudRetailV2CompletionDetail {
/// Completion attribution token in CompleteQueryResponse.attribution_token.
core.String? completionAttributionToken;
/// End user selected CompleteQueryResponse.CompletionResult.suggestion
/// position, starting from 0.
core.int? selectedPosition;
/// End user selected CompleteQueryResponse.CompletionResult.suggestion.
core.String? selectedSuggestion;
GoogleCloudRetailV2CompletionDetail({
this.completionAttributionToken,
this.selectedPosition,
this.selectedSuggestion,
});
GoogleCloudRetailV2CompletionDetail.fromJson(core.Map json_)
: this(
completionAttributionToken:
json_.containsKey('completionAttributionToken')
? json_['completionAttributionToken'] as core.String
: null,
selectedPosition: json_.containsKey('selectedPosition')
? json_['selectedPosition'] as core.int
: null,
selectedSuggestion: json_.containsKey('selectedSuggestion')
? json_['selectedSuggestion'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (completionAttributionToken != null)
'completionAttributionToken': completionAttributionToken!,
if (selectedPosition != null) 'selectedPosition': selectedPosition!,
if (selectedSuggestion != null)
'selectedSuggestion': selectedSuggestion!,
};
}
/// Metadata that is used to define a condition that triggers an action.
///
/// A valid condition must specify at least one of 'query_terms' or
/// 'products_filter'. If multiple fields are specified, the condition is met if
/// all the fields are satisfied e.g. if a set of query terms and product_filter
/// are set, then only items matching the product_filter for requests with a
/// query matching the query terms wil get boosted.
class GoogleCloudRetailV2Condition {
/// Range of time(s) specifying when Condition is active.
///
/// Condition true if any time range matches.
core.List<GoogleCloudRetailV2ConditionTimeRange>? activeTimeRange;
/// A list (up to 10 entries) of terms to match the query on.
///
/// If not specified, match all queries. If many query terms are specified,
/// the condition is matched if any of the terms is a match (i.e. using the OR
/// operator).
core.List<GoogleCloudRetailV2ConditionQueryTerm>? queryTerms;
GoogleCloudRetailV2Condition({
this.activeTimeRange,
this.queryTerms,
});
GoogleCloudRetailV2Condition.fromJson(core.Map json_)
: this(
activeTimeRange: json_.containsKey('activeTimeRange')
? (json_['activeTimeRange'] as core.List)
.map((value) =>
GoogleCloudRetailV2ConditionTimeRange.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
queryTerms: json_.containsKey('queryTerms')
? (json_['queryTerms'] as core.List)
.map((value) =>
GoogleCloudRetailV2ConditionQueryTerm.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (activeTimeRange != null) 'activeTimeRange': activeTimeRange!,
if (queryTerms != null) 'queryTerms': queryTerms!,
};
}
/// Query terms that we want to match on.
class GoogleCloudRetailV2ConditionQueryTerm {
/// Whether this is supposed to be a full or partial match.
core.bool? fullMatch;
/// The value of the term to match on.
///
/// Value cannot be empty. Value can have at most 3 terms if specified as a
/// partial match. Each space separated string is considered as one term. For
/// example, "a b c" is 3 terms and allowed, but " a b c d" is 4 terms and not
/// allowed for a partial match.
core.String? value;
GoogleCloudRetailV2ConditionQueryTerm({
this.fullMatch,
this.value,
});
GoogleCloudRetailV2ConditionQueryTerm.fromJson(core.Map json_)
: this(
fullMatch: json_.containsKey('fullMatch')
? json_['fullMatch'] as core.bool
: null,
value:
json_.containsKey('value') ? json_['value'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (fullMatch != null) 'fullMatch': fullMatch!,
if (value != null) 'value': value!,
};
}
/// Used for time-dependent conditions.
///
/// Example: Want to have rule applied for week long sale.
class GoogleCloudRetailV2ConditionTimeRange {
/// End of time range.
///
/// Range is inclusive.
core.String? endTime;
/// Start of time range.
///
/// Range is inclusive.
core.String? startTime;
GoogleCloudRetailV2ConditionTimeRange({
this.endTime,
this.startTime,
});
GoogleCloudRetailV2ConditionTimeRange.fromJson(core.Map json_)
: this(
endTime: json_.containsKey('endTime')
? json_['endTime'] as core.String
: null,
startTime: json_.containsKey('startTime')
? json_['startTime'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (endTime != null) 'endTime': endTime!,
if (startTime != null) 'startTime': startTime!,
};
}
/// Configures dynamic metadata that can be linked to a ServingConfig and affect
/// search or recommendation results at serving time.
class GoogleCloudRetailV2Control {
/// List of serving config ids that are associated with this control in the
/// same Catalog.
///
/// Note the association is managed via the ServingConfig, this is an output
/// only denormalized view.
///
/// Output only.
core.List<core.String>? associatedServingConfigIds;
/// The human readable control display name.
///
/// Used in Retail UI. This field must be a UTF-8 encoded string with a length
/// limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is thrown.
///
/// Required.
core.String? displayName;
/// Fully qualified name `projects / * /locations/global/catalogs / *
/// /controls / * `
///
/// Immutable.
core.String? name;
/// A rule control - a condition-action pair.
///
/// Enacts a set action when the condition is triggered. For example: Boost
/// "gShoe" when query full matches "Running Shoes".
GoogleCloudRetailV2Rule? rule;
/// Specifies the use case for the control.
///
/// Affects what condition fields can be set. Only settable by search
/// controls. Will default to SEARCH_SOLUTION_USE_CASE_SEARCH if not
/// specified. Currently only allow one search_solution_use_case per control.
core.List<core.String>? searchSolutionUseCase;
/// The solution types that the control is used for.
///
/// Currently we support setting only one type of solution at creation time.
/// Only `SOLUTION_TYPE_SEARCH` value is supported at the moment. If no
/// solution type is provided at creation time, will default to
/// SOLUTION_TYPE_SEARCH.
///
/// Required. Immutable.
core.List<core.String>? solutionTypes;
GoogleCloudRetailV2Control({
this.associatedServingConfigIds,
this.displayName,
this.name,
this.rule,
this.searchSolutionUseCase,
this.solutionTypes,
});
GoogleCloudRetailV2Control.fromJson(core.Map json_)
: this(
associatedServingConfigIds:
json_.containsKey('associatedServingConfigIds')
? (json_['associatedServingConfigIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
displayName: json_.containsKey('displayName')
? json_['displayName'] as core.String
: null,
name: json_.containsKey('name') ? json_['name'] as core.String : null,
rule: json_.containsKey('rule')
? GoogleCloudRetailV2Rule.fromJson(
json_['rule'] as core.Map<core.String, core.dynamic>)
: null,
searchSolutionUseCase: json_.containsKey('searchSolutionUseCase')
? (json_['searchSolutionUseCase'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
solutionTypes: json_.containsKey('solutionTypes')
? (json_['solutionTypes'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (associatedServingConfigIds != null)
'associatedServingConfigIds': associatedServingConfigIds!,
if (displayName != null) 'displayName': displayName!,
if (name != null) 'name': name!,
if (rule != null) 'rule': rule!,
if (searchSolutionUseCase != null)
'searchSolutionUseCase': searchSolutionUseCase!,
if (solutionTypes != null) 'solutionTypes': solutionTypes!,
};
}
/// A custom attribute that is not explicitly modeled in Product.
class GoogleCloudRetailV2CustomAttribute {
/// This field is normally ignored unless
/// AttributesConfig.attribute_config_level of the Catalog is set to the
/// deprecated 'PRODUCT_LEVEL_ATTRIBUTE_CONFIG' mode.
///
/// For information about product-level attribute configuration, see
/// [Configuration modes](https://cloud.google.com/retail/docs/attribute-config#config-modes).
/// If true, custom attribute values are indexed, so that they can be
/// filtered, faceted or boosted in SearchService.Search. This field is
/// ignored in a UserEvent. See SearchRequest.filter,
/// SearchRequest.facet_specs and SearchRequest.boost_spec for more details.
core.bool? indexable;
/// The numerical values of this custom attribute.
///
/// For example, `[2.3, 15.4]` when the key is "lengths_cm". Exactly one of
/// text or numbers should be set. Otherwise, an INVALID_ARGUMENT error is
/// returned.
core.List<core.double>? numbers;
/// This field is normally ignored unless
/// AttributesConfig.attribute_config_level of the Catalog is set to the
/// deprecated 'PRODUCT_LEVEL_ATTRIBUTE_CONFIG' mode.
///
/// For information about product-level attribute configuration, see
/// [Configuration modes](https://cloud.google.com/retail/docs/attribute-config#config-modes).
/// If true, custom attribute values are searchable by text queries in
/// SearchService.Search. This field is ignored in a UserEvent. Only set if
/// type text is set. Otherwise, a INVALID_ARGUMENT error is returned.
core.bool? searchable;
/// The textual values of this custom attribute.
///
/// For example, `["yellow", "green"]` when the key is "color". Empty string
/// is not allowed. Otherwise, an INVALID_ARGUMENT error is returned. Exactly
/// one of text or numbers should be set. Otherwise, an INVALID_ARGUMENT error
/// is returned.
core.List<core.String>? text;
GoogleCloudRetailV2CustomAttribute({
this.indexable,
this.numbers,
this.searchable,
this.text,
});
GoogleCloudRetailV2CustomAttribute.fromJson(core.Map json_)
: this(
indexable: json_.containsKey('indexable')
? json_['indexable'] as core.bool
: null,
numbers: json_.containsKey('numbers')
? (json_['numbers'] as core.List)
.map((value) => (value as core.num).toDouble())
.toList()
: null,
searchable: json_.containsKey('searchable')
? json_['searchable'] as core.bool
: null,
text: json_.containsKey('text')
? (json_['text'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (indexable != null) 'indexable': indexable!,
if (numbers != null) 'numbers': numbers!,
if (searchable != null) 'searchable': searchable!,
if (text != null) 'text': text!,
};
}
/// Metadata for active A/B testing Experiments.
class GoogleCloudRetailV2ExperimentInfo {
/// The fully qualified resource name of the experiment that provides the
/// serving config under test, should an active experiment exist.
///
/// For example: `projects / *
/// /locations/global/catalogs/default_catalog/experiments/experiment_id`
core.String? experimentName;
/// A/B test between existing Cloud Retail Search ServingConfigs.
GoogleCloudRetailV2ExperimentInfoServingConfigExperiment?
servingConfigExperiment;
GoogleCloudRetailV2ExperimentInfo({
this.experimentName,
this.servingConfigExperiment,
});
GoogleCloudRetailV2ExperimentInfo.fromJson(core.Map json_)
: this(
experimentName: json_.containsKey('experimentName')
? json_['experimentName'] as core.String
: null,
servingConfigExperiment: json_.containsKey('servingConfigExperiment')
? GoogleCloudRetailV2ExperimentInfoServingConfigExperiment
.fromJson(json_['servingConfigExperiment']
as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (experimentName != null) 'experimentName': experimentName!,
if (servingConfigExperiment != null)
'servingConfigExperiment': servingConfigExperiment!,
};
}
/// Metadata for active serving config A/B tests.
class GoogleCloudRetailV2ExperimentInfoServingConfigExperiment {
/// The fully qualified resource name of the serving config
/// VariantArm.serving_config_id responsible for generating the search
/// response.
///
/// For example: `projects / * /locations / * /catalogs / * /servingConfigs /
/// * `.
core.String? experimentServingConfig;
/// The fully qualified resource name of the original SearchRequest.placement
/// in the search request prior to reassignment by experiment API.
///
/// For example: `projects / * /locations / * /catalogs / * /servingConfigs /
/// * `.
core.String? originalServingConfig;
GoogleCloudRetailV2ExperimentInfoServingConfigExperiment({
this.experimentServingConfig,
this.originalServingConfig,
});
GoogleCloudRetailV2ExperimentInfoServingConfigExperiment.fromJson(
core.Map json_)
: this(
experimentServingConfig: json_.containsKey('experimentServingConfig')
? json_['experimentServingConfig'] as core.String
: null,
originalServingConfig: json_.containsKey('originalServingConfig')
? json_['originalServingConfig'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (experimentServingConfig != null)
'experimentServingConfig': experimentServingConfig!,
if (originalServingConfig != null)
'originalServingConfig': originalServingConfig!,
};
}
/// Fulfillment information, such as the store IDs for in-store pickup or region
/// IDs for different shipping methods.
class GoogleCloudRetailV2FulfillmentInfo {
/// The IDs for this type, such as the store IDs for
/// FulfillmentInfo.type.pickup-in-store or the region IDs for
/// FulfillmentInfo.type.same-day-delivery.
///
/// A maximum of 3000 values are allowed. Each value must be a string with a
/// length limit of 30 characters, matching the pattern `[a-zA-Z0-9_-]+`, such
/// as "store1" or "REGION-2". Otherwise, an INVALID_ARGUMENT error is
/// returned.
core.List<core.String>? placeIds;
/// The fulfillment type, including commonly used types (such as pickup in
/// store and same day delivery), and custom types.
///
/// Customers have to map custom types to their display names before rendering
/// UI. Supported values: * "pickup-in-store" * "ship-to-store" *
/// "same-day-delivery" * "next-day-delivery" * "custom-type-1" *
/// "custom-type-2" * "custom-type-3" * "custom-type-4" * "custom-type-5" If
/// this field is set to an invalid value other than these, an
/// INVALID_ARGUMENT error is returned.
core.String? type;
GoogleCloudRetailV2FulfillmentInfo({
this.placeIds,
this.type,
});
GoogleCloudRetailV2FulfillmentInfo.fromJson(core.Map json_)
: this(
placeIds: json_.containsKey('placeIds')
? (json_['placeIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
type: json_.containsKey('type') ? json_['type'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (placeIds != null) 'placeIds': placeIds!,
if (type != null) 'type': type!,
};
}
/// Google Cloud Storage location for input content.
class GoogleCloudRetailV2GcsSource {
/// The schema to use when parsing the data from the source.
///
/// Supported values for product imports: * `product` (default): One JSON
/// Product per line. Each product must have a valid Product.id. *
/// `product_merchant_center`: See
/// [Importing catalog data from Merchant Center](https://cloud.google.com/retail/recommendations-ai/docs/upload-catalog#mc).
/// Supported values for user events imports: * `user_event` (default): One
/// JSON UserEvent per line. * `user_event_ga360`: Using
/// https://support.google.com/analytics/answer/3437719. Supported values for
/// control imports: * `control` (default): One JSON Control per line.
/// Supported values for catalog attribute imports: * `catalog_attribute`
/// (default): One CSV CatalogAttribute per line.
core.String? dataSchema;
/// Google Cloud Storage URIs to input files.
///
/// URI can be up to 2000 characters long. URIs can match the full object path
/// (for example, `gs://bucket/directory/object.json`) or a pattern matching
/// one or more files, such as `gs://bucket/directory / * .json`. A request
/// can contain at most 100 files, and each file can be up to 2 GB. See
/// [Importing product information](https://cloud.google.com/retail/recommendations-ai/docs/upload-catalog)
/// for the expected file format and setup instructions.
///
/// Required.
core.List<core.String>? inputUris;
GoogleCloudRetailV2GcsSource({
this.dataSchema,
this.inputUris,
});
GoogleCloudRetailV2GcsSource.fromJson(core.Map json_)
: this(
dataSchema: json_.containsKey('dataSchema')
? json_['dataSchema'] as core.String
: null,
inputUris: json_.containsKey('inputUris')
? (json_['inputUris'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (dataSchema != null) 'dataSchema': dataSchema!,
if (inputUris != null) 'inputUris': inputUris!,
};
}
/// Response message of CatalogService.GetDefaultBranch.
class GoogleCloudRetailV2GetDefaultBranchResponse {
/// Full resource name of the branch id currently set as default branch.
core.String? branch;
/// This corresponds to SetDefaultBranchRequest.note field, when this branch
/// was set as default.
core.String? note;
/// The time when this branch is set to default.
core.String? setTime;
GoogleCloudRetailV2GetDefaultBranchResponse({
this.branch,
this.note,
this.setTime,
});
GoogleCloudRetailV2GetDefaultBranchResponse.fromJson(core.Map json_)
: this(
branch: json_.containsKey('branch')
? json_['branch'] as core.String
: null,
note: json_.containsKey('note') ? json_['note'] as core.String : null,
setTime: json_.containsKey('setTime')
? json_['setTime'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (branch != null) 'branch': branch!,
if (note != null) 'note': note!,
if (setTime != null) 'setTime': setTime!,
};
}
/// Product image.
///
/// Recommendations AI and Retail Search do not use product images to improve
/// prediction and search results. However, product images can be returned in
/// results, and are shown in prediction or search previews in the console.
class GoogleCloudRetailV2Image {
/// Height of the image in number of pixels.
///
/// This field must be nonnegative. Otherwise, an INVALID_ARGUMENT error is
/// returned.
core.int? height;
/// URI of the image.
///
/// This field must be a valid UTF-8 encoded URI with a length limit of 5,000
/// characters. Otherwise, an INVALID_ARGUMENT error is returned. Google
/// Merchant Center property
/// [image_link](https://support.google.com/merchants/answer/6324350).
/// Schema.org property [Product.image](https://schema.org/image).
///
/// Required.
core.String? uri;
/// Width of the image in number of pixels.
///
/// This field must be nonnegative. Otherwise, an INVALID_ARGUMENT error is
/// returned.
core.int? width;
GoogleCloudRetailV2Image({
this.height,
this.uri,
this.width,
});
GoogleCloudRetailV2Image.fromJson(core.Map json_)
: this(
height:
json_.containsKey('height') ? json_['height'] as core.int : null,
uri: json_.containsKey('uri') ? json_['uri'] as core.String : null,
width: json_.containsKey('width') ? json_['width'] as core.int : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (height != null) 'height': height!,
if (uri != null) 'uri': uri!,
if (width != null) 'width': width!,
};
}
/// Request message for ImportCompletionData methods.
class GoogleCloudRetailV2ImportCompletionDataRequest {
/// The desired input location of the data.
///
/// Required.
GoogleCloudRetailV2CompletionDataInputConfig? inputConfig;
/// Pub/Sub topic for receiving notification.
///
/// If this field is set, when the import is finished, a notification is sent
/// to specified Pub/Sub topic. The message data is JSON string of a
/// Operation. Format of the Pub/Sub topic is
/// `projects/{project}/topics/{topic}`.
core.String? notificationPubsubTopic;
GoogleCloudRetailV2ImportCompletionDataRequest({
this.inputConfig,
this.notificationPubsubTopic,
});
GoogleCloudRetailV2ImportCompletionDataRequest.fromJson(core.Map json_)
: this(
inputConfig: json_.containsKey('inputConfig')
? GoogleCloudRetailV2CompletionDataInputConfig.fromJson(
json_['inputConfig'] as core.Map<core.String, core.dynamic>)
: null,
notificationPubsubTopic: json_.containsKey('notificationPubsubTopic')
? json_['notificationPubsubTopic'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (inputConfig != null) 'inputConfig': inputConfig!,
if (notificationPubsubTopic != null)
'notificationPubsubTopic': notificationPubsubTopic!,
};
}
/// Configuration of destination for Import related errors.
class GoogleCloudRetailV2ImportErrorsConfig {
/// Google Cloud Storage prefix for import errors.
///
/// This must be an empty, existing Cloud Storage directory. Import errors are
/// written to sharded files in this directory, one per line, as a
/// JSON-encoded `google.rpc.Status` message.
core.String? gcsPrefix;
GoogleCloudRetailV2ImportErrorsConfig({
this.gcsPrefix,
});
GoogleCloudRetailV2ImportErrorsConfig.fromJson(core.Map json_)
: this(
gcsPrefix: json_.containsKey('gcsPrefix')
? json_['gcsPrefix'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (gcsPrefix != null) 'gcsPrefix': gcsPrefix!,
};
}
/// Request message for Import methods.
class GoogleCloudRetailV2ImportProductsRequest {
/// The desired location of errors incurred during the Import.
GoogleCloudRetailV2ImportErrorsConfig? errorsConfig;
/// The desired input location of the data.
///
/// Required.
GoogleCloudRetailV2ProductInputConfig? inputConfig;
/// Full Pub/Sub topic name for receiving notification.
///
/// If this field is set, when the import is finished, a notification is sent
/// to specified Pub/Sub topic. The message data is JSON string of a
/// Operation. Format of the Pub/Sub topic is
/// `projects/{project}/topics/{topic}`. It has to be within the same project
/// as ImportProductsRequest.parent. Make sure that
/// `service-@gcp-sa-retail.iam.gserviceaccount.com` has the
/// `pubsub.topics.publish` IAM permission on the topic.
core.String? notificationPubsubTopic;
/// The mode of reconciliation between existing products and the products to
/// be imported.
///
/// Defaults to ReconciliationMode.INCREMENTAL.
/// Possible string values are:
/// - "RECONCILIATION_MODE_UNSPECIFIED" : Defaults to INCREMENTAL.
/// - "INCREMENTAL" : Inserts new products or updates existing products.
/// - "FULL" : Calculates diff and replaces the entire product dataset.
/// Existing products may be deleted if they are not present in the source
/// location.
core.String? reconciliationMode;
/// This field has no effect.
///
/// Deprecated.
core.String? requestId;
/// Indicates which fields in the provided imported `products` to update.
///
/// If not set, all fields are updated.
core.String? updateMask;
GoogleCloudRetailV2ImportProductsRequest({
this.errorsConfig,
this.inputConfig,
this.notificationPubsubTopic,
this.reconciliationMode,
this.requestId,
this.updateMask,
});
GoogleCloudRetailV2ImportProductsRequest.fromJson(core.Map json_)
: this(
errorsConfig: json_.containsKey('errorsConfig')
? GoogleCloudRetailV2ImportErrorsConfig.fromJson(
json_['errorsConfig'] as core.Map<core.String, core.dynamic>)
: null,
inputConfig: json_.containsKey('inputConfig')
? GoogleCloudRetailV2ProductInputConfig.fromJson(
json_['inputConfig'] as core.Map<core.String, core.dynamic>)
: null,
notificationPubsubTopic: json_.containsKey('notificationPubsubTopic')
? json_['notificationPubsubTopic'] as core.String
: null,
reconciliationMode: json_.containsKey('reconciliationMode')
? json_['reconciliationMode'] as core.String
: null,
requestId: json_.containsKey('requestId')
? json_['requestId'] as core.String
: null,
updateMask: json_.containsKey('updateMask')
? json_['updateMask'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (errorsConfig != null) 'errorsConfig': errorsConfig!,
if (inputConfig != null) 'inputConfig': inputConfig!,
if (notificationPubsubTopic != null)
'notificationPubsubTopic': notificationPubsubTopic!,
if (reconciliationMode != null)
'reconciliationMode': reconciliationMode!,
if (requestId != null) 'requestId': requestId!,
if (updateMask != null) 'updateMask': updateMask!,
};
}
/// Request message for the ImportUserEvents request.
class GoogleCloudRetailV2ImportUserEventsRequest {
/// The desired location of errors incurred during the Import.
///
/// Cannot be set for inline user event imports.
GoogleCloudRetailV2ImportErrorsConfig? errorsConfig;
/// The desired input location of the data.
///
/// Required.
GoogleCloudRetailV2UserEventInputConfig? inputConfig;
GoogleCloudRetailV2ImportUserEventsRequest({
this.errorsConfig,
this.inputConfig,
});
GoogleCloudRetailV2ImportUserEventsRequest.fromJson(core.Map json_)
: this(
errorsConfig: json_.containsKey('errorsConfig')
? GoogleCloudRetailV2ImportErrorsConfig.fromJson(
json_['errorsConfig'] as core.Map<core.String, core.dynamic>)
: null,
inputConfig: json_.containsKey('inputConfig')
? GoogleCloudRetailV2UserEventInputConfig.fromJson(
json_['inputConfig'] as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (errorsConfig != null) 'errorsConfig': errorsConfig!,
if (inputConfig != null) 'inputConfig': inputConfig!,
};
}
/// A floating point interval.
class GoogleCloudRetailV2Interval {
/// Exclusive upper bound.
core.double? exclusiveMaximum;
/// Exclusive lower bound.
core.double? exclusiveMinimum;
/// Inclusive upper bound.
core.double? maximum;
/// Inclusive lower bound.
core.double? minimum;
GoogleCloudRetailV2Interval({
this.exclusiveMaximum,
this.exclusiveMinimum,
this.maximum,
this.minimum,
});
GoogleCloudRetailV2Interval.fromJson(core.Map json_)
: this(
exclusiveMaximum: json_.containsKey('exclusiveMaximum')
? (json_['exclusiveMaximum'] as core.num).toDouble()
: null,
exclusiveMinimum: json_.containsKey('exclusiveMinimum')
? (json_['exclusiveMinimum'] as core.num).toDouble()
: null,
maximum: json_.containsKey('maximum')
? (json_['maximum'] as core.num).toDouble()
: null,
minimum: json_.containsKey('minimum')
? (json_['minimum'] as core.num).toDouble()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (exclusiveMaximum != null) 'exclusiveMaximum': exclusiveMaximum!,
if (exclusiveMinimum != null) 'exclusiveMinimum': exclusiveMinimum!,
if (maximum != null) 'maximum': maximum!,
if (minimum != null) 'minimum': minimum!,
};
}
/// Response for CatalogService.ListCatalogs method.
class GoogleCloudRetailV2ListCatalogsResponse {
/// All the customer's Catalogs.
core.List<GoogleCloudRetailV2Catalog>? catalogs;
/// A token that can be sent as ListCatalogsRequest.page_token to retrieve the
/// next page.
///
/// If this field is omitted, there are no subsequent pages.
core.String? nextPageToken;
GoogleCloudRetailV2ListCatalogsResponse({
this.catalogs,
this.nextPageToken,
});
GoogleCloudRetailV2ListCatalogsResponse.fromJson(core.Map json_)
: this(
catalogs: json_.containsKey('catalogs')
? (json_['catalogs'] as core.List)
.map((value) => GoogleCloudRetailV2Catalog.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
nextPageToken: json_.containsKey('nextPageToken')
? json_['nextPageToken'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (catalogs != null) 'catalogs': catalogs!,
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
};
}
/// Response for ListControls method.
class GoogleCloudRetailV2ListControlsResponse {
/// All the Controls for a given catalog.
core.List<GoogleCloudRetailV2Control>? controls;
/// Pagination token, if not returned indicates the last page.
core.String? nextPageToken;
GoogleCloudRetailV2ListControlsResponse({
this.controls,
this.nextPageToken,
});
GoogleCloudRetailV2ListControlsResponse.fromJson(core.Map json_)
: this(
controls: json_.containsKey('controls')
? (json_['controls'] as core.List)
.map((value) => GoogleCloudRetailV2Control.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
nextPageToken: json_.containsKey('nextPageToken')
? json_['nextPageToken'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (controls != null) 'controls': controls!,
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
};
}
/// Response to a ListModelRequest.
class GoogleCloudRetailV2ListModelsResponse {
/// List of Models.
core.List<GoogleCloudRetailV2Model>? models;
/// Pagination token, if not returned indicates the last page.
core.String? nextPageToken;
GoogleCloudRetailV2ListModelsResponse({
this.models,
this.nextPageToken,
});
GoogleCloudRetailV2ListModelsResponse.fromJson(core.Map json_)
: this(
models: json_.containsKey('models')
? (json_['models'] as core.List)
.map((value) => GoogleCloudRetailV2Model.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
nextPageToken: json_.containsKey('nextPageToken')
? json_['nextPageToken'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (models != null) 'models': models!,
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
};
}
/// Response message for ProductService.ListProducts method.
class GoogleCloudRetailV2ListProductsResponse {
/// A token that can be sent as ListProductsRequest.page_token to retrieve the
/// next page.
///
/// If this field is omitted, there are no subsequent pages.
core.String? nextPageToken;
/// The Products.
core.List<GoogleCloudRetailV2Product>? products;
GoogleCloudRetailV2ListProductsResponse({
this.nextPageToken,
this.products,
});
GoogleCloudRetailV2ListProductsResponse.fromJson(core.Map json_)
: this(
nextPageToken: json_.containsKey('nextPageToken')
? json_['nextPageToken'] as core.String
: null,
products: json_.containsKey('products')
? (json_['products'] as core.List)
.map((value) => GoogleCloudRetailV2Product.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (products != null) 'products': products!,
};
}
/// Response for ListServingConfigs method.
class GoogleCloudRetailV2ListServingConfigsResponse {
/// Pagination token, if not returned indicates the last page.
core.String? nextPageToken;
/// All the ServingConfigs for a given catalog.
core.List<GoogleCloudRetailV2ServingConfig>? servingConfigs;
GoogleCloudRetailV2ListServingConfigsResponse({
this.nextPageToken,
this.servingConfigs,
});
GoogleCloudRetailV2ListServingConfigsResponse.fromJson(core.Map json_)
: this(
nextPageToken: json_.containsKey('nextPageToken')
? json_['nextPageToken'] as core.String
: null,
servingConfigs: json_.containsKey('servingConfigs')
? (json_['servingConfigs'] as core.List)
.map((value) => GoogleCloudRetailV2ServingConfig.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (servingConfigs != null) 'servingConfigs': servingConfigs!,
};
}
/// The inventory information at a place (e.g. a store) identified by a place
/// ID.
class GoogleCloudRetailV2LocalInventory {
/// Additional local inventory attributes, for example, store name, promotion
/// tags, etc.
///
/// This field needs to pass all below criteria, otherwise an INVALID_ARGUMENT
/// error is returned: * At most 30 attributes are allowed. * The key must be
/// a UTF-8 encoded string with a length limit of 32 characters. * The key
/// must match the pattern: `a-zA-Z0-9*`. For example, key0LikeThis or
/// KEY_1_LIKE_THIS. * The attribute values must be of the same type (text or
/// number). * Only 1 value is allowed for each attribute. * For text values,
/// the length limit is 256 UTF-8 characters. * The attribute does not support
/// search. The `searchable` field should be unset or set to false. * The max
/// summed total bytes of custom attribute keys and values per product is
/// 5MiB.
core.Map<core.String, GoogleCloudRetailV2CustomAttribute>? attributes;
/// Input only.
///
/// Supported fulfillment types. Valid fulfillment type values include
/// commonly used types (such as pickup in store and same day delivery), and
/// custom types. Customers have to map custom types to their display names
/// before rendering UI. Supported values: * "pickup-in-store" *
/// "ship-to-store" * "same-day-delivery" * "next-day-delivery" *
/// "custom-type-1" * "custom-type-2" * "custom-type-3" * "custom-type-4" *
/// "custom-type-5" If this field is set to an invalid value other than these,
/// an INVALID_ARGUMENT error is returned. All the elements must be distinct.
/// Otherwise, an INVALID_ARGUMENT error is returned.
core.List<core.String>? fulfillmentTypes;
/// The place ID for the current set of inventory information.
core.String? placeId;
/// Product price and cost information.
///
/// Google Merchant Center property
/// [price](https://support.google.com/merchants/answer/6324371).
GoogleCloudRetailV2PriceInfo? priceInfo;
GoogleCloudRetailV2LocalInventory({
this.attributes,
this.fulfillmentTypes,
this.placeId,
this.priceInfo,
});
GoogleCloudRetailV2LocalInventory.fromJson(core.Map json_)
: this(
attributes: json_.containsKey('attributes')
? (json_['attributes'] as core.Map<core.String, core.dynamic>)
.map(
(key, value) => core.MapEntry(
key,
GoogleCloudRetailV2CustomAttribute.fromJson(
value as core.Map<core.String, core.dynamic>),
),
)
: null,
fulfillmentTypes: json_.containsKey('fulfillmentTypes')
? (json_['fulfillmentTypes'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
placeId: json_.containsKey('placeId')
? json_['placeId'] as core.String
: null,
priceInfo: json_.containsKey('priceInfo')
? GoogleCloudRetailV2PriceInfo.fromJson(
json_['priceInfo'] as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (attributes != null) 'attributes': attributes!,
if (fulfillmentTypes != null) 'fulfillmentTypes': fulfillmentTypes!,
if (placeId != null) 'placeId': placeId!,
if (priceInfo != null) 'priceInfo': priceInfo!,
};
}
/// Metadata that describes the training and serving parameters of a Model.
///
/// A Model can be associated with a ServingConfig and then queried through the
/// Predict API.
class GoogleCloudRetailV2Model {
/// Timestamp the Recommendation Model was created at.
///
/// Output only.
core.String? createTime;
/// The state of data requirements for this model: `DATA_OK` and `DATA_ERROR`.
///
/// Recommendation model cannot be trained if the data is in `DATA_ERROR`
/// state. Recommendation model can have `DATA_ERROR` state even if serving
/// state is `ACTIVE`: models were trained successfully before, but cannot be
/// refreshed because model no longer has sufficient data for training.
///
/// Output only.
/// Possible string values are:
/// - "DATA_STATE_UNSPECIFIED" : Unspecified default value, should never be
/// explicitly set.
/// - "DATA_OK" : The model has sufficient training data.
/// - "DATA_ERROR" : The model does not have sufficient training data. Error
/// messages can be queried via Stackdriver.
core.String? dataState;
/// The display name of the model.
///
/// Should be human readable, used to display Recommendation Models in the
/// Retail Cloud Console Dashboard. UTF-8 encoded string with limit of 1024
/// characters.
///
/// Required.
core.String? displayName;
/// If `RECOMMENDATIONS_FILTERING_ENABLED`, recommendation filtering by
/// attributes is enabled for the model.
///
/// Optional.
/// Possible string values are:
/// - "RECOMMENDATIONS_FILTERING_OPTION_UNSPECIFIED" : Value used when unset.
/// In this case, server behavior defaults to
/// RECOMMENDATIONS_FILTERING_DISABLED.
/// - "RECOMMENDATIONS_FILTERING_DISABLED" : Recommendation filtering is
/// disabled.
/// - "RECOMMENDATIONS_FILTERING_ENABLED" : Recommendation filtering is
/// enabled.
core.String? filteringOption;
/// The timestamp when the latest successful tune finished.
///
/// Output only.
core.String? lastTuneTime;
/// The fully qualified resource name of the model.
///
/// Format:
/// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/models/{model_id}`
/// catalog_id has char limit of 50. recommendation_model_id has char limit of
/// 40.
///
/// Required.
core.String? name;
/// The optimization objective e.g. `cvr`.
///
/// Currently supported values: `ctr`, `cvr`, `revenue-per-order`. If not
/// specified, we choose default based on model type. Default depends on type
/// of recommendation: `recommended-for-you` =\> `ctr` `others-you-may-like`
/// =\> `ctr` `frequently-bought-together` =\> `revenue_per_order` This field
/// together with optimization_objective describe model metadata to use to
/// control model training and serving. See
/// https://cloud.google.com/retail/docs/models for more details on what the
/// model metadata control and which combination of parameters are valid. For
/// invalid combinations of parameters (e.g. type =
/// `frequently-bought-together` and optimization_objective = `ctr`), you
/// receive an error 400 if you try to create/update a recommendation with
/// this set of knobs.
///
/// Optional.
core.String? optimizationObjective;
/// The state of periodic tuning.
///
/// The period we use is 3 months - to do a one-off tune earlier use the
/// `TuneModel` method. Default value is `PERIODIC_TUNING_ENABLED`.
///
/// Optional.
/// Possible string values are:
/// - "PERIODIC_TUNING_STATE_UNSPECIFIED" : Unspecified default value, should
/// never be explicitly set.
/// - "PERIODIC_TUNING_DISABLED" : The model has periodic tuning disabled.
/// Tuning can be reenabled by calling the `EnableModelPeriodicTuning` method
/// or by calling the `TuneModel` method.
/// - "ALL_TUNING_DISABLED" : The model cannot be tuned with periodic tuning
/// OR the `TuneModel` method. Hide the options in customer UI and reject any
/// requests through the backend self serve API.
/// - "PERIODIC_TUNING_ENABLED" : The model has periodic tuning enabled.
/// Tuning can be disabled by calling the `DisableModelPeriodicTuning` method.
core.String? periodicTuningState;
/// The list of valid serving configs associated with the
/// PageOptimizationConfig.
///
/// Output only.
core.List<GoogleCloudRetailV2ModelServingConfigList>? servingConfigLists;
/// The serving state of the model: `ACTIVE`, `NOT_ACTIVE`.
///
/// Output only.
/// Possible string values are:
/// - "SERVING_STATE_UNSPECIFIED" : Unspecified serving state.
/// - "INACTIVE" : The model is not serving.
/// - "ACTIVE" : The model is serving and can be queried.
/// - "TUNED" : The model is trained on tuned hyperparameters and can be
/// queried.
core.String? servingState;
/// The training state that the model is in (e.g. `TRAINING` or `PAUSED`).
///
/// Since part of the cost of running the service is frequency of training -
/// this can be used to determine when to train model in order to control
/// cost. If not specified: the default value for `CreateModel` method is
/// `TRAINING`. The default value for `UpdateModel` method is to keep the
/// state the same as before.
///
/// Optional.
/// Possible string values are:
/// - "TRAINING_STATE_UNSPECIFIED" : Unspecified training state.
/// - "PAUSED" : The model training is paused.
/// - "TRAINING" : The model is training.
core.String? trainingState;
/// The tune operation associated with the model.
///
/// Can be used to determine if there is an ongoing tune for this
/// recommendation. Empty field implies no tune is goig on.
///
/// Output only.
core.String? tuningOperation;
/// The type of model e.g. `home-page`.
///
/// Currently supported values: `recommended-for-you`, `others-you-may-like`,
/// `frequently-bought-together`, `page-optimization`, `similar-items`,
/// `buy-it-again`, `on-sale-items`, and `recently-viewed`(readonly value).
/// This field together with optimization_objective describe model metadata to
/// use to control model training and serving. See
/// https://cloud.google.com/retail/docs/models for more details on what the
/// model metadata control and which combination of parameters are valid. For
/// invalid combinations of parameters (e.g. type =
/// `frequently-bought-together` and optimization_objective = `ctr`), you
/// receive an error 400 if you try to create/update a recommendation with
/// this set of knobs.
///
/// Required.
core.String? type;
/// Timestamp the Recommendation Model was last updated.
///
/// E.g. if a Recommendation Model was paused - this would be the time the
/// pause was initiated.
///
/// Output only.
core.String? updateTime;
GoogleCloudRetailV2Model({
this.createTime,
this.dataState,
this.displayName,
this.filteringOption,
this.lastTuneTime,
this.name,
this.optimizationObjective,
this.periodicTuningState,
this.servingConfigLists,
this.servingState,
this.trainingState,
this.tuningOperation,
this.type,
this.updateTime,
});
GoogleCloudRetailV2Model.fromJson(core.Map json_)
: this(
createTime: json_.containsKey('createTime')
? json_['createTime'] as core.String
: null,
dataState: json_.containsKey('dataState')
? json_['dataState'] as core.String
: null,
displayName: json_.containsKey('displayName')
? json_['displayName'] as core.String
: null,
filteringOption: json_.containsKey('filteringOption')
? json_['filteringOption'] as core.String
: null,
lastTuneTime: json_.containsKey('lastTuneTime')
? json_['lastTuneTime'] as core.String
: null,
name: json_.containsKey('name') ? json_['name'] as core.String : null,
optimizationObjective: json_.containsKey('optimizationObjective')
? json_['optimizationObjective'] as core.String
: null,
periodicTuningState: json_.containsKey('periodicTuningState')
? json_['periodicTuningState'] as core.String
: null,
servingConfigLists: json_.containsKey('servingConfigLists')
? (json_['servingConfigLists'] as core.List)
.map((value) =>
GoogleCloudRetailV2ModelServingConfigList.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
servingState: json_.containsKey('servingState')
? json_['servingState'] as core.String
: null,
trainingState: json_.containsKey('trainingState')
? json_['trainingState'] as core.String
: null,
tuningOperation: json_.containsKey('tuningOperation')
? json_['tuningOperation'] as core.String
: null,
type: json_.containsKey('type') ? json_['type'] as core.String : null,
updateTime: json_.containsKey('updateTime')
? json_['updateTime'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (createTime != null) 'createTime': createTime!,
if (dataState != null) 'dataState': dataState!,
if (displayName != null) 'displayName': displayName!,
if (filteringOption != null) 'filteringOption': filteringOption!,
if (lastTuneTime != null) 'lastTuneTime': lastTuneTime!,
if (name != null) 'name': name!,
if (optimizationObjective != null)
'optimizationObjective': optimizationObjective!,
if (periodicTuningState != null)
'periodicTuningState': periodicTuningState!,
if (servingConfigLists != null)
'servingConfigLists': servingConfigLists!,
if (servingState != null) 'servingState': servingState!,
if (trainingState != null) 'trainingState': trainingState!,
if (tuningOperation != null) 'tuningOperation': tuningOperation!,
if (type != null) 'type': type!,
if (updateTime != null) 'updateTime': updateTime!,
};
}
/// Represents an ordered combination of valid serving configs, which can be
/// used for `PAGE_OPTIMIZATION` recommendations.
class GoogleCloudRetailV2ModelServingConfigList {
/// A set of valid serving configs that may be used for `PAGE_OPTIMIZATION`.
///
/// Optional.
core.List<core.String>? servingConfigIds;
GoogleCloudRetailV2ModelServingConfigList({
this.servingConfigIds,
});
GoogleCloudRetailV2ModelServingConfigList.fromJson(core.Map json_)
: this(
servingConfigIds: json_.containsKey('servingConfigIds')
? (json_['servingConfigIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (servingConfigIds != null) 'servingConfigIds': servingConfigIds!,
};
}
/// Request for pausing training of a model.
typedef GoogleCloudRetailV2PauseModelRequest = $Empty;
/// Request message for Predict method.
class GoogleCloudRetailV2PredictRequest {
/// Filter for restricting prediction results with a length limit of 5,000
/// characters.
///
/// Accepts values for tags and the `filterOutOfStockItems` flag. * Tag
/// expressions. Restricts predictions to products that match all of the
/// specified tags. Boolean operators `OR` and `NOT` are supported if the
/// expression is enclosed in parentheses, and must be separated from the tag
/// values by a space. `-"tagA"` is also supported and is equivalent to `NOT
/// "tagA"`. Tag values must be double quoted UTF-8 encoded strings with a
/// size limit of 1,000 characters. Note: "Recently viewed" models don't
/// support tag filtering at the moment. * filterOutOfStockItems. Restricts
/// predictions to products that do not have a stockState value of
/// OUT_OF_STOCK. Examples: * tag=("Red" OR "Blue") tag="New-Arrival" tag=(NOT
/// "promotional") * filterOutOfStockItems tag=(-"promotional") *
/// filterOutOfStockItems If your filter blocks all prediction results, the
/// API will return *no* results. If instead you want empty result sets to
/// return generic (unfiltered) popular products, set `strictFiltering` to
/// False in `PredictRequest.params`. Note that the API will never return
/// items with storageStatus of "EXPIRED" or "DELETED" regardless of filter
/// choices. If `filterSyntaxV2` is set to true under the `params` field, then
/// attribute-based expressions are expected instead of the above described
/// tag-based syntax. Examples: * (colors: ANY("Red", "Blue")) AND NOT
/// (categories: ANY("Phones")) * (availability: ANY("IN_STOCK")) AND (colors:
/// ANY("Red") OR categories: ANY("Phones")) For more information, see
/// [Filter recommendations](https://cloud.google.com/retail/docs/filter-recs).
core.String? filter;
/// The labels applied to a resource must meet the following requirements: *
/// Each resource can have multiple labels, up to a maximum of 64.
///
/// * Each label must be a key-value pair. * Keys have a minimum length of 1
/// character and a maximum length of 63 characters and cannot be empty.
/// Values can be empty and have a maximum length of 63 characters. * Keys and
/// values can contain only lowercase letters, numeric characters,
/// underscores, and dashes. All characters must use UTF-8 encoding, and
/// international characters are allowed. * The key portion of a label must be
/// unique. However, you can use the same key with multiple resources. * Keys
/// must start with a lowercase letter or international character. See
/// [Google Cloud Document](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements)
/// for more details.
core.Map<core.String, core.String>? labels;
/// Maximum number of results to return.
///
/// Set this property to the number of prediction results needed. If zero, the
/// service will choose a reasonable default. The maximum allowed value is
/// 100. Values above 100 will be coerced to 100.
core.int? pageSize;
/// This field is not used; leave it unset.
core.String? pageToken;
/// Additional domain specific parameters for the predictions.
///
/// Allowed values: * `returnProduct`: Boolean. If set to true, the associated
/// product object will be returned in the `results.metadata` field in the
/// prediction response. * `returnScore`: Boolean. If set to true, the
/// prediction 'score' corresponding to each returned product will be set in
/// the `results.metadata` field in the prediction response. The given 'score'
/// indicates the probability of a product being clicked/purchased given the
/// user's context and history. * `strictFiltering`: Boolean. True by default.
/// If set to false, the service will return generic (unfiltered) popular
/// products instead of empty if your filter blocks all prediction results. *
/// `priceRerankLevel`: String. Default empty. If set to be non-empty, then it
/// needs to be one of {'no-price-reranking', 'low-price-reranking',
/// 'medium-price-reranking', 'high-price-reranking'}. This gives
/// request-level control and adjusts prediction results based on product
/// price. * `diversityLevel`: String. Default empty. If set to be non-empty,
/// then it needs to be one of {'no-diversity', 'low-diversity',
/// 'medium-diversity', 'high-diversity', 'auto-diversity'}. This gives
/// request-level control and adjusts prediction results based on product
/// category. * `filterSyntaxV2`: Boolean. False by default. If set to true,
/// the `filter` field is interpreteted according to the new, attribute-based
/// syntax.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object?>? params;
/// Context about the user, what they are looking at and what action they took
/// to trigger the predict request.
///
/// Note that this user event detail won't be ingested to userEvent logs.
/// Thus, a separate userEvent write request is required for event logging.
/// Don't set UserEvent.visitor_id or UserInfo.user_id to the same fixed ID
/// for different users. If you are trying to receive non-personalized
/// recommendations (not recommended; this can negatively impact model
/// performance), instead set UserEvent.visitor_id to a random unique ID and
/// leave UserInfo.user_id unset.
///
/// Required.
GoogleCloudRetailV2UserEvent? userEvent;
/// Use validate only mode for this prediction query.
///
/// If set to true, a dummy model will be used that returns arbitrary
/// products. Note that the validate only mode should only be used for testing
/// the API, or if the model is not ready.
core.bool? validateOnly;
GoogleCloudRetailV2PredictRequest({
this.filter,
this.labels,
this.pageSize,
this.pageToken,
this.params,
this.userEvent,
this.validateOnly,
});
GoogleCloudRetailV2PredictRequest.fromJson(core.Map json_)
: this(
filter: json_.containsKey('filter')
? json_['filter'] as core.String
: null,
labels: json_.containsKey('labels')
? (json_['labels'] as core.Map<core.String, core.dynamic>).map(
(key, value) => core.MapEntry(
key,
value as core.String,
),
)
: null,
pageSize: json_.containsKey('pageSize')
? json_['pageSize'] as core.int
: null,
pageToken: json_.containsKey('pageToken')
? json_['pageToken'] as core.String
: null,
params: json_.containsKey('params')
? json_['params'] as core.Map<core.String, core.dynamic>
: null,
userEvent: json_.containsKey('userEvent')
? GoogleCloudRetailV2UserEvent.fromJson(
json_['userEvent'] as core.Map<core.String, core.dynamic>)
: null,
validateOnly: json_.containsKey('validateOnly')
? json_['validateOnly'] as core.bool
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (filter != null) 'filter': filter!,
if (labels != null) 'labels': labels!,
if (pageSize != null) 'pageSize': pageSize!,
if (pageToken != null) 'pageToken': pageToken!,
if (params != null) 'params': params!,
if (userEvent != null) 'userEvent': userEvent!,
if (validateOnly != null) 'validateOnly': validateOnly!,
};
}
/// Response message for predict method.
class GoogleCloudRetailV2PredictResponse {
/// A unique attribution token.
///
/// This should be included in the UserEvent logs resulting from this
/// recommendation, which enables accurate attribution of recommendation model
/// performance.
core.String? attributionToken;
/// IDs of products in the request that were missing from the inventory.
core.List<core.String>? missingIds;
/// A list of recommended products.
///
/// The order represents the ranking (from the most relevant product to the
/// least).
core.List<GoogleCloudRetailV2PredictResponsePredictionResult>? results;
/// True if the validateOnly property was set in the request.
core.bool? validateOnly;
GoogleCloudRetailV2PredictResponse({
this.attributionToken,
this.missingIds,
this.results,
this.validateOnly,
});
GoogleCloudRetailV2PredictResponse.fromJson(core.Map json_)
: this(
attributionToken: json_.containsKey('attributionToken')
? json_['attributionToken'] as core.String
: null,
missingIds: json_.containsKey('missingIds')
? (json_['missingIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
results: json_.containsKey('results')
? (json_['results'] as core.List)
.map((value) =>
GoogleCloudRetailV2PredictResponsePredictionResult
.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
validateOnly: json_.containsKey('validateOnly')
? json_['validateOnly'] as core.bool
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (attributionToken != null) 'attributionToken': attributionToken!,
if (missingIds != null) 'missingIds': missingIds!,
if (results != null) 'results': results!,
if (validateOnly != null) 'validateOnly': validateOnly!,
};
}
/// PredictionResult represents the recommendation prediction results.
class GoogleCloudRetailV2PredictResponsePredictionResult {
/// ID of the recommended product
core.String? id;
/// Additional product metadata / annotations.
///
/// Possible values: * `product`: JSON representation of the product. Is set
/// if `returnProduct` is set to true in `PredictRequest.params`. * `score`:
/// Prediction score in double value. Is set if `returnScore` is set to true
/// in `PredictRequest.params`.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object?>? metadata;
GoogleCloudRetailV2PredictResponsePredictionResult({
this.id,
this.metadata,
});
GoogleCloudRetailV2PredictResponsePredictionResult.fromJson(core.Map json_)
: this(
id: json_.containsKey('id') ? json_['id'] as core.String : null,
metadata: json_.containsKey('metadata')
? json_['metadata'] as core.Map<core.String, core.dynamic>
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (id != null) 'id': id!,
if (metadata != null) 'metadata': metadata!,
};
}
/// The price information of a Product.
class GoogleCloudRetailV2PriceInfo {
/// The costs associated with the sale of a particular product.
///
/// Used for gross profit reporting. * Profit = price - cost Google Merchant
/// Center property
/// [cost_of_goods_sold](https://support.google.com/merchants/answer/9017895).
core.double? cost;
/// The 3-letter currency code defined in
/// [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html).
///
/// If this field is an unrecognizable currency code, an INVALID_ARGUMENT
/// error is returned. The Product.Type.VARIANT Products with the same
/// Product.primary_product_id must share the same currency_code. Otherwise, a
/// FAILED_PRECONDITION error is returned.
core.String? currencyCode;
/// Price of the product without any discount.
///
/// If zero, by default set to be the price. If set, original_price should be
/// greater than or equal to price, otherwise an INVALID_ARGUMENT error is
/// thrown.
core.double? originalPrice;
/// Price of the product.
///
/// Google Merchant Center property
/// [price](https://support.google.com/merchants/answer/6324371). Schema.org
/// property [Offer.price](https://schema.org/price).
core.double? price;
/// The timestamp when the price starts to be effective.
///
/// This can be set as a future timestamp, and the price is only used for
/// search after price_effective_time. If so, the original_price must be set
/// and original_price is used before price_effective_time. Do not set if
/// price is always effective because it will cause additional latency during
/// search.
core.String? priceEffectiveTime;
/// The timestamp when the price stops to be effective.
///
/// The price is used for search before price_expire_time. If this field is
/// set, the original_price must be set and original_price is used after
/// price_expire_time. Do not set if price is always effective because it will
/// cause additional latency during search.
core.String? priceExpireTime;
/// The price range of all the child Product.Type.VARIANT Products grouped
/// together on the Product.Type.PRIMARY Product.
///
/// Only populated for Product.Type.PRIMARY Products. Note: This field is
/// OUTPUT_ONLY for ProductService.GetProduct. Do not set this field in API
/// requests.
///
/// Output only.
GoogleCloudRetailV2PriceInfoPriceRange? priceRange;
GoogleCloudRetailV2PriceInfo({
this.cost,
this.currencyCode,
this.originalPrice,
this.price,
this.priceEffectiveTime,
this.priceExpireTime,
this.priceRange,
});
GoogleCloudRetailV2PriceInfo.fromJson(core.Map json_)
: this(
cost: json_.containsKey('cost')
? (json_['cost'] as core.num).toDouble()
: null,
currencyCode: json_.containsKey('currencyCode')
? json_['currencyCode'] as core.String
: null,
originalPrice: json_.containsKey('originalPrice')
? (json_['originalPrice'] as core.num).toDouble()
: null,
price: json_.containsKey('price')
? (json_['price'] as core.num).toDouble()
: null,
priceEffectiveTime: json_.containsKey('priceEffectiveTime')
? json_['priceEffectiveTime'] as core.String
: null,
priceExpireTime: json_.containsKey('priceExpireTime')
? json_['priceExpireTime'] as core.String
: null,
priceRange: json_.containsKey('priceRange')
? GoogleCloudRetailV2PriceInfoPriceRange.fromJson(
json_['priceRange'] as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (cost != null) 'cost': cost!,
if (currencyCode != null) 'currencyCode': currencyCode!,
if (originalPrice != null) 'originalPrice': originalPrice!,
if (price != null) 'price': price!,
if (priceEffectiveTime != null)
'priceEffectiveTime': priceEffectiveTime!,
if (priceExpireTime != null) 'priceExpireTime': priceExpireTime!,
if (priceRange != null) 'priceRange': priceRange!,
};
}
/// The price range of all variant Product having the same
/// Product.primary_product_id.
class GoogleCloudRetailV2PriceInfoPriceRange {
/// The inclusive Product.pricing_info.original_price internal of all variant
/// Product having the same Product.primary_product_id.
GoogleCloudRetailV2Interval? originalPrice;
/// The inclusive Product.pricing_info.price interval of all variant Product
/// having the same Product.primary_product_id.
GoogleCloudRetailV2Interval? price;
GoogleCloudRetailV2PriceInfoPriceRange({
this.originalPrice,
this.price,
});
GoogleCloudRetailV2PriceInfoPriceRange.fromJson(core.Map json_)
: this(
originalPrice: json_.containsKey('originalPrice')
? GoogleCloudRetailV2Interval.fromJson(
json_['originalPrice'] as core.Map<core.String, core.dynamic>)
: null,
price: json_.containsKey('price')
? GoogleCloudRetailV2Interval.fromJson(
json_['price'] as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (originalPrice != null) 'originalPrice': originalPrice!,
if (price != null) 'price': price!,
};
}
/// Product captures all metadata information of items to be recommended or
/// searched.
class GoogleCloudRetailV2Product {
/// Highly encouraged.
///
/// Extra product attributes to be included. For example, for products, this
/// could include the store name, vendor, style, color, etc. These are very
/// strong signals for recommendation model, thus we highly recommend
/// providing the attributes here. Features that can take on one of a limited
/// number of possible values. Two types of features can be set are: Textual
/// features. some examples would be the brand/maker of a product, or country
/// of a customer. Numerical features. Some examples would be the
/// height/weight of a product, or age of a customer. For example: `{
/// "vendor": {"text": ["vendor123", "vendor456"]}, "lengths_cm":
/// {"numbers":[2.3, 15.4]}, "heights_cm": {"numbers":[8.1, 6.4]} }`. This
/// field needs to pass all below criteria, otherwise an INVALID_ARGUMENT
/// error is returned: * Max entries count: 200. * The key must be a UTF-8
/// encoded string with a length limit of 128 characters. * For indexable
/// attribute, the key must match the pattern: `a-zA-Z0-9*`. For example,
/// `key0LikeThis` or `KEY_1_LIKE_THIS`. * For text attributes, at most 400
/// values are allowed. Empty values are not allowed. Each value must be a
/// non-empty UTF-8 encoded string with a length limit of 256 characters. *
/// For number attributes, at most 400 values are allowed.
core.Map<core.String, GoogleCloudRetailV2CustomAttribute>? attributes;
/// The target group associated with a given audience (e.g. male, veterans,
/// car owners, musicians, etc.) of the product.
GoogleCloudRetailV2Audience? audience;
/// The online availability of the Product.
///
/// Default to Availability.IN_STOCK. Corresponding properties: Google
/// Merchant Center property
/// [availability](https://support.google.com/merchants/answer/6324448).
/// Schema.org property [Offer.availability](https://schema.org/availability).
/// Possible string values are:
/// - "AVAILABILITY_UNSPECIFIED" : Default product availability. Default to
/// Availability.IN_STOCK if unset.
/// - "IN_STOCK" : Product in stock.
/// - "OUT_OF_STOCK" : Product out of stock.
/// - "PREORDER" : Product that is in pre-order state.
/// - "BACKORDER" : Product that is back-ordered (i.e. temporarily out of
/// stock).
core.String? availability;
/// The available quantity of the item.
core.int? availableQuantity;
/// The timestamp when this Product becomes available for
/// SearchService.Search.
///
/// Note that this is only applicable to Type.PRIMARY and Type.COLLECTION, and
/// ignored for Type.VARIANT.
core.String? availableTime;
/// The brands of the product.
///
/// A maximum of 30 brands are allowed. Each brand must be a UTF-8 encoded
/// string with a length limit of 1,000 characters. Otherwise, an
/// INVALID_ARGUMENT error is returned. Corresponding properties: Google
/// Merchant Center property
/// [brand](https://support.google.com/merchants/answer/6324351). Schema.org
/// property [Product.brand](https://schema.org/brand).
core.List<core.String>? brands;
/// Product categories.
///
/// This field is repeated for supporting one product belonging to several
/// parallel categories. Strongly recommended using the full path for better
/// search / recommendation quality. To represent full path of category, use
/// '\>' sign to separate different hierarchies. If '\>' is part of the
/// category name, replace it with other character(s). For example, if a shoes
/// product belongs to both \["Shoes & Accessories" -\> "Shoes"\] and
/// \["Sports & Fitness" -\> "Athletic Clothing" -\> "Shoes"\], it could be
/// represented as: "categories": \[ "Shoes & Accessories \> Shoes", "Sports &
/// Fitness \> Athletic Clothing \> Shoes" \] Must be set for Type.PRIMARY
/// Product otherwise an INVALID_ARGUMENT error is returned. At most 250
/// values are allowed per Product. Empty values are not allowed. Each value
/// must be a UTF-8 encoded string with a length limit of 5,000 characters.
/// Otherwise, an INVALID_ARGUMENT error is returned. Corresponding
/// properties: Google Merchant Center property google_product_category.
/// Schema.org property [Product.category](https://schema.org/category).
/// \[mc_google_product_category\]:
/// https://support.google.com/merchants/answer/6324436
core.List<core.String>? categories;
/// The id of the collection members when type is Type.COLLECTION.
///
/// Non-existent product ids are allowed. The type of the members must be
/// either Type.PRIMARY or Type.VARIANT otherwise an INVALID_ARGUMENT error is
/// thrown. Should not set it for other types. A maximum of 1000 values are
/// allowed. Otherwise, an INVALID_ARGUMENT error is return.
core.List<core.String>? collectionMemberIds;
/// The color of the product.
///
/// Corresponding properties: Google Merchant Center property
/// [color](https://support.google.com/merchants/answer/6324487). Schema.org
/// property [Product.color](https://schema.org/color).
GoogleCloudRetailV2ColorInfo? colorInfo;
/// The condition of the product.
///
/// Strongly encouraged to use the standard values: "new", "refurbished",
/// "used". A maximum of 1 value is allowed per Product. Each value must be a
/// UTF-8 encoded string with a length limit of 128 characters. Otherwise, an
/// INVALID_ARGUMENT error is returned. Corresponding properties: Google
/// Merchant Center property
/// [condition](https://support.google.com/merchants/answer/6324469).
/// Schema.org property
/// [Offer.itemCondition](https://schema.org/itemCondition).
core.List<core.String>? conditions;
/// Product description.
///
/// This field must be a UTF-8 encoded string with a length limit of 5,000
/// characters. Otherwise, an INVALID_ARGUMENT error is returned.
/// Corresponding properties: Google Merchant Center property
/// [description](https://support.google.com/merchants/answer/6324468).
/// Schema.org property [Product.description](https://schema.org/description).
core.String? description;
/// The timestamp when this product becomes unavailable for
/// SearchService.Search.
///
/// Note that this is only applicable to Type.PRIMARY and Type.COLLECTION, and
/// ignored for Type.VARIANT. In general, we suggest the users to delete the
/// stale products explicitly, instead of using this field to determine
/// staleness. If it is set, the Product is not available for
/// SearchService.Search after expire_time. However, the product can still be
/// retrieved by ProductService.GetProduct and ProductService.ListProducts.
/// expire_time must be later than available_time and publish_time, otherwise
/// an INVALID_ARGUMENT error is thrown. Corresponding properties: Google
/// Merchant Center property
/// [expiration_date](https://support.google.com/merchants/answer/6324499).
core.String? expireTime;
/// Fulfillment information, such as the store IDs for in-store pickup or
/// region IDs for different shipping methods.
///
/// All the elements must have distinct FulfillmentInfo.type. Otherwise, an
/// INVALID_ARGUMENT error is returned.
core.List<GoogleCloudRetailV2FulfillmentInfo>? fulfillmentInfo;
/// The Global Trade Item Number (GTIN) of the product.
///
/// This field must be a UTF-8 encoded string with a length limit of 128
/// characters. Otherwise, an INVALID_ARGUMENT error is returned. This field
/// must be a Unigram. Otherwise, an INVALID_ARGUMENT error is returned.
/// Corresponding properties: Google Merchant Center property
/// [gtin](https://support.google.com/merchants/answer/6324461). Schema.org
/// property [Product.isbn](https://schema.org/isbn),
/// [Product.gtin8](https://schema.org/gtin8),
/// [Product.gtin12](https://schema.org/gtin12),
/// [Product.gtin13](https://schema.org/gtin13), or
/// [Product.gtin14](https://schema.org/gtin14). If the value is not a valid
/// GTIN, an INVALID_ARGUMENT error is returned.
core.String? gtin;
/// Product identifier, which is the final component of name.
///
/// For example, this field is "id_1", if name is `projects / *
/// /locations/global/catalogs/default_catalog/branches/default_branch/products/id_1`.
/// This field must be a UTF-8 encoded string with a length limit of 128
/// characters. Otherwise, an INVALID_ARGUMENT error is returned.
/// Corresponding properties: Google Merchant Center property
/// [id](https://support.google.com/merchants/answer/6324405). Schema.org
/// property [Product.sku](https://schema.org/sku).
///
/// Immutable.
core.String? id;
/// Product images for the product.
///
/// We highly recommend putting the main image first. A maximum of 300 images
/// are allowed. Corresponding properties: Google Merchant Center property
/// [image_link](https://support.google.com/merchants/answer/6324350).
/// Schema.org property [Product.image](https://schema.org/image).
core.List<GoogleCloudRetailV2Image>? images;
/// Language of the title/description and other string attributes.
///
/// Use language tags defined by
/// [BCP 47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). For product
/// prediction, this field is ignored and the model automatically detects the
/// text language. The Product can include text in different languages, but
/// duplicating Products to provide text in multiple languages can result in
/// degraded model performance. For product search this field is in use. It
/// defaults to "en-US" if unset.
core.String? languageCode;
/// A list of local inventories specific to different places.
///
/// This field can be managed by ProductService.AddLocalInventories and
/// ProductService.RemoveLocalInventories APIs if fine-grained, high-volume
/// updates are necessary.
///
/// Output only.
core.List<GoogleCloudRetailV2LocalInventory>? localInventories;
/// The material of the product.
///
/// For example, "leather", "wooden". A maximum of 20 values are allowed. Each
/// value must be a UTF-8 encoded string with a length limit of 200
/// characters. Otherwise, an INVALID_ARGUMENT error is returned.
/// Corresponding properties: Google Merchant Center property
/// [material](https://support.google.com/merchants/answer/6324410).
/// Schema.org property [Product.material](https://schema.org/material).
core.List<core.String>? materials;
/// Full resource name of the product, such as `projects / *
/// /locations/global/catalogs/default_catalog/branches/default_branch/products/product_id`.
///
/// Immutable.
core.String? name;
/// The pattern or graphic print of the product.
///
/// For example, "striped", "polka dot", "paisley". A maximum of 20 values are
/// allowed per Product. Each value must be a UTF-8 encoded string with a
/// length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is
/// returned. Corresponding properties: Google Merchant Center property
/// [pattern](https://support.google.com/merchants/answer/6324483). Schema.org
/// property [Product.pattern](https://schema.org/pattern).
core.List<core.String>? patterns;
/// Product price and cost information.
///
/// Corresponding properties: Google Merchant Center property
/// [price](https://support.google.com/merchants/answer/6324371).
GoogleCloudRetailV2PriceInfo? priceInfo;
/// Variant group identifier.
///
/// Must be an id, with the same parent branch with this product. Otherwise,
/// an error is thrown. For Type.PRIMARY Products, this field can only be
/// empty or set to the same value as id. For VARIANT Products, this field
/// cannot be empty. A maximum of 2,000 products are allowed to share the same
/// Type.PRIMARY Product. Otherwise, an INVALID_ARGUMENT error is returned.
/// Corresponding properties: Google Merchant Center property
/// [item_group_id](https://support.google.com/merchants/answer/6324507).
/// Schema.org property
/// [Product.inProductGroupWithID](https://schema.org/inProductGroupWithID).
core.String? primaryProductId;
/// The promotions applied to the product.
///
/// A maximum of 10 values are allowed per Product. Only
/// Promotion.promotion_id will be used, other fields will be ignored if set.
core.List<GoogleCloudRetailV2Promotion>? promotions;
/// The timestamp when the product is published by the retailer for the first
/// time, which indicates the freshness of the products.
///
/// Note that this field is different from available_time, given it purely
/// describes product freshness regardless of when it is available on search
/// and recommendation.
core.String? publishTime;
/// The rating of this product.
GoogleCloudRetailV2Rating? rating;
/// Indicates which fields in the Products are returned in SearchResponse.
///
/// Supported fields for all types: * audience * availability * brands *
/// color_info * conditions * gtin * materials * name * patterns * price_info
/// * rating * sizes * title * uri Supported fields only for Type.PRIMARY and
/// Type.COLLECTION: * categories * description * images Supported fields only
/// for Type.VARIANT: * Only the first image in images To mark attributes as
/// retrievable, include paths of the form "attributes.key" where "key" is the
/// key of a custom attribute, as specified in attributes. For Type.PRIMARY
/// and Type.COLLECTION, the following fields are always returned in
/// SearchResponse by default: * name For Type.VARIANT, the following fields
/// are always returned in by default: * name * color_info The maximum number
/// of paths is 30. Otherwise, an INVALID_ARGUMENT error is returned. Note:
/// Returning more fields in SearchResponse can increase response payload size
/// and serving latency. This field is deprecated. Use the retrievable
/// site-wide control instead.
core.String? retrievableFields;
/// The size of the product.
///
/// To represent different size systems or size types, consider using this
/// format: \[\[\[size_system:\]size_type:\]size_value\]. For example, in
/// "US:MENS:M", "US" represents size system; "MENS" represents size type; "M"
/// represents size value. In "GIRLS:27", size system is empty; "GIRLS"
/// represents size type; "27" represents size value. In "32 inches", both
/// size system and size type are empty, while size value is "32 inches". A
/// maximum of 20 values are allowed per Product. Each value must be a UTF-8
/// encoded string with a length limit of 128 characters. Otherwise, an
/// INVALID_ARGUMENT error is returned. Corresponding properties: Google
/// Merchant Center property
/// [size](https://support.google.com/merchants/answer/6324492),
/// [size_type](https://support.google.com/merchants/answer/6324497), and
/// [size_system](https://support.google.com/merchants/answer/6324502).
/// Schema.org property [Product.size](https://schema.org/size).
core.List<core.String>? sizes;
/// Custom tags associated with the product.
///
/// At most 250 values are allowed per Product. This value must be a UTF-8
/// encoded string with a length limit of 1,000 characters. Otherwise, an
/// INVALID_ARGUMENT error is returned. This tag can be used for filtering
/// recommendation results by passing the tag as part of the
/// PredictRequest.filter. Corresponding properties: Google Merchant Center
/// property
/// \[custom_label_0–4\](https://support.google.com/merchants/answer/6324473).
core.List<core.String>? tags;
/// Product title.
///
/// This field must be a UTF-8 encoded string with a length limit of 1,000
/// characters. Otherwise, an INVALID_ARGUMENT error is returned.
/// Corresponding properties: Google Merchant Center property
/// [title](https://support.google.com/merchants/answer/6324415). Schema.org
/// property [Product.name](https://schema.org/name).
///
/// Required.
core.String? title;
/// Input only.
///
/// The TTL (time to live) of the product. Note that this is only applicable
/// to Type.PRIMARY and Type.COLLECTION, and ignored for Type.VARIANT. In
/// general, we suggest the users to delete the stale products explicitly,
/// instead of using this field to determine staleness. If it is set, it must
/// be a non-negative value, and expire_time is set as current timestamp plus
/// ttl. The derived expire_time is returned in the output and ttl is left
/// blank when retrieving the Product. If it is set, the product is not
/// available for SearchService.Search after current timestamp plus ttl.
/// However, the product can still be retrieved by ProductService.GetProduct
/// and ProductService.ListProducts.
core.String? ttl;
/// The type of the product.
///
/// Default to Catalog.product_level_config.ingestion_product_type if unset.
///
/// Immutable.
/// Possible string values are:
/// - "TYPE_UNSPECIFIED" : Default value. Default to
/// Catalog.product_level_config.ingestion_product_type if unset.
/// - "PRIMARY" : The primary type. As the primary unit for predicting,
/// indexing and search serving, a Type.PRIMARY Product is grouped with
/// multiple Type.VARIANT Products.
/// - "VARIANT" : The variant type. Type.VARIANT Products usually share some
/// common attributes on the same Type.PRIMARY Products, but they have variant
/// attributes like different colors, sizes and prices, etc.
/// - "COLLECTION" : The collection type. Collection products are bundled
/// Type.PRIMARY Products or Type.VARIANT Products that are sold together,
/// such as a jewelry set with necklaces, earrings and rings, etc.
core.String? type;
/// Canonical URL directly linking to the product detail page.
///
/// It is strongly recommended to provide a valid uri for the product,
/// otherwise the service performance could be significantly degraded. This
/// field must be a UTF-8 encoded string with a length limit of 5,000
/// characters. Otherwise, an INVALID_ARGUMENT error is returned.
/// Corresponding properties: Google Merchant Center property
/// [link](https://support.google.com/merchants/answer/6324416). Schema.org
/// property [Offer.url](https://schema.org/url).
core.String? uri;
/// Product variants grouped together on primary product which share similar
/// product attributes.
///
/// It's automatically grouped by primary_product_id for all the product
/// variants. Only populated for Type.PRIMARY Products. Note: This field is
/// OUTPUT_ONLY for ProductService.GetProduct. Do not set this field in API
/// requests.
///
/// Output only.
core.List<GoogleCloudRetailV2Product>? variants;
GoogleCloudRetailV2Product({
this.attributes,
this.audience,
this.availability,
this.availableQuantity,
this.availableTime,
this.brands,
this.categories,
this.collectionMemberIds,
this.colorInfo,
this.conditions,
this.description,
this.expireTime,
this.fulfillmentInfo,
this.gtin,
this.id,
this.images,
this.languageCode,
this.localInventories,
this.materials,
this.name,
this.patterns,
this.priceInfo,
this.primaryProductId,
this.promotions,
this.publishTime,
this.rating,
this.retrievableFields,
this.sizes,
this.tags,
this.title,
this.ttl,
this.type,
this.uri,
this.variants,
});
GoogleCloudRetailV2Product.fromJson(core.Map json_)
: this(
attributes: json_.containsKey('attributes')
? (json_['attributes'] as core.Map<core.String, core.dynamic>)
.map(
(key, value) => core.MapEntry(
key,
GoogleCloudRetailV2CustomAttribute.fromJson(
value as core.Map<core.String, core.dynamic>),
),
)
: null,
audience: json_.containsKey('audience')
? GoogleCloudRetailV2Audience.fromJson(
json_['audience'] as core.Map<core.String, core.dynamic>)
: null,
availability: json_.containsKey('availability')
? json_['availability'] as core.String
: null,
availableQuantity: json_.containsKey('availableQuantity')
? json_['availableQuantity'] as core.int
: null,
availableTime: json_.containsKey('availableTime')
? json_['availableTime'] as core.String
: null,
brands: json_.containsKey('brands')
? (json_['brands'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
categories: json_.containsKey('categories')
? (json_['categories'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
collectionMemberIds: json_.containsKey('collectionMemberIds')
? (json_['collectionMemberIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
colorInfo: json_.containsKey('colorInfo')
? GoogleCloudRetailV2ColorInfo.fromJson(
json_['colorInfo'] as core.Map<core.String, core.dynamic>)
: null,
conditions: json_.containsKey('conditions')
? (json_['conditions'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
description: json_.containsKey('description')
? json_['description'] as core.String
: null,
expireTime: json_.containsKey('expireTime')
? json_['expireTime'] as core.String
: null,
fulfillmentInfo: json_.containsKey('fulfillmentInfo')
? (json_['fulfillmentInfo'] as core.List)
.map((value) => GoogleCloudRetailV2FulfillmentInfo.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
gtin: json_.containsKey('gtin') ? json_['gtin'] as core.String : null,
id: json_.containsKey('id') ? json_['id'] as core.String : null,
images: json_.containsKey('images')
? (json_['images'] as core.List)
.map((value) => GoogleCloudRetailV2Image.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
languageCode: json_.containsKey('languageCode')
? json_['languageCode'] as core.String
: null,
localInventories: json_.containsKey('localInventories')
? (json_['localInventories'] as core.List)
.map((value) => GoogleCloudRetailV2LocalInventory.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
materials: json_.containsKey('materials')
? (json_['materials'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
name: json_.containsKey('name') ? json_['name'] as core.String : null,
patterns: json_.containsKey('patterns')
? (json_['patterns'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
priceInfo: json_.containsKey('priceInfo')
? GoogleCloudRetailV2PriceInfo.fromJson(
json_['priceInfo'] as core.Map<core.String, core.dynamic>)
: null,
primaryProductId: json_.containsKey('primaryProductId')
? json_['primaryProductId'] as core.String
: null,
promotions: json_.containsKey('promotions')
? (json_['promotions'] as core.List)
.map((value) => GoogleCloudRetailV2Promotion.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
publishTime: json_.containsKey('publishTime')
? json_['publishTime'] as core.String
: null,
rating: json_.containsKey('rating')
? GoogleCloudRetailV2Rating.fromJson(
json_['rating'] as core.Map<core.String, core.dynamic>)
: null,
retrievableFields: json_.containsKey('retrievableFields')
? json_['retrievableFields'] as core.String
: null,
sizes: json_.containsKey('sizes')
? (json_['sizes'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
tags: json_.containsKey('tags')
? (json_['tags'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
title:
json_.containsKey('title') ? json_['title'] as core.String : null,
ttl: json_.containsKey('ttl') ? json_['ttl'] as core.String : null,
type: json_.containsKey('type') ? json_['type'] as core.String : null,
uri: json_.containsKey('uri') ? json_['uri'] as core.String : null,
variants: json_.containsKey('variants')
? (json_['variants'] as core.List)
.map((value) => GoogleCloudRetailV2Product.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (attributes != null) 'attributes': attributes!,
if (audience != null) 'audience': audience!,
if (availability != null) 'availability': availability!,
if (availableQuantity != null) 'availableQuantity': availableQuantity!,
if (availableTime != null) 'availableTime': availableTime!,
if (brands != null) 'brands': brands!,
if (categories != null) 'categories': categories!,
if (collectionMemberIds != null)
'collectionMemberIds': collectionMemberIds!,
if (colorInfo != null) 'colorInfo': colorInfo!,
if (conditions != null) 'conditions': conditions!,
if (description != null) 'description': description!,
if (expireTime != null) 'expireTime': expireTime!,
if (fulfillmentInfo != null) 'fulfillmentInfo': fulfillmentInfo!,
if (gtin != null) 'gtin': gtin!,
if (id != null) 'id': id!,
if (images != null) 'images': images!,
if (languageCode != null) 'languageCode': languageCode!,
if (localInventories != null) 'localInventories': localInventories!,
if (materials != null) 'materials': materials!,
if (name != null) 'name': name!,
if (patterns != null) 'patterns': patterns!,
if (priceInfo != null) 'priceInfo': priceInfo!,
if (primaryProductId != null) 'primaryProductId': primaryProductId!,
if (promotions != null) 'promotions': promotions!,
if (publishTime != null) 'publishTime': publishTime!,
if (rating != null) 'rating': rating!,
if (retrievableFields != null) 'retrievableFields': retrievableFields!,
if (sizes != null) 'sizes': sizes!,
if (tags != null) 'tags': tags!,
if (title != null) 'title': title!,
if (ttl != null) 'ttl': ttl!,
if (type != null) 'type': type!,
if (uri != null) 'uri': uri!,
if (variants != null) 'variants': variants!,
};
}
/// Detailed product information associated with a user event.
class GoogleCloudRetailV2ProductDetail {
/// Product information.
///
/// Required field(s): * Product.id Optional override field(s): *
/// Product.price_info If any supported optional fields are provided, we will
/// treat them as a full override when looking up product information from the
/// catalog. Thus, it is important to ensure that the overriding fields are
/// accurate and complete. All other product fields are ignored and instead
/// populated via catalog lookup after event ingestion.
///
/// Required.
GoogleCloudRetailV2Product? product;
/// Quantity of the product associated with the user event.
///
/// For example, this field will be 2 if two products are added to the
/// shopping cart for `purchase-complete` event. Required for `add-to-cart`
/// and `purchase-complete` event types.
core.int? quantity;
GoogleCloudRetailV2ProductDetail({
this.product,
this.quantity,
});
GoogleCloudRetailV2ProductDetail.fromJson(core.Map json_)
: this(
product: json_.containsKey('product')
? GoogleCloudRetailV2Product.fromJson(
json_['product'] as core.Map<core.String, core.dynamic>)
: null,
quantity: json_.containsKey('quantity')
? json_['quantity'] as core.int
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (product != null) 'product': product!,
if (quantity != null) 'quantity': quantity!,
};
}
/// The inline source for the input config for ImportProducts method.
class GoogleCloudRetailV2ProductInlineSource {
/// A list of products to update/create.
///
/// Each product must have a valid Product.id. Recommended max of 100 items.
///
/// Required.
core.List<GoogleCloudRetailV2Product>? products;
GoogleCloudRetailV2ProductInlineSource({
this.products,
});
GoogleCloudRetailV2ProductInlineSource.fromJson(core.Map json_)
: this(
products: json_.containsKey('products')
? (json_['products'] as core.List)
.map((value) => GoogleCloudRetailV2Product.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (products != null) 'products': products!,
};
}
/// The input config source for products.
class GoogleCloudRetailV2ProductInputConfig {
/// BigQuery input source.
GoogleCloudRetailV2BigQuerySource? bigQuerySource;
/// Google Cloud Storage location for the input content.
GoogleCloudRetailV2GcsSource? gcsSource;
/// The Inline source for the input content for products.
GoogleCloudRetailV2ProductInlineSource? productInlineSource;
GoogleCloudRetailV2ProductInputConfig({
this.bigQuerySource,
this.gcsSource,
this.productInlineSource,
});
GoogleCloudRetailV2ProductInputConfig.fromJson(core.Map json_)
: this(
bigQuerySource: json_.containsKey('bigQuerySource')
? GoogleCloudRetailV2BigQuerySource.fromJson(
json_['bigQuerySource']
as core.Map<core.String, core.dynamic>)
: null,
gcsSource: json_.containsKey('gcsSource')
? GoogleCloudRetailV2GcsSource.fromJson(
json_['gcsSource'] as core.Map<core.String, core.dynamic>)
: null,
productInlineSource: json_.containsKey('productInlineSource')
? GoogleCloudRetailV2ProductInlineSource.fromJson(
json_['productInlineSource']
as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (bigQuerySource != null) 'bigQuerySource': bigQuerySource!,
if (gcsSource != null) 'gcsSource': gcsSource!,
if (productInlineSource != null)
'productInlineSource': productInlineSource!,
};
}
/// Configures what level the product should be uploaded with regards to how
/// users will be send events and how predictions will be made.
class GoogleCloudRetailV2ProductLevelConfig {
/// The type of Products allowed to be ingested into the catalog.
///
/// Acceptable values are: * `primary` (default): You can ingest Products of
/// all types. When ingesting a Product, its type will default to
/// Product.Type.PRIMARY if unset. * `variant` (incompatible with Retail
/// Search): You can only ingest Product.Type.VARIANT Products. This means
/// Product.primary_product_id cannot be empty. If this field is set to an
/// invalid value other than these, an INVALID_ARGUMENT error is returned. If
/// this field is `variant` and merchant_center_product_id_field is
/// `itemGroupId`, an INVALID_ARGUMENT error is returned. See
/// [Product levels](https://cloud.google.com/retail/docs/catalog#product-levels)
/// for more details.
core.String? ingestionProductType;
/// Which field of \[Merchant Center
/// Product\](/bigquery-transfer/docs/merchant-center-products-schema) should
/// be imported as Product.id.
///
/// Acceptable values are: * `offerId` (default): Import `offerId` as the
/// product ID. * `itemGroupId`: Import `itemGroupId` as the product ID.
/// Notice that Retail API will choose one item from the ones with the same
/// `itemGroupId`, and use it to represent the item group. If this field is
/// set to an invalid value other than these, an INVALID_ARGUMENT error is
/// returned. If this field is `itemGroupId` and ingestion_product_type is
/// `variant`, an INVALID_ARGUMENT error is returned. See
/// [Product levels](https://cloud.google.com/retail/docs/catalog#product-levels)
/// for more details.
core.String? merchantCenterProductIdField;
GoogleCloudRetailV2ProductLevelConfig({
this.ingestionProductType,
this.merchantCenterProductIdField,
});
GoogleCloudRetailV2ProductLevelConfig.fromJson(core.Map json_)
: this(
ingestionProductType: json_.containsKey('ingestionProductType')
? json_['ingestionProductType'] as core.String
: null,
merchantCenterProductIdField:
json_.containsKey('merchantCenterProductIdField')
? json_['merchantCenterProductIdField'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (ingestionProductType != null)
'ingestionProductType': ingestionProductType!,
if (merchantCenterProductIdField != null)
'merchantCenterProductIdField': merchantCenterProductIdField!,
};
}
/// Promotion specification.
class GoogleCloudRetailV2Promotion {
/// Promotion identifier, which is the final component of name.
///
/// For example, this field is "free_gift", if name is `projects / *
/// /locations/global/catalogs/default_catalog/promotions/free_gift`. The
/// value must be a UTF-8 encoded string with a length limit of 128
/// characters, and match the pattern: `a-zA-Z*`. For example, id0LikeThis or
/// ID_1_LIKE_THIS. Otherwise, an INVALID_ARGUMENT error is returned.
/// Corresponds to Google Merchant Center property
/// [promotion_id](https://support.google.com/merchants/answer/7050148).
core.String? promotionId;
GoogleCloudRetailV2Promotion({
this.promotionId,
});
GoogleCloudRetailV2Promotion.fromJson(core.Map json_)
: this(
promotionId: json_.containsKey('promotionId')
? json_['promotionId'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (promotionId != null) 'promotionId': promotionId!,
};
}
/// A transaction represents the entire purchase transaction.
class GoogleCloudRetailV2PurchaseTransaction {
/// All the costs associated with the products.
///
/// These can be manufacturing costs, shipping expenses not borne by the end
/// user, or any other costs, such that: * Profit = revenue - tax - cost
core.double? cost;
/// Currency code.
///
/// Use three-character ISO-4217 code.
///
/// Required.
core.String? currencyCode;
/// The transaction ID with a length limit of 128 characters.
core.String? id;
/// Total non-zero revenue or grand total associated with the transaction.
///
/// This value include shipping, tax, or other adjustments to total revenue
/// that you want to include as part of your revenue calculations.
///
/// Required.
core.double? revenue;
/// All the taxes associated with the transaction.
core.double? tax;
GoogleCloudRetailV2PurchaseTransaction({
this.cost,
this.currencyCode,
this.id,
this.revenue,
this.tax,
});
GoogleCloudRetailV2PurchaseTransaction.fromJson(core.Map json_)
: this(
cost: json_.containsKey('cost')
? (json_['cost'] as core.num).toDouble()
: null,
currencyCode: json_.containsKey('currencyCode')
? json_['currencyCode'] as core.String
: null,
id: json_.containsKey('id') ? json_['id'] as core.String : null,
revenue: json_.containsKey('revenue')
? (json_['revenue'] as core.num).toDouble()
: null,
tax: json_.containsKey('tax')
? (json_['tax'] as core.num).toDouble()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (cost != null) 'cost': cost!,
if (currencyCode != null) 'currencyCode': currencyCode!,
if (id != null) 'id': id!,
if (revenue != null) 'revenue': revenue!,
if (tax != null) 'tax': tax!,
};
}
/// Request message for PurgeUserEvents method.
class GoogleCloudRetailV2PurgeUserEventsRequest {
/// The filter string to specify the events to be deleted with a length limit
/// of 5,000 characters.
///
/// Empty string filter is not allowed. The eligible fields for filtering are:
/// * `eventType`: Double quoted UserEvent.event_type string. * `eventTime`:
/// in ISO 8601 "zulu" format. * `visitorId`: Double quoted string. Specifying
/// this will delete all events associated with a visitor. * `userId`: Double
/// quoted string. Specifying this will delete all events associated with a
/// user. Examples: * Deleting all events in a time range: `eventTime >
/// "2012-04-23T18:25:43.511Z" eventTime < "2012-04-23T18:30:43.511Z"` *
/// Deleting specific eventType in time range: `eventTime >
/// "2012-04-23T18:25:43.511Z" eventType = "detail-page-view"` * Deleting all
/// events for a specific visitor: `visitorId = "visitor1024"` The filtering
/// fields are assumed to have an implicit AND.
///
/// Required.
core.String? filter;
/// Actually perform the purge.
///
/// If `force` is set to false, the method will return the expected purge
/// count without deleting any user events.
core.bool? force;
GoogleCloudRetailV2PurgeUserEventsRequest({
this.filter,
this.force,
});
GoogleCloudRetailV2PurgeUserEventsRequest.fromJson(core.Map json_)
: this(
filter: json_.containsKey('filter')
? json_['filter'] as core.String
: null,
force:
json_.containsKey('force') ? json_['force'] as core.bool : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (filter != null) 'filter': filter!,
if (force != null) 'force': force!,
};
}
/// The rating of a Product.
class GoogleCloudRetailV2Rating {
/// The average rating of the Product.
///
/// The rating is scaled at 1-5. Otherwise, an INVALID_ARGUMENT error is
/// returned.
core.double? averageRating;
/// The total number of ratings.
///
/// This value is independent of the value of rating_histogram. This value
/// must be nonnegative. Otherwise, an INVALID_ARGUMENT error is returned.
core.int? ratingCount;
/// List of rating counts per rating value (index = rating - 1).
///
/// The list is empty if there is no rating. If the list is non-empty, its
/// size is always 5. Otherwise, an INVALID_ARGUMENT error is returned. For
/// example, \[41, 14, 13, 47, 303\]. It means that the Product got 41 ratings
/// with 1 star, 14 ratings with 2 star, and so on.
core.List<core.int>? ratingHistogram;
GoogleCloudRetailV2Rating({
this.averageRating,
this.ratingCount,
this.ratingHistogram,
});
GoogleCloudRetailV2Rating.fromJson(core.Map json_)
: this(
averageRating: json_.containsKey('averageRating')
? (json_['averageRating'] as core.num).toDouble()
: null,
ratingCount: json_.containsKey('ratingCount')
? json_['ratingCount'] as core.int
: null,
ratingHistogram: json_.containsKey('ratingHistogram')
? (json_['ratingHistogram'] as core.List)
.map((value) => value as core.int)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (averageRating != null) 'averageRating': averageRating!,
if (ratingCount != null) 'ratingCount': ratingCount!,
if (ratingHistogram != null) 'ratingHistogram': ratingHistogram!,
};
}
/// Request message for RejoinUserEvents method.
class GoogleCloudRetailV2RejoinUserEventsRequest {
/// The type of the user event rejoin to define the scope and range of the
/// user events to be rejoined with the latest product catalog.
///
/// Defaults to `USER_EVENT_REJOIN_SCOPE_UNSPECIFIED` if this field is not
/// set, or set to an invalid integer value.
/// Possible string values are:
/// - "USER_EVENT_REJOIN_SCOPE_UNSPECIFIED" : Rejoin all events with the
/// latest product catalog, including both joined events and unjoined events.
/// - "JOINED_EVENTS" : Only rejoin joined events with the latest product
/// catalog.
/// - "UNJOINED_EVENTS" : Only rejoin unjoined events with the latest product
/// catalog.
core.String? userEventRejoinScope;
GoogleCloudRetailV2RejoinUserEventsRequest({
this.userEventRejoinScope,
});
GoogleCloudRetailV2RejoinUserEventsRequest.fromJson(core.Map json_)
: this(
userEventRejoinScope: json_.containsKey('userEventRejoinScope')
? json_['userEventRejoinScope'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (userEventRejoinScope != null)
'userEventRejoinScope': userEventRejoinScope!,
};
}
/// Request for CatalogService.RemoveCatalogAttribute method.
class GoogleCloudRetailV2RemoveCatalogAttributeRequest {
/// The attribute name key of the CatalogAttribute to remove.
///
/// Required.
core.String? key;
GoogleCloudRetailV2RemoveCatalogAttributeRequest({
this.key,
});
GoogleCloudRetailV2RemoveCatalogAttributeRequest.fromJson(core.Map json_)
: this(
key: json_.containsKey('key') ? json_['key'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (key != null) 'key': key!,
};
}
/// Request for RemoveControl method.
class GoogleCloudRetailV2RemoveControlRequest {
/// The id of the control to apply.
///
/// Assumed to be in the same catalog as the serving config.
///
/// Required.
core.String? controlId;
GoogleCloudRetailV2RemoveControlRequest({
this.controlId,
});
GoogleCloudRetailV2RemoveControlRequest.fromJson(core.Map json_)
: this(
controlId: json_.containsKey('controlId')
? json_['controlId'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (controlId != null) 'controlId': controlId!,
};
}
/// Request message for ProductService.RemoveFulfillmentPlaces method.
class GoogleCloudRetailV2RemoveFulfillmentPlacesRequest {
/// If set to true, and the Product is not found, the fulfillment information
/// will still be processed and retained for at most 1 day and processed once
/// the Product is created.
///
/// If set to false, a NOT_FOUND error is returned if the Product is not
/// found.
core.bool? allowMissing;
/// The IDs for this type, such as the store IDs for "pickup-in-store" or the
/// region IDs for "same-day-delivery", to be removed for this type.
///
/// At least 1 value is required, and a maximum of 2000 values are allowed.
/// Each value must be a string with a length limit of 10 characters, matching
/// the pattern `[a-zA-Z0-9_-]+`, such as "store1" or "REGION-2". Otherwise,
/// an INVALID_ARGUMENT error is returned.
///
/// Required.
core.List<core.String>? placeIds;
/// The time when the fulfillment updates are issued, used to prevent
/// out-of-order updates on fulfillment information.
///
/// If not provided, the internal system time will be used.
core.String? removeTime;
/// The fulfillment type, including commonly used types (such as pickup in
/// store and same day delivery), and custom types.
///
/// Supported values: * "pickup-in-store" * "ship-to-store" *
/// "same-day-delivery" * "next-day-delivery" * "custom-type-1" *
/// "custom-type-2" * "custom-type-3" * "custom-type-4" * "custom-type-5" If
/// this field is set to an invalid value other than these, an
/// INVALID_ARGUMENT error is returned. This field directly corresponds to
/// Product.fulfillment_info.type.
///
/// Required.
core.String? type;
GoogleCloudRetailV2RemoveFulfillmentPlacesRequest({
this.allowMissing,
this.placeIds,
this.removeTime,
this.type,
});
GoogleCloudRetailV2RemoveFulfillmentPlacesRequest.fromJson(core.Map json_)
: this(
allowMissing: json_.containsKey('allowMissing')
? json_['allowMissing'] as core.bool
: null,
placeIds: json_.containsKey('placeIds')
? (json_['placeIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
removeTime: json_.containsKey('removeTime')
? json_['removeTime'] as core.String
: null,
type: json_.containsKey('type') ? json_['type'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (allowMissing != null) 'allowMissing': allowMissing!,
if (placeIds != null) 'placeIds': placeIds!,
if (removeTime != null) 'removeTime': removeTime!,
if (type != null) 'type': type!,
};
}
/// Request message for ProductService.RemoveLocalInventories method.
class GoogleCloudRetailV2RemoveLocalInventoriesRequest {
/// If set to true, and the Product is not found, the local inventory removal
/// request will still be processed and retained for at most 1 day and
/// processed once the Product is created.
///
/// If set to false, a NOT_FOUND error is returned if the Product is not
/// found.
core.bool? allowMissing;
/// A list of place IDs to have their inventory deleted.
///
/// At most 3000 place IDs are allowed per request.
///
/// Required.
core.List<core.String>? placeIds;
/// The time when the inventory deletions are issued.
///
/// Used to prevent out-of-order updates and deletions on local inventory
/// fields. If not provided, the internal system time will be used.
core.String? removeTime;
GoogleCloudRetailV2RemoveLocalInventoriesRequest({
this.allowMissing,
this.placeIds,
this.removeTime,
});
GoogleCloudRetailV2RemoveLocalInventoriesRequest.fromJson(core.Map json_)
: this(
allowMissing: json_.containsKey('allowMissing')
? json_['allowMissing'] as core.bool
: null,
placeIds: json_.containsKey('placeIds')
? (json_['placeIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
removeTime: json_.containsKey('removeTime')
? json_['removeTime'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (allowMissing != null) 'allowMissing': allowMissing!,
if (placeIds != null) 'placeIds': placeIds!,
if (removeTime != null) 'removeTime': removeTime!,
};
}
/// Request for CatalogService.ReplaceCatalogAttribute method.
class GoogleCloudRetailV2ReplaceCatalogAttributeRequest {
/// The updated CatalogAttribute.
///
/// Required.
GoogleCloudRetailV2CatalogAttribute? catalogAttribute;
/// Indicates which fields in the provided CatalogAttribute to update.
///
/// The following are NOT supported: * CatalogAttribute.key If not set, all
/// supported fields are updated.
core.String? updateMask;
GoogleCloudRetailV2ReplaceCatalogAttributeRequest({
this.catalogAttribute,
this.updateMask,
});
GoogleCloudRetailV2ReplaceCatalogAttributeRequest.fromJson(core.Map json_)
: this(
catalogAttribute: json_.containsKey('catalogAttribute')
? GoogleCloudRetailV2CatalogAttribute.fromJson(
json_['catalogAttribute']
as core.Map<core.String, core.dynamic>)
: null,
updateMask: json_.containsKey('updateMask')
? json_['updateMask'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (catalogAttribute != null) 'catalogAttribute': catalogAttribute!,
if (updateMask != null) 'updateMask': updateMask!,
};
}
/// Request for resuming training of a model.
typedef GoogleCloudRetailV2ResumeModelRequest = $Empty;
/// A rule is a condition-action pair * A condition defines when a rule is to be
/// triggered.
///
/// * An action specifies what occurs on that trigger. Currently rules only work
/// for controls with SOLUTION_TYPE_SEARCH.
class GoogleCloudRetailV2Rule {
/// A boost action.
GoogleCloudRetailV2RuleBoostAction? boostAction;
/// The condition that triggers the rule.
///
/// If the condition is empty, the rule will always apply.
///
/// Required.
GoogleCloudRetailV2Condition? condition;
/// Prevents term from being associated with other terms.
GoogleCloudRetailV2RuleDoNotAssociateAction? doNotAssociateAction;
/// Filters results.
GoogleCloudRetailV2RuleFilterAction? filterAction;
/// Ignores specific terms from query during search.
GoogleCloudRetailV2RuleIgnoreAction? ignoreAction;
/// Treats specific term as a synonym with a group of terms.
///
/// Group of terms will not be treated as synonyms with the specific term.
GoogleCloudRetailV2RuleOnewaySynonymsAction? onewaySynonymsAction;
/// Redirects a shopper to a specific page.
GoogleCloudRetailV2RuleRedirectAction? redirectAction;
/// Replaces specific terms in the query.
GoogleCloudRetailV2RuleReplacementAction? replacementAction;
/// Treats a set of terms as synonyms of one another.
GoogleCloudRetailV2RuleTwowaySynonymsAction? twowaySynonymsAction;
GoogleCloudRetailV2Rule({
this.boostAction,
this.condition,
this.doNotAssociateAction,
this.filterAction,
this.ignoreAction,
this.onewaySynonymsAction,
this.redirectAction,
this.replacementAction,
this.twowaySynonymsAction,
});
GoogleCloudRetailV2Rule.fromJson(core.Map json_)
: this(
boostAction: json_.containsKey('boostAction')
? GoogleCloudRetailV2RuleBoostAction.fromJson(
json_['boostAction'] as core.Map<core.String, core.dynamic>)
: null,
condition: json_.containsKey('condition')
? GoogleCloudRetailV2Condition.fromJson(
json_['condition'] as core.Map<core.String, core.dynamic>)
: null,
doNotAssociateAction: json_.containsKey('doNotAssociateAction')
? GoogleCloudRetailV2RuleDoNotAssociateAction.fromJson(
json_['doNotAssociateAction']
as core.Map<core.String, core.dynamic>)
: null,
filterAction: json_.containsKey('filterAction')
? GoogleCloudRetailV2RuleFilterAction.fromJson(
json_['filterAction'] as core.Map<core.String, core.dynamic>)
: null,
ignoreAction: json_.containsKey('ignoreAction')
? GoogleCloudRetailV2RuleIgnoreAction.fromJson(
json_['ignoreAction'] as core.Map<core.String, core.dynamic>)
: null,
onewaySynonymsAction: json_.containsKey('onewaySynonymsAction')
? GoogleCloudRetailV2RuleOnewaySynonymsAction.fromJson(
json_['onewaySynonymsAction']
as core.Map<core.String, core.dynamic>)
: null,
redirectAction: json_.containsKey('redirectAction')
? GoogleCloudRetailV2RuleRedirectAction.fromJson(
json_['redirectAction']
as core.Map<core.String, core.dynamic>)
: null,
replacementAction: json_.containsKey('replacementAction')
? GoogleCloudRetailV2RuleReplacementAction.fromJson(
json_['replacementAction']
as core.Map<core.String, core.dynamic>)
: null,
twowaySynonymsAction: json_.containsKey('twowaySynonymsAction')
? GoogleCloudRetailV2RuleTwowaySynonymsAction.fromJson(
json_['twowaySynonymsAction']
as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (boostAction != null) 'boostAction': boostAction!,
if (condition != null) 'condition': condition!,
if (doNotAssociateAction != null)
'doNotAssociateAction': doNotAssociateAction!,
if (filterAction != null) 'filterAction': filterAction!,
if (ignoreAction != null) 'ignoreAction': ignoreAction!,
if (onewaySynonymsAction != null)
'onewaySynonymsAction': onewaySynonymsAction!,
if (redirectAction != null) 'redirectAction': redirectAction!,
if (replacementAction != null) 'replacementAction': replacementAction!,
if (twowaySynonymsAction != null)
'twowaySynonymsAction': twowaySynonymsAction!,
};
}
/// A boost action to apply to results matching condition specified above.
class GoogleCloudRetailV2RuleBoostAction {
/// Strength of the condition boost, which must be in \[-1, 1\].
///
/// Negative boost means demotion. Default is 0.0. Setting to 1.0 gives the
/// item a big promotion. However, it does not necessarily mean that the
/// boosted item will be the top result at all times, nor that other items
/// will be excluded. Results could still be shown even when none of them
/// matches the condition. And results that are significantly more relevant to
/// the search query can still trump your heavily favored but irrelevant
/// items. Setting to -1.0 gives the item a big demotion. However, results
/// that are deeply relevant might still be shown. The item will have an
/// upstream battle to get a fairly high ranking, but it is not blocked out
/// completely. Setting to 0.0 means no boost applied. The boosting condition
/// is ignored.
core.double? boost;
/// The filter can have a max size of 5000 characters.
///
/// An expression which specifies which products to apply an action to. The
/// syntax and supported fields are the same as a filter expression. See
/// SearchRequest.filter for detail syntax and limitations. Examples: * To
/// boost products with product ID "product_1" or "product_2", and color "Red"
/// or "Blue": *(id: ANY("product_1", "product_2")) * *AND * *(colorFamilies:
/// ANY("Red", "Blue")) *
core.String? productsFilter;
GoogleCloudRetailV2RuleBoostAction({
this.boost,
this.productsFilter,
});
GoogleCloudRetailV2RuleBoostAction.fromJson(core.Map json_)
: this(
boost: json_.containsKey('boost')
? (json_['boost'] as core.num).toDouble()
: null,
productsFilter: json_.containsKey('productsFilter')
? json_['productsFilter'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (boost != null) 'boost': boost!,
if (productsFilter != null) 'productsFilter': productsFilter!,
};
}
/// Prevents `query_term` from being associated with specified terms during
/// search.
///
/// Example: Don't associate "gShoe" and "cheap".
class GoogleCloudRetailV2RuleDoNotAssociateAction {
/// Cannot contain duplicates or the query term.
///
/// Can specify up to 100 terms.
core.List<core.String>? doNotAssociateTerms;
/// Terms from the search query.
///
/// Will not consider do_not_associate_terms for search if in search query.
/// Can specify up to 100 terms.
core.List<core.String>? queryTerms;
/// Will be \[deprecated = true\] post migration;
core.List<core.String>? terms;
GoogleCloudRetailV2RuleDoNotAssociateAction({
this.doNotAssociateTerms,
this.queryTerms,
this.terms,
});
GoogleCloudRetailV2RuleDoNotAssociateAction.fromJson(core.Map json_)
: this(
doNotAssociateTerms: json_.containsKey('doNotAssociateTerms')
? (json_['doNotAssociateTerms'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
queryTerms: json_.containsKey('queryTerms')
? (json_['queryTerms'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
terms: json_.containsKey('terms')
? (json_['terms'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (doNotAssociateTerms != null)
'doNotAssociateTerms': doNotAssociateTerms!,
if (queryTerms != null) 'queryTerms': queryTerms!,
if (terms != null) 'terms': terms!,
};
}
/// * Rule Condition: - No Condition.query_terms provided is a global match.
///
/// - 1 or more Condition.query_terms provided are combined with OR operator. *
/// Action Input: The request query and filter that are applied to the retrieved
/// products, in addition to any filters already provided with the
/// SearchRequest. The AND operator is used to combine the query's existing
/// filters with the filter rule(s). NOTE: May result in 0 results when filters
/// conflict. * Action Result: Filters the returned objects to be ONLY those
/// that passed the filter.
class GoogleCloudRetailV2RuleFilterAction {
/// A filter to apply on the matching condition results.
///
/// Supported features: * filter must be set. * Filter syntax is identical to
/// SearchRequest.filter. See more details at the Retail Search \[user
/// guide\](/retail/search/docs/filter-and-order#filter). * To filter products
/// with product ID "product_1" or "product_2", and color "Red" or "Blue":
/// *(id: ANY("product_1", "product_2")) * *AND * *(colorFamilies: ANY("Red",
/// "Blue")) *
core.String? filter;
GoogleCloudRetailV2RuleFilterAction({
this.filter,
});
GoogleCloudRetailV2RuleFilterAction.fromJson(core.Map json_)
: this(
filter: json_.containsKey('filter')
? json_['filter'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (filter != null) 'filter': filter!,
};
}
/// Prevents a term in the query from being used in search.
///
/// Example: Don't search for "shoddy".
class GoogleCloudRetailV2RuleIgnoreAction {
/// Terms to ignore in the search query.
core.List<core.String>? ignoreTerms;
GoogleCloudRetailV2RuleIgnoreAction({
this.ignoreTerms,
});
GoogleCloudRetailV2RuleIgnoreAction.fromJson(core.Map json_)
: this(
ignoreTerms: json_.containsKey('ignoreTerms')
? (json_['ignoreTerms'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (ignoreTerms != null) 'ignoreTerms': ignoreTerms!,
};
}
/// Maps a set of terms to a set of synonyms.
///
/// Set of synonyms will be treated as synonyms of each query term only.
/// `query_terms` will not be treated as synonyms of each other. Example:
/// "sneakers" will use a synonym of "shoes". "shoes" will not use a synonym of
/// "sneakers".
class GoogleCloudRetailV2RuleOnewaySynonymsAction {
/// Will be \[deprecated = true\] post migration;
core.List<core.String>? onewayTerms;
/// Terms from the search query.
///
/// Will treat synonyms as their synonyms. Not themselves synonyms of the
/// synonyms. Can specify up to 100 terms.
core.List<core.String>? queryTerms;
/// Defines a set of synonyms.
///
/// Cannot contain duplicates. Can specify up to 100 synonyms.
core.List<core.String>? synonyms;
GoogleCloudRetailV2RuleOnewaySynonymsAction({
this.onewayTerms,
this.queryTerms,
this.synonyms,
});
GoogleCloudRetailV2RuleOnewaySynonymsAction.fromJson(core.Map json_)
: this(
onewayTerms: json_.containsKey('onewayTerms')
? (json_['onewayTerms'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
queryTerms: json_.containsKey('queryTerms')
? (json_['queryTerms'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
synonyms: json_.containsKey('synonyms')
? (json_['synonyms'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (onewayTerms != null) 'onewayTerms': onewayTerms!,
if (queryTerms != null) 'queryTerms': queryTerms!,
if (synonyms != null) 'synonyms': synonyms!,
};
}
/// Redirects a shopper to a specific page.
///
/// * Rule Condition: - Must specify Condition.query_terms. * Action Input:
/// Request Query * Action Result: Redirects shopper to provided uri.
class GoogleCloudRetailV2RuleRedirectAction {
/// URL must have length equal or less than 2000 characters.
core.String? redirectUri;
GoogleCloudRetailV2RuleRedirectAction({
this.redirectUri,
});
GoogleCloudRetailV2RuleRedirectAction.fromJson(core.Map json_)
: this(
redirectUri: json_.containsKey('redirectUri')
? json_['redirectUri'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (redirectUri != null) 'redirectUri': redirectUri!,
};
}
/// Replaces a term in the query.
///
/// Multiple replacement candidates can be specified. All `query_terms` will be
/// replaced with the replacement term. Example: Replace "gShoe" with "google
/// shoe".
class GoogleCloudRetailV2RuleReplacementAction {
/// Terms from the search query.
///
/// Will be replaced by replacement term. Can specify up to 100 terms.
core.List<core.String>? queryTerms;
/// Term that will be used for replacement.
core.String? replacementTerm;
/// Will be \[deprecated = true\] post migration;
core.String? term;
GoogleCloudRetailV2RuleReplacementAction({
this.queryTerms,
this.replacementTerm,
this.term,
});
GoogleCloudRetailV2RuleReplacementAction.fromJson(core.Map json_)
: this(
queryTerms: json_.containsKey('queryTerms')
? (json_['queryTerms'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
replacementTerm: json_.containsKey('replacementTerm')
? json_['replacementTerm'] as core.String
: null,
term: json_.containsKey('term') ? json_['term'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (queryTerms != null) 'queryTerms': queryTerms!,
if (replacementTerm != null) 'replacementTerm': replacementTerm!,
if (term != null) 'term': term!,
};
}
/// Creates a set of terms that will be treated as synonyms of each other.
///
/// Example: synonyms of "sneakers" and "shoes": * "sneakers" will use a synonym
/// of "shoes". * "shoes" will use a synonym of "sneakers".
class GoogleCloudRetailV2RuleTwowaySynonymsAction {
/// Defines a set of synonyms.
///
/// Can specify up to 100 synonyms. Must specify at least 2 synonyms.
core.List<core.String>? synonyms;
GoogleCloudRetailV2RuleTwowaySynonymsAction({
this.synonyms,
});
GoogleCloudRetailV2RuleTwowaySynonymsAction.fromJson(core.Map json_)
: this(
synonyms: json_.containsKey('synonyms')
? (json_['synonyms'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (synonyms != null) 'synonyms': synonyms!,
};
}
/// Request message for SearchService.Search method.
class GoogleCloudRetailV2SearchRequest {
/// Boost specification to boost certain products.
///
/// See more details at this
/// [user guide](https://cloud.google.com/retail/docs/boosting). Notice that
/// if both ServingConfig.boost_control_ids and SearchRequest.boost_spec are
/// set, the boost conditions from both places are evaluated. If a search
/// request matches multiple boost conditions, the final boost score is equal
/// to the sum of the boost scores from all matched boost conditions.
GoogleCloudRetailV2SearchRequestBoostSpec? boostSpec;
/// The branch resource name, such as `projects / *
/// /locations/global/catalogs/default_catalog/branches/0`.
///
/// Use "default_branch" as the branch ID or leave this field empty, to search
/// products under the default branch.
core.String? branch;
/// The default filter that is applied when a user performs a search without
/// checking any filters on the search page.
///
/// The filter applied to every search request when quality improvement such
/// as query expansion is needed. For example, if a query does not have enough
/// results, an expanded query with SearchRequest.canonical_filter will be
/// returned as a supplement of the original query. This field is strongly
/// recommended to achieve high search quality. See SearchRequest.filter for
/// more details about filter syntax.
core.String? canonicalFilter;
/// Refer to https://cloud.google.com/retail/docs/configs#dynamic to enable
/// dynamic facets.
///
/// Do not set this field. The specification for dynamically generated facets.
/// Notice that only textual facets can be dynamically generated.
///
/// Deprecated.
GoogleCloudRetailV2SearchRequestDynamicFacetSpec? dynamicFacetSpec;
/// The entity for customers that may run multiple different entities,
/// domains, sites or regions, for example, "Google US", "Google Ads",
/// "Waymo", "google.com", "youtube.com", etc.
///
/// If this is set, it should be exactly matched with UserEvent.entity to get
/// search results boosted by entity.
core.String? entity;
/// Facet specifications for faceted search.
///
/// If empty, no facets are returned. A maximum of 200 values are allowed.
/// Otherwise, an INVALID_ARGUMENT error is returned.
core.List<GoogleCloudRetailV2SearchRequestFacetSpec>? facetSpecs;
/// The filter syntax consists of an expression language for constructing a
/// predicate from one or more fields of the products being filtered.
///
/// Filter expression is case-sensitive. See more details at this
/// [user guide](https://cloud.google.com/retail/docs/filter-and-order#filter).
/// If this field is unrecognizable, an INVALID_ARGUMENT is returned.
core.String? filter;
/// The labels applied to a resource must meet the following requirements: *
/// Each resource can have multiple labels, up to a maximum of 64.
///
/// * Each label must be a key-value pair. * Keys have a minimum length of 1
/// character and a maximum length of 63 characters and cannot be empty.
/// Values can be empty and have a maximum length of 63 characters. * Keys and
/// values can contain only lowercase letters, numeric characters,
/// underscores, and dashes. All characters must use UTF-8 encoding, and
/// international characters are allowed. * The key portion of a label must be
/// unique. However, you can use the same key with multiple resources. * Keys
/// must start with a lowercase letter or international character. See
/// [Google Cloud Document](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements)
/// for more details.
core.Map<core.String, core.String>? labels;
/// A 0-indexed integer that specifies the current offset (that is, starting
/// result location, amongst the Products deemed by the API as relevant) in
/// search results.
///
/// This field is only considered if page_token is unset. If this field is
/// negative, an INVALID_ARGUMENT is returned.
core.int? offset;
/// The order in which products are returned.
///
/// Products can be ordered by a field in an Product object. Leave it unset if
/// ordered by relevance. OrderBy expression is case-sensitive. See more
/// details at this
/// [user guide](https://cloud.google.com/retail/docs/filter-and-order#order).
/// If this field is unrecognizable, an INVALID_ARGUMENT is returned.
core.String? orderBy;
/// The categories associated with a category page.
///
/// Required for category navigation queries to achieve good search quality.
/// The format should be the same as UserEvent.page_categories; To represent
/// full path of category, use '\>' sign to separate different hierarchies. If
/// '\>' is part of the category name, replace it with other character(s).
/// Category pages include special pages such as sales or promotions. For
/// instance, a special sale page may have the category hierarchy:
/// "pageCategories" : \["Sales \> 2017 Black Friday Deals"\].
core.List<core.String>? pageCategories;
/// Maximum number of Products to return.
///
/// If unspecified, defaults to a reasonable value. The maximum allowed value
/// is 120. Values above 120 will be coerced to 120. If this field is
/// negative, an INVALID_ARGUMENT is returned.
core.int? pageSize;
/// A page token SearchResponse.next_page_token, received from a previous
/// SearchService.Search call.
///
/// Provide this to retrieve the subsequent page. When paginating, all other
/// parameters provided to SearchService.Search must match the call that
/// provided the page token. Otherwise, an INVALID_ARGUMENT error is returned.
core.String? pageToken;
/// The specification for personalization.
///
/// Notice that if both ServingConfig.personalization_spec and
/// SearchRequest.personalization_spec are set.
/// SearchRequest.personalization_spec will override
/// ServingConfig.personalization_spec.
GoogleCloudRetailV2SearchRequestPersonalizationSpec? personalizationSpec;
/// Raw search query.
///
/// If this field is empty, the request is considered a category browsing
/// request and returned results are based on filter and page_categories.
core.String? query;
/// The query expansion specification that specifies the conditions under
/// which query expansion will occur.
///
/// See more details at this
/// [user guide](https://cloud.google.com/retail/docs/result-size#query_expansion).
GoogleCloudRetailV2SearchRequestQueryExpansionSpec? queryExpansionSpec;
/// The search mode of the search request.
///
/// If not specified, a single search request triggers both product search and
/// faceted search.
/// Possible string values are:
/// - "SEARCH_MODE_UNSPECIFIED" : Default value. In this case both product
/// search and faceted search will be performed. Both
/// SearchResponse.SearchResult and SearchResponse.Facet will be returned.
/// - "PRODUCT_SEARCH_ONLY" : Only product search will be performed. The
/// faceted search will be disabled. Only SearchResponse.SearchResult will be
/// returned. SearchResponse.Facet will not be returned, even if
/// SearchRequest.facet_specs or SearchRequest.dynamic_facet_spec is set.
/// - "FACETED_SEARCH_ONLY" : Only faceted search will be performed. The
/// product search will be disabled. When in this mode, one or both of
/// SearchRequest.facet_specs and SearchRequest.dynamic_facet_spec should be
/// set. Otherwise, an INVALID_ARGUMENT error is returned. Only
/// SearchResponse.Facet will be returned. SearchResponse.SearchResult will
/// not be returned.
core.String? searchMode;
/// The spell correction specification that specifies the mode under which
/// spell correction will take effect.
GoogleCloudRetailV2SearchRequestSpellCorrectionSpec? spellCorrectionSpec;
/// User information.
GoogleCloudRetailV2UserInfo? userInfo;
/// The keys to fetch and rollup the matching variant Products attributes,
/// FulfillmentInfo or LocalInventorys attributes.
///
/// The attributes from all the matching variant Products or LocalInventorys
/// are merged and de-duplicated. Notice that rollup attributes will lead to
/// extra query latency. Maximum number of keys is 30. For FulfillmentInfo, a
/// fulfillment type and a fulfillment ID must be provided in the format of
/// "fulfillmentType.fulfillmentId". E.g., in "pickupInStore.store123",
/// "pickupInStore" is fulfillment type and "store123" is the store ID.
/// Supported keys are: * colorFamilies * price * originalPrice * discount *
/// variantId * inventory(place_id,price) * inventory(place_id,original_price)
/// * inventory(place_id,attributes.key), where key is any key in the
/// Product.local_inventories.attributes map. * attributes.key, where key is
/// any key in the Product.attributes map. * pickupInStore.id, where id is any
/// FulfillmentInfo.place_ids for FulfillmentInfo.type "pickup-in-store". *
/// shipToStore.id, where id is any FulfillmentInfo.place_ids for
/// FulfillmentInfo.type "ship-to-store". * sameDayDelivery.id, where id is
/// any FulfillmentInfo.place_ids for FulfillmentInfo.type
/// "same-day-delivery". * nextDayDelivery.id, where id is any
/// FulfillmentInfo.place_ids for FulfillmentInfo.type "next-day-delivery". *
/// customFulfillment1.id, where id is any FulfillmentInfo.place_ids for
/// FulfillmentInfo.type "custom-type-1". * customFulfillment2.id, where id is
/// any FulfillmentInfo.place_ids for FulfillmentInfo.type "custom-type-2". *
/// customFulfillment3.id, where id is any FulfillmentInfo.place_ids for
/// FulfillmentInfo.type "custom-type-3". * customFulfillment4.id, where id is
/// any FulfillmentInfo.place_ids for FulfillmentInfo.type "custom-type-4". *
/// customFulfillment5.id, where id is any FulfillmentInfo.place_ids for
/// FulfillmentInfo.type "custom-type-5". If this field is set to an invalid
/// value other than these, an INVALID_ARGUMENT error is returned.
core.List<core.String>? variantRollupKeys;
/// A unique identifier for tracking visitors.
///
/// For example, this could be implemented with an HTTP cookie, which should
/// be able to uniquely identify a visitor on a single device. This unique
/// identifier should not change if the visitor logs in or out of the website.
/// This should be the same identifier as UserEvent.visitor_id. The field must
/// be a UTF-8 encoded string with a length limit of 128 characters.
/// Otherwise, an INVALID_ARGUMENT error is returned.
///
/// Required.
core.String? visitorId;
GoogleCloudRetailV2SearchRequest({
this.boostSpec,
this.branch,
this.canonicalFilter,
this.dynamicFacetSpec,
this.entity,
this.facetSpecs,
this.filter,
this.labels,
this.offset,
this.orderBy,
this.pageCategories,
this.pageSize,
this.pageToken,
this.personalizationSpec,
this.query,
this.queryExpansionSpec,
this.searchMode,
this.spellCorrectionSpec,
this.userInfo,
this.variantRollupKeys,
this.visitorId,
});
GoogleCloudRetailV2SearchRequest.fromJson(core.Map json_)
: this(
boostSpec: json_.containsKey('boostSpec')
? GoogleCloudRetailV2SearchRequestBoostSpec.fromJson(
json_['boostSpec'] as core.Map<core.String, core.dynamic>)
: null,
branch: json_.containsKey('branch')
? json_['branch'] as core.String
: null,
canonicalFilter: json_.containsKey('canonicalFilter')
? json_['canonicalFilter'] as core.String
: null,
dynamicFacetSpec: json_.containsKey('dynamicFacetSpec')
? GoogleCloudRetailV2SearchRequestDynamicFacetSpec.fromJson(
json_['dynamicFacetSpec']
as core.Map<core.String, core.dynamic>)
: null,
entity: json_.containsKey('entity')
? json_['entity'] as core.String
: null,
facetSpecs: json_.containsKey('facetSpecs')
? (json_['facetSpecs'] as core.List)
.map((value) =>
GoogleCloudRetailV2SearchRequestFacetSpec.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
filter: json_.containsKey('filter')
? json_['filter'] as core.String
: null,
labels: json_.containsKey('labels')
? (json_['labels'] as core.Map<core.String, core.dynamic>).map(
(key, value) => core.MapEntry(
key,
value as core.String,
),
)
: null,
offset:
json_.containsKey('offset') ? json_['offset'] as core.int : null,
orderBy: json_.containsKey('orderBy')
? json_['orderBy'] as core.String
: null,
pageCategories: json_.containsKey('pageCategories')
? (json_['pageCategories'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
pageSize: json_.containsKey('pageSize')
? json_['pageSize'] as core.int
: null,
pageToken: json_.containsKey('pageToken')
? json_['pageToken'] as core.String
: null,
personalizationSpec: json_.containsKey('personalizationSpec')
? GoogleCloudRetailV2SearchRequestPersonalizationSpec.fromJson(
json_['personalizationSpec']
as core.Map<core.String, core.dynamic>)
: null,
query:
json_.containsKey('query') ? json_['query'] as core.String : null,
queryExpansionSpec: json_.containsKey('queryExpansionSpec')
? GoogleCloudRetailV2SearchRequestQueryExpansionSpec.fromJson(
json_['queryExpansionSpec']
as core.Map<core.String, core.dynamic>)
: null,
searchMode: json_.containsKey('searchMode')
? json_['searchMode'] as core.String
: null,
spellCorrectionSpec: json_.containsKey('spellCorrectionSpec')
? GoogleCloudRetailV2SearchRequestSpellCorrectionSpec.fromJson(
json_['spellCorrectionSpec']
as core.Map<core.String, core.dynamic>)
: null,
userInfo: json_.containsKey('userInfo')
? GoogleCloudRetailV2UserInfo.fromJson(
json_['userInfo'] as core.Map<core.String, core.dynamic>)
: null,
variantRollupKeys: json_.containsKey('variantRollupKeys')
? (json_['variantRollupKeys'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
visitorId: json_.containsKey('visitorId')
? json_['visitorId'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (boostSpec != null) 'boostSpec': boostSpec!,
if (branch != null) 'branch': branch!,
if (canonicalFilter != null) 'canonicalFilter': canonicalFilter!,
if (dynamicFacetSpec != null) 'dynamicFacetSpec': dynamicFacetSpec!,
if (entity != null) 'entity': entity!,
if (facetSpecs != null) 'facetSpecs': facetSpecs!,
if (filter != null) 'filter': filter!,
if (labels != null) 'labels': labels!,
if (offset != null) 'offset': offset!,
if (orderBy != null) 'orderBy': orderBy!,
if (pageCategories != null) 'pageCategories': pageCategories!,
if (pageSize != null) 'pageSize': pageSize!,
if (pageToken != null) 'pageToken': pageToken!,
if (personalizationSpec != null)
'personalizationSpec': personalizationSpec!,
if (query != null) 'query': query!,
if (queryExpansionSpec != null)
'queryExpansionSpec': queryExpansionSpec!,
if (searchMode != null) 'searchMode': searchMode!,
if (spellCorrectionSpec != null)
'spellCorrectionSpec': spellCorrectionSpec!,
if (userInfo != null) 'userInfo': userInfo!,
if (variantRollupKeys != null) 'variantRollupKeys': variantRollupKeys!,
if (visitorId != null) 'visitorId': visitorId!,
};
}
/// Boost specification to boost certain items.
class GoogleCloudRetailV2SearchRequestBoostSpec {
/// Condition boost specifications.
///
/// If a product matches multiple conditions in the specifictions, boost
/// scores from these specifications are all applied and combined in a
/// non-linear way. Maximum number of specifications is 20.
core.List<GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec>?
conditionBoostSpecs;
/// Whether to skip boostspec validation.
///
/// If this field is set to true, invalid BoostSpec.condition_boost_specs will
/// be ignored and valid BoostSpec.condition_boost_specs will still be
/// applied.
core.bool? skipBoostSpecValidation;
GoogleCloudRetailV2SearchRequestBoostSpec({
this.conditionBoostSpecs,
this.skipBoostSpecValidation,
});
GoogleCloudRetailV2SearchRequestBoostSpec.fromJson(core.Map json_)
: this(
conditionBoostSpecs: json_.containsKey('conditionBoostSpecs')
? (json_['conditionBoostSpecs'] as core.List)
.map((value) =>
GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec
.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
skipBoostSpecValidation: json_.containsKey('skipBoostSpecValidation')
? json_['skipBoostSpecValidation'] as core.bool
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (conditionBoostSpecs != null)
'conditionBoostSpecs': conditionBoostSpecs!,
if (skipBoostSpecValidation != null)
'skipBoostSpecValidation': skipBoostSpecValidation!,
};
}
/// Boost applies to products which match a condition.
class GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec {
/// Strength of the condition boost, which should be in \[-1, 1\].
///
/// Negative boost means demotion. Default is 0.0. Setting to 1.0 gives the
/// item a big promotion. However, it does not necessarily mean that the
/// boosted item will be the top result at all times, nor that other items
/// will be excluded. Results could still be shown even when none of them
/// matches the condition. And results that are significantly more relevant to
/// the search query can still trump your heavily favored but irrelevant
/// items. Setting to -1.0 gives the item a big demotion. However, results
/// that are deeply relevant might still be shown. The item will have an
/// upstream battle to get a fairly high ranking, but it is not blocked out
/// completely. Setting to 0.0 means no boost applied. The boosting condition
/// is ignored.
core.double? boost;
/// An expression which specifies a boost condition.
///
/// The syntax and supported fields are the same as a filter expression. See
/// SearchRequest.filter for detail syntax and limitations. Examples: * To
/// boost products with product ID "product_1" or "product_2", and color "Red"
/// or "Blue": * (id: ANY("product_1", "product_2")) AND (colorFamilies:
/// ANY("Red","Blue"))
core.String? condition;
GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec({
this.boost,
this.condition,
});
GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec.fromJson(
core.Map json_)
: this(
boost: json_.containsKey('boost')
? (json_['boost'] as core.num).toDouble()
: null,
condition: json_.containsKey('condition')
? json_['condition'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (boost != null) 'boost': boost!,
if (condition != null) 'condition': condition!,
};
}
/// The specifications of dynamically generated facets.
class GoogleCloudRetailV2SearchRequestDynamicFacetSpec {
/// Mode of the DynamicFacet feature.
///
/// Defaults to Mode.DISABLED if it's unset.
/// Possible string values are:
/// - "MODE_UNSPECIFIED" : Default value.
/// - "DISABLED" : Disable Dynamic Facet.
/// - "ENABLED" : Automatic mode built by Google Retail Search.
core.String? mode;
GoogleCloudRetailV2SearchRequestDynamicFacetSpec({
this.mode,
});
GoogleCloudRetailV2SearchRequestDynamicFacetSpec.fromJson(core.Map json_)
: this(
mode: json_.containsKey('mode') ? json_['mode'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (mode != null) 'mode': mode!,
};
}
/// A facet specification to perform faceted search.
class GoogleCloudRetailV2SearchRequestFacetSpec {
/// Enables dynamic position for this facet.
///
/// If set to true, the position of this facet among all facets in the
/// response is determined by Google Retail Search. It will be ordered
/// together with dynamic facets if dynamic facets is enabled. If set to
/// false, the position of this facet in the response will be the same as in
/// the request, and it will be ranked before the facets with dynamic position
/// enable and all dynamic facets. For example, you may always want to have
/// rating facet returned in the response, but it's not necessarily to always
/// display the rating facet at the top. In that case, you can set
/// enable_dynamic_position to true so that the position of rating facet in
/// response will be determined by Google Retail Search. Another example,
/// assuming you have the following facets in the request: * "rating",
/// enable_dynamic_position = true * "price", enable_dynamic_position = false
/// * "brands", enable_dynamic_position = false And also you have a dynamic
/// facets enable, which will generate a facet 'gender'. Then the final order
/// of the facets in the response can be ("price", "brands", "rating",
/// "gender") or ("price", "brands", "gender", "rating") depends on how Google
/// Retail Search orders "gender" and "rating" facets. However, notice that
/// "price" and "brands" will always be ranked at 1st and 2nd position since
/// their enable_dynamic_position are false.
core.bool? enableDynamicPosition;
/// List of keys to exclude when faceting.
///
/// By default, FacetKey.key is not excluded from the filter unless it is
/// listed in this field. Listing a facet key in this field allows its values
/// to appear as facet results, even when they are filtered out of search
/// results. Using this field does not affect what search results are
/// returned. For example, suppose there are 100 products with the color facet
/// "Red" and 200 products with the color facet "Blue". A query containing the
/// filter "colorFamilies:ANY("Red")" and having "colorFamilies" as
/// FacetKey.key would by default return only "Red" products in the search
/// results, and also return "Red" with count 100 as the only color facet.
/// Although there are also blue products available, "Blue" would not be shown
/// as an available facet value. If "colorFamilies" is listed in
/// "excludedFilterKeys", then the query returns the facet values "Red" with
/// count 100 and "Blue" with count 200, because the "colorFamilies" key is
/// now excluded from the filter. Because this field doesn't affect search
/// results, the search results are still correctly filtered to return only
/// "Red" products. A maximum of 100 values are allowed. Otherwise, an
/// INVALID_ARGUMENT error is returned.
core.List<core.String>? excludedFilterKeys;
/// The facet key specification.
///
/// Required.
GoogleCloudRetailV2SearchRequestFacetSpecFacetKey? facetKey;
/// Maximum of facet values that should be returned for this facet.
///
/// If unspecified, defaults to 50. The maximum allowed value is 300. Values
/// above 300 will be coerced to 300. If this field is negative, an
/// INVALID_ARGUMENT is returned.
core.int? limit;
GoogleCloudRetailV2SearchRequestFacetSpec({
this.enableDynamicPosition,
this.excludedFilterKeys,
this.facetKey,
this.limit,
});
GoogleCloudRetailV2SearchRequestFacetSpec.fromJson(core.Map json_)
: this(
enableDynamicPosition: json_.containsKey('enableDynamicPosition')
? json_['enableDynamicPosition'] as core.bool
: null,
excludedFilterKeys: json_.containsKey('excludedFilterKeys')
? (json_['excludedFilterKeys'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
facetKey: json_.containsKey('facetKey')
? GoogleCloudRetailV2SearchRequestFacetSpecFacetKey.fromJson(
json_['facetKey'] as core.Map<core.String, core.dynamic>)
: null,
limit: json_.containsKey('limit') ? json_['limit'] as core.int : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (enableDynamicPosition != null)
'enableDynamicPosition': enableDynamicPosition!,
if (excludedFilterKeys != null)
'excludedFilterKeys': excludedFilterKeys!,
if (facetKey != null) 'facetKey': facetKey!,
if (limit != null) 'limit': limit!,
};
}
/// Specifies how a facet is computed.
class GoogleCloudRetailV2SearchRequestFacetSpecFacetKey {
/// True to make facet keys case insensitive when getting faceting values with
/// prefixes or contains; false otherwise.
core.bool? caseInsensitive;
/// Only get facet values that contains the given strings.
///
/// For example, suppose "categories" has three values "Women \> Shoe", "Women
/// \> Dress" and "Men \> Shoe". If set "contains" to "Shoe", the "categories"
/// facet will give only "Women \> Shoe" and "Men \> Shoe". Only supported on
/// textual fields. Maximum is 10.
core.List<core.String>? contains;
/// For all numerical facet keys that appear in the list of products from the
/// catalog, the percentiles 0, 10, 30, 50, 70, 90 and 100 are computed from
/// their distribution weekly.
///
/// If the model assigns a high score to a numerical facet key and its
/// intervals are not specified in the search request, these percentiles will
/// become the bounds for its intervals and will be returned in the response.
/// If the facet key intervals are specified in the request, then the
/// specified intervals will be returned instead.
core.List<GoogleCloudRetailV2Interval>? intervals;
/// Supported textual and numerical facet keys in Product object, over which
/// the facet values are computed.
///
/// Facet key is case-sensitive. Allowed facet keys when FacetKey.query is not
/// specified: * textual_field = * "brands" * "categories" * "genders" *
/// "ageGroups" * "availability" * "colorFamilies" * "colors" * "sizes" *
/// "materials" * "patterns" * "conditions" * "attributes.key" *
/// "pickupInStore" * "shipToStore" * "sameDayDelivery" * "nextDayDelivery" *
/// "customFulfillment1" * "customFulfillment2" * "customFulfillment3" *
/// "customFulfillment4" * "customFulfillment5" *
/// "inventory(place_id,attributes.key)" * numerical_field = * "price" *
/// "discount" * "rating" * "ratingCount" * "attributes.key" *
/// "inventory(place_id,price)" * "inventory(place_id,original_price)" *
/// "inventory(place_id,attributes.key)"
///
/// Required.
core.String? key;
/// The order in which SearchResponse.Facet.values are returned.
///
/// Allowed values are: * "count desc", which means order by
/// SearchResponse.Facet.values.count descending. * "value desc", which means
/// order by SearchResponse.Facet.values.value descending. Only applies to
/// textual facets. If not set, textual values are sorted in
/// [natural order](https://en.wikipedia.org/wiki/Natural_sort_order);
/// numerical intervals are sorted in the order given by
/// FacetSpec.FacetKey.intervals; FulfillmentInfo.place_ids are sorted in the
/// order given by FacetSpec.FacetKey.restricted_values.
core.String? orderBy;
/// Only get facet values that start with the given string prefix.
///
/// For example, suppose "categories" has three values "Women \> Shoe", "Women
/// \> Dress" and "Men \> Shoe". If set "prefixes" to "Women", the
/// "categories" facet will give only "Women \> Shoe" and "Women \> Dress".
/// Only supported on textual fields. Maximum is 10.
core.List<core.String>? prefixes;
/// The query that is used to compute facet for the given facet key.
///
/// When provided, it will override the default behavior of facet computation.
/// The query syntax is the same as a filter expression. See
/// SearchRequest.filter for detail syntax and limitations. Notice that there
/// is no limitation on FacetKey.key when query is specified. In the response,
/// SearchResponse.Facet.values.value will be always "1" and
/// SearchResponse.Facet.values.count will be the number of results that match
/// the query. For example, you can set a customized facet for "shipToStore",
/// where FacetKey.key is "customizedShipToStore", and FacetKey.query is
/// "availability: ANY(\"IN_STOCK\") AND shipToStore: ANY(\"123\")". Then the
/// facet will count the products that are both in stock and ship to store
/// "123".
core.String? query;
/// Only get facet for the given restricted values.
///
/// For example, when using "pickupInStore" as key and set restricted values
/// to \["store123", "store456"\], only facets for "store123" and "store456"
/// are returned. Only supported on predefined textual fields, custom textual
/// attributes and fulfillments. Maximum is 20. Must be set for the
/// fulfillment facet keys: * pickupInStore * shipToStore * sameDayDelivery *
/// nextDayDelivery * customFulfillment1 * customFulfillment2 *
/// customFulfillment3 * customFulfillment4 * customFulfillment5
core.List<core.String>? restrictedValues;
/// Returns the min and max value for each numerical facet intervals.
///
/// Ignored for textual facets.
core.bool? returnMinMax;
GoogleCloudRetailV2SearchRequestFacetSpecFacetKey({
this.caseInsensitive,
this.contains,
this.intervals,
this.key,
this.orderBy,
this.prefixes,
this.query,
this.restrictedValues,
this.returnMinMax,
});
GoogleCloudRetailV2SearchRequestFacetSpecFacetKey.fromJson(core.Map json_)
: this(
caseInsensitive: json_.containsKey('caseInsensitive')
? json_['caseInsensitive'] as core.bool
: null,
contains: json_.containsKey('contains')
? (json_['contains'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
intervals: json_.containsKey('intervals')
? (json_['intervals'] as core.List)
.map((value) => GoogleCloudRetailV2Interval.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
key: json_.containsKey('key') ? json_['key'] as core.String : null,
orderBy: json_.containsKey('orderBy')
? json_['orderBy'] as core.String
: null,
prefixes: json_.containsKey('prefixes')
? (json_['prefixes'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
query:
json_.containsKey('query') ? json_['query'] as core.String : null,
restrictedValues: json_.containsKey('restrictedValues')
? (json_['restrictedValues'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
returnMinMax: json_.containsKey('returnMinMax')
? json_['returnMinMax'] as core.bool
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (caseInsensitive != null) 'caseInsensitive': caseInsensitive!,
if (contains != null) 'contains': contains!,
if (intervals != null) 'intervals': intervals!,
if (key != null) 'key': key!,
if (orderBy != null) 'orderBy': orderBy!,
if (prefixes != null) 'prefixes': prefixes!,
if (query != null) 'query': query!,
if (restrictedValues != null) 'restrictedValues': restrictedValues!,
if (returnMinMax != null) 'returnMinMax': returnMinMax!,
};
}
/// The specification for personalization.
class GoogleCloudRetailV2SearchRequestPersonalizationSpec {
/// Defaults to Mode.AUTO.
/// Possible string values are:
/// - "MODE_UNSPECIFIED" : Default value. In this case, server behavior
/// defaults to Mode.AUTO.
/// - "AUTO" : Let CRS decide whether to use personalization based on quality
/// of user event data.
/// - "DISABLED" : Disable personalization.
core.String? mode;
GoogleCloudRetailV2SearchRequestPersonalizationSpec({
this.mode,
});
GoogleCloudRetailV2SearchRequestPersonalizationSpec.fromJson(core.Map json_)
: this(
mode: json_.containsKey('mode') ? json_['mode'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (mode != null) 'mode': mode!,
};
}
/// Specification to determine under which conditions query expansion should
/// occur.
class GoogleCloudRetailV2SearchRequestQueryExpansionSpec {
/// The condition under which query expansion should occur.
///
/// Default to Condition.DISABLED.
/// Possible string values are:
/// - "CONDITION_UNSPECIFIED" : Unspecified query expansion condition. In this
/// case, server behavior defaults to Condition.DISABLED.
/// - "DISABLED" : Disabled query expansion. Only the exact search query is
/// used, even if SearchResponse.total_size is zero.
/// - "AUTO" : Automatic query expansion built by Google Retail Search.
core.String? condition;
/// Whether to pin unexpanded results.
///
/// If this field is set to true, unexpanded products are always at the top of
/// the search results, followed by the expanded results.
core.bool? pinUnexpandedResults;
GoogleCloudRetailV2SearchRequestQueryExpansionSpec({
this.condition,
this.pinUnexpandedResults,
});
GoogleCloudRetailV2SearchRequestQueryExpansionSpec.fromJson(core.Map json_)
: this(
condition: json_.containsKey('condition')
? json_['condition'] as core.String
: null,
pinUnexpandedResults: json_.containsKey('pinUnexpandedResults')
? json_['pinUnexpandedResults'] as core.bool
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (condition != null) 'condition': condition!,
if (pinUnexpandedResults != null)
'pinUnexpandedResults': pinUnexpandedResults!,
};
}
/// The specification for query spell correction.
class GoogleCloudRetailV2SearchRequestSpellCorrectionSpec {
/// The mode under which spell correction should take effect to replace the
/// original search query.
///
/// Default to Mode.AUTO.
/// Possible string values are:
/// - "MODE_UNSPECIFIED" : Unspecified spell correction mode. In this case,
/// server behavior defaults to Mode.AUTO.
/// - "SUGGESTION_ONLY" : Google Retail Search will try to find a spell
/// suggestion if there is any and put in the SearchResponse.corrected_query.
/// The spell suggestion will not be used as the search query.
/// - "AUTO" : Automatic spell correction built by Google Retail Search.
/// Search will be based on the corrected query if found.
core.String? mode;
GoogleCloudRetailV2SearchRequestSpellCorrectionSpec({
this.mode,
});
GoogleCloudRetailV2SearchRequestSpellCorrectionSpec.fromJson(core.Map json_)
: this(
mode: json_.containsKey('mode') ? json_['mode'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (mode != null) 'mode': mode!,
};
}
/// Response message for SearchService.Search method.
class GoogleCloudRetailV2SearchResponse {
/// The fully qualified resource name of applied
/// [controls](https://cloud.google.com/retail/docs/serving-control-rules).
core.List<core.String>? appliedControls;
/// A unique search token.
///
/// This should be included in the UserEvent logs resulting from this search,
/// which enables accurate attribution of search model performance.
core.String? attributionToken;
/// Contains the spell corrected query, if found.
///
/// If the spell correction type is AUTOMATIC, then the search results are
/// based on corrected_query. Otherwise the original query is used for search.
core.String? correctedQuery;
/// Metadata related to A/B testing Experiment associated with this response.
///
/// Only exists when an experiment is triggered.
core.List<GoogleCloudRetailV2ExperimentInfo>? experimentInfo;
/// Results of facets requested by user.
core.List<GoogleCloudRetailV2SearchResponseFacet>? facets;
/// The invalid SearchRequest.BoostSpec.condition_boost_specs that are not
/// applied during serving.
core.List<GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec>?
invalidConditionBoostSpecs;
/// A token that can be sent as SearchRequest.page_token to retrieve the next
/// page.
///
/// If this field is omitted, there are no subsequent pages.
core.String? nextPageToken;
/// Query expansion information for the returned results.
GoogleCloudRetailV2SearchResponseQueryExpansionInfo? queryExpansionInfo;
/// The URI of a customer-defined redirect page.
///
/// If redirect action is triggered, no search is performed, and only
/// redirect_uri and attribution_token are set in the response.
core.String? redirectUri;
/// A list of matched items.
///
/// The order represents the ranking.
core.List<GoogleCloudRetailV2SearchResponseSearchResult>? results;
/// The estimated total count of matched items irrespective of pagination.
///
/// The count of results returned by pagination may be less than the
/// total_size that matches.
core.int? totalSize;
GoogleCloudRetailV2SearchResponse({
this.appliedControls,
this.attributionToken,
this.correctedQuery,
this.experimentInfo,
this.facets,
this.invalidConditionBoostSpecs,
this.nextPageToken,
this.queryExpansionInfo,
this.redirectUri,
this.results,
this.totalSize,
});
GoogleCloudRetailV2SearchResponse.fromJson(core.Map json_)
: this(
appliedControls: json_.containsKey('appliedControls')
? (json_['appliedControls'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
attributionToken: json_.containsKey('attributionToken')
? json_['attributionToken'] as core.String
: null,
correctedQuery: json_.containsKey('correctedQuery')
? json_['correctedQuery'] as core.String
: null,
experimentInfo: json_.containsKey('experimentInfo')
? (json_['experimentInfo'] as core.List)
.map((value) => GoogleCloudRetailV2ExperimentInfo.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
facets: json_.containsKey('facets')
? (json_['facets'] as core.List)
.map((value) =>
GoogleCloudRetailV2SearchResponseFacet.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
invalidConditionBoostSpecs: json_
.containsKey('invalidConditionBoostSpecs')
? (json_['invalidConditionBoostSpecs'] as core.List)
.map((value) =>
GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec
.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
nextPageToken: json_.containsKey('nextPageToken')
? json_['nextPageToken'] as core.String
: null,
queryExpansionInfo: json_.containsKey('queryExpansionInfo')
? GoogleCloudRetailV2SearchResponseQueryExpansionInfo.fromJson(
json_['queryExpansionInfo']
as core.Map<core.String, core.dynamic>)
: null,
redirectUri: json_.containsKey('redirectUri')
? json_['redirectUri'] as core.String
: null,
results: json_.containsKey('results')
? (json_['results'] as core.List)
.map((value) =>
GoogleCloudRetailV2SearchResponseSearchResult.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
totalSize: json_.containsKey('totalSize')
? json_['totalSize'] as core.int
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (appliedControls != null) 'appliedControls': appliedControls!,
if (attributionToken != null) 'attributionToken': attributionToken!,
if (correctedQuery != null) 'correctedQuery': correctedQuery!,
if (experimentInfo != null) 'experimentInfo': experimentInfo!,
if (facets != null) 'facets': facets!,
if (invalidConditionBoostSpecs != null)
'invalidConditionBoostSpecs': invalidConditionBoostSpecs!,
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (queryExpansionInfo != null)
'queryExpansionInfo': queryExpansionInfo!,
if (redirectUri != null) 'redirectUri': redirectUri!,
if (results != null) 'results': results!,
if (totalSize != null) 'totalSize': totalSize!,
};
}
/// A facet result.
class GoogleCloudRetailV2SearchResponseFacet {
/// Whether the facet is dynamically generated.
core.bool? dynamicFacet;
/// The key for this facet.
///
/// E.g., "colorFamilies" or "price" or "attributes.attr1".
core.String? key;
/// The facet values for this field.
core.List<GoogleCloudRetailV2SearchResponseFacetFacetValue>? values;
GoogleCloudRetailV2SearchResponseFacet({
this.dynamicFacet,
this.key,
this.values,
});
GoogleCloudRetailV2SearchResponseFacet.fromJson(core.Map json_)
: this(
dynamicFacet: json_.containsKey('dynamicFacet')
? json_['dynamicFacet'] as core.bool
: null,
key: json_.containsKey('key') ? json_['key'] as core.String : null,
values: json_.containsKey('values')
? (json_['values'] as core.List)
.map((value) =>
GoogleCloudRetailV2SearchResponseFacetFacetValue.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (dynamicFacet != null) 'dynamicFacet': dynamicFacet!,
if (key != null) 'key': key!,
if (values != null) 'values': values!,
};
}
/// A facet value which contains value names and their count.
class GoogleCloudRetailV2SearchResponseFacetFacetValue {
/// Number of items that have this facet value.
core.String? count;
/// Interval value for a facet, such as \[10, 20) for facet "price".
GoogleCloudRetailV2Interval? interval;
/// The maximum value in the FacetValue.interval.
///
/// Only supported on numerical facets and returned if
/// SearchRequest.FacetSpec.FacetKey.return_min_max is true.
core.double? maxValue;
/// The minimum value in the FacetValue.interval.
///
/// Only supported on numerical facets and returned if
/// SearchRequest.FacetSpec.FacetKey.return_min_max is true.
core.double? minValue;
/// Text value of a facet, such as "Black" for facet "colorFamilies".
core.String? value;
GoogleCloudRetailV2SearchResponseFacetFacetValue({
this.count,
this.interval,
this.maxValue,
this.minValue,
this.value,
});
GoogleCloudRetailV2SearchResponseFacetFacetValue.fromJson(core.Map json_)
: this(
count:
json_.containsKey('count') ? json_['count'] as core.String : null,
interval: json_.containsKey('interval')
? GoogleCloudRetailV2Interval.fromJson(
json_['interval'] as core.Map<core.String, core.dynamic>)
: null,
maxValue: json_.containsKey('maxValue')
? (json_['maxValue'] as core.num).toDouble()
: null,
minValue: json_.containsKey('minValue')
? (json_['minValue'] as core.num).toDouble()
: null,
value:
json_.containsKey('value') ? json_['value'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (count != null) 'count': count!,
if (interval != null) 'interval': interval!,
if (maxValue != null) 'maxValue': maxValue!,
if (minValue != null) 'minValue': minValue!,
if (value != null) 'value': value!,
};
}
/// Information describing query expansion including whether expansion has
/// occurred.
class GoogleCloudRetailV2SearchResponseQueryExpansionInfo {
/// Bool describing whether query expansion has occurred.
core.bool? expandedQuery;
/// Number of pinned results.
///
/// This field will only be set when expansion happens and
/// SearchRequest.QueryExpansionSpec.pin_unexpanded_results is set to true.
core.String? pinnedResultCount;
GoogleCloudRetailV2SearchResponseQueryExpansionInfo({
this.expandedQuery,
this.pinnedResultCount,
});
GoogleCloudRetailV2SearchResponseQueryExpansionInfo.fromJson(core.Map json_)
: this(
expandedQuery: json_.containsKey('expandedQuery')
? json_['expandedQuery'] as core.bool
: null,
pinnedResultCount: json_.containsKey('pinnedResultCount')
? json_['pinnedResultCount'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (expandedQuery != null) 'expandedQuery': expandedQuery!,
if (pinnedResultCount != null) 'pinnedResultCount': pinnedResultCount!,
};
}
/// Represents the search results.
class GoogleCloudRetailV2SearchResponseSearchResult {
/// Product.id of the searched Product.
core.String? id;
/// The count of matched variant Products.
core.int? matchingVariantCount;
/// If a variant Product matches the search query, this map indicates which
/// Product fields are matched.
///
/// The key is the Product.name, the value is a field mask of the matched
/// Product fields. If matched attributes cannot be determined, this map will
/// be empty. For example, a key "sku1" with field mask "products.color_info"
/// indicates there is a match between "sku1" ColorInfo and the query.
core.Map<core.String, core.String>? matchingVariantFields;
/// Specifies previous events related to this product for this user based on
/// UserEvent with same SearchRequest.visitor_id or UserInfo.user_id.
///
/// This is set only when SearchRequest.PersonalizationSpec.mode is
/// SearchRequest.PersonalizationSpec.Mode.AUTO. Possible values: *
/// `purchased`: Indicates that this product has been purchased before.
core.List<core.String>? personalLabels;
/// The product data snippet in the search response.
///
/// Only Product.name is guaranteed to be populated. Product.variants contains
/// the product variants that match the search query. If there are multiple
/// product variants matching the query, top 5 most relevant product variants
/// are returned and ordered by relevancy. If relevancy can be deternmined,
/// use matching_variant_fields to look up matched product variants fields. If
/// relevancy cannot be determined, e.g. when searching "shoe" all products in
/// a shoe product can be a match, 5 product variants are returned but order
/// is meaningless.
GoogleCloudRetailV2Product? product;
/// The rollup matching variant Product attributes.
///
/// The key is one of the SearchRequest.variant_rollup_keys. The values are
/// the merged and de-duplicated Product attributes. Notice that the rollup
/// values are respect filter. For example, when filtering by
/// "colorFamilies:ANY(\"red\")" and rollup "colorFamilies", only "red" is
/// returned. For textual and numerical attributes, the rollup values is a
/// list of string or double values with type google.protobuf.ListValue. For
/// example, if there are two variants with colors "red" and "blue", the
/// rollup values are { key: "colorFamilies" value { list_value { values {
/// string_value: "red" } values { string_value: "blue" } } } } For
/// FulfillmentInfo, the rollup values is a double value with type
/// google.protobuf.Value. For example, `{key: "pickupInStore.store1" value {
/// number_value: 10 }}` means a there are 10 variants in this product are
/// available in the store "store1".
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object?>? variantRollupValues;
GoogleCloudRetailV2SearchResponseSearchResult({
this.id,
this.matchingVariantCount,
this.matchingVariantFields,
this.personalLabels,
this.product,
this.variantRollupValues,
});
GoogleCloudRetailV2SearchResponseSearchResult.fromJson(core.Map json_)
: this(
id: json_.containsKey('id') ? json_['id'] as core.String : null,
matchingVariantCount: json_.containsKey('matchingVariantCount')
? json_['matchingVariantCount'] as core.int
: null,
matchingVariantFields: json_.containsKey('matchingVariantFields')
? (json_['matchingVariantFields']
as core.Map<core.String, core.dynamic>)
.map(
(key, value) => core.MapEntry(
key,
value as core.String,
),
)
: null,
personalLabels: json_.containsKey('personalLabels')
? (json_['personalLabels'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
product: json_.containsKey('product')
? GoogleCloudRetailV2Product.fromJson(
json_['product'] as core.Map<core.String, core.dynamic>)
: null,
variantRollupValues: json_.containsKey('variantRollupValues')
? json_['variantRollupValues']
as core.Map<core.String, core.dynamic>
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (id != null) 'id': id!,
if (matchingVariantCount != null)
'matchingVariantCount': matchingVariantCount!,
if (matchingVariantFields != null)
'matchingVariantFields': matchingVariantFields!,
if (personalLabels != null) 'personalLabels': personalLabels!,
if (product != null) 'product': product!,
if (variantRollupValues != null)
'variantRollupValues': variantRollupValues!,
};
}
/// Configures metadata that is used to generate serving time results (e.g.
/// search results or recommendation predictions).
class GoogleCloudRetailV2ServingConfig {
/// Condition boost specifications.
///
/// If a product matches multiple conditions in the specifications, boost
/// scores from these specifications are all applied and combined in a
/// non-linear way. Maximum number of specifications is 100. Notice that if
/// both ServingConfig.boost_control_ids and SearchRequest.boost_spec are set,
/// the boost conditions from both places are evaluated. If a search request
/// matches multiple boost conditions, the final boost score is equal to the
/// sum of the boost scores from all matched boost conditions. Can only be set
/// if solution_types is SOLUTION_TYPE_SEARCH.
core.List<core.String>? boostControlIds;
/// The human readable serving config display name.
///
/// Used in Retail UI. This field must be a UTF-8 encoded string with a length
/// limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
///
/// Required.
core.String? displayName;
/// How much diversity to use in recommendation model results e.g.
/// `medium-diversity` or `high-diversity`.
///
/// Currently supported values: * `no-diversity` * `low-diversity` *
/// `medium-diversity` * `high-diversity` * `auto-diversity` If not specified,
/// we choose default based on recommendation model type. Default value:
/// `no-diversity`. Can only be set if solution_types is
/// SOLUTION_TYPE_RECOMMENDATION.
core.String? diversityLevel;
/// What kind of diversity to use - data driven or rule based.
///
/// If unset, the server behavior defaults to RULE_BASED_DIVERSITY.
/// Possible string values are:
/// - "DIVERSITY_TYPE_UNSPECIFIED" : Default value.
/// - "RULE_BASED_DIVERSITY" : Rule based diversity.
/// - "DATA_DRIVEN_DIVERSITY" : Data driven diversity.
core.String? diversityType;
/// Condition do not associate specifications.
///
/// If multiple do not associate conditions match, all matching do not
/// associate controls in the list will execute. - Order does not matter. -
/// Maximum number of specifications is 100. Can only be set if solution_types
/// is SOLUTION_TYPE_SEARCH.
core.List<core.String>? doNotAssociateControlIds;
/// The specification for dynamically generated facets.
///
/// Notice that only textual facets can be dynamically generated. Can only be
/// set if solution_types is SOLUTION_TYPE_SEARCH.
GoogleCloudRetailV2SearchRequestDynamicFacetSpec? dynamicFacetSpec;
/// Whether to add additional category filters on the `similar-items` model.
///
/// If not specified, we enable it by default. Allowed values are: *
/// `no-category-match`: No additional filtering of original results from the
/// model and the customer's filters. * `relaxed-category-match`: Only keep
/// results with categories that match at least one item categories in the
/// PredictRequests's context item. * If customer also sends filters in the
/// PredictRequest, then the results will satisfy both conditions (user given
/// and category match). Can only be set if solution_types is
/// SOLUTION_TYPE_RECOMMENDATION.
core.String? enableCategoryFilterLevel;
/// Facet specifications for faceted search.
///
/// If empty, no facets are returned. The ids refer to the ids of Control
/// resources with only the Facet control set. These controls are assumed to
/// be in the same Catalog as the ServingConfig. A maximum of 100 values are
/// allowed. Otherwise, an INVALID_ARGUMENT error is returned. Can only be set
/// if solution_types is SOLUTION_TYPE_SEARCH.
core.List<core.String>? facetControlIds;
/// Condition filter specifications.
///
/// If a product matches multiple conditions in the specifications, filters
/// from these specifications are all applied and combined via the AND
/// operator. Maximum number of specifications is 100. Can only be set if
/// solution_types is SOLUTION_TYPE_SEARCH.
core.List<core.String>? filterControlIds;
/// Condition ignore specifications.
///
/// If multiple ignore conditions match, all matching ignore controls in the
/// list will execute. - Order does not matter. - Maximum number of
/// specifications is 100. Can only be set if solution_types is
/// SOLUTION_TYPE_SEARCH.
core.List<core.String>? ignoreControlIds;
/// The id of the model in the same Catalog to use at serving time.
///
/// Currently only RecommendationModels are supported:
/// https://cloud.google.com/retail/recommendations-ai/docs/create-models Can
/// be changed but only to a compatible model (e.g. others-you-may-like CTR to
/// others-you-may-like CVR). Required when solution_types is
/// SOLUTION_TYPE_RECOMMENDATION.
core.String? modelId;
/// Fully qualified name `projects / * /locations/global/catalogs / *
/// /servingConfig / * `
///
/// Immutable.
core.String? name;
/// Condition oneway synonyms specifications.
///
/// If multiple oneway synonyms conditions match, all matching oneway synonyms
/// controls in the list will execute. Order of controls in the list will not
/// matter. Maximum number of specifications is 100. Can only be set if
/// solution_types is SOLUTION_TYPE_SEARCH.
core.List<core.String>? onewaySynonymsControlIds;
/// The specification for personalization spec.
///
/// Can only be set if solution_types is SOLUTION_TYPE_SEARCH. Notice that if
/// both ServingConfig.personalization_spec and
/// SearchRequest.personalization_spec are set.
/// SearchRequest.personalization_spec will override
/// ServingConfig.personalization_spec.
GoogleCloudRetailV2SearchRequestPersonalizationSpec? personalizationSpec;
/// How much price ranking we want in serving results.
///
/// Price reranking causes product items with a similar recommendation
/// probability to be ordered by price, with the highest-priced items first.
/// This setting could result in a decrease in click-through and conversion
/// rates. Allowed values are: * `no-price-reranking` * `low-price-reranking`
/// * `medium-price-reranking` * `high-price-reranking` If not specified, we
/// choose default based on model type. Default value: `no-price-reranking`.
/// Can only be set if solution_types is SOLUTION_TYPE_RECOMMENDATION.
core.String? priceRerankingLevel;
/// Condition redirect specifications.
///
/// Only the first triggered redirect action is applied, even if multiple
/// apply. Maximum number of specifications is 1000. Can only be set if
/// solution_types is SOLUTION_TYPE_SEARCH.
core.List<core.String>? redirectControlIds;
/// Condition replacement specifications.
///
/// - Applied according to the order in the list. - A previously replaced term
/// can not be re-replaced. - Maximum number of specifications is 100. Can
/// only be set if solution_types is SOLUTION_TYPE_SEARCH.
core.List<core.String>? replacementControlIds;
/// Specifies the solution types that a serving config can be associated with.
///
/// Currently we support setting only one type of solution.
///
/// Required. Immutable.
core.List<core.String>? solutionTypes;
/// Condition synonyms specifications.
///
/// If multiple syonyms conditions match, all matching synonyms control in the
/// list will execute. Order of controls in the list will not matter. Maximum
/// number of specifications is 100. Can only be set if solution_types is
/// SOLUTION_TYPE_SEARCH.
core.List<core.String>? twowaySynonymsControlIds;
GoogleCloudRetailV2ServingConfig({
this.boostControlIds,
this.displayName,
this.diversityLevel,
this.diversityType,
this.doNotAssociateControlIds,
this.dynamicFacetSpec,
this.enableCategoryFilterLevel,
this.facetControlIds,
this.filterControlIds,
this.ignoreControlIds,
this.modelId,
this.name,
this.onewaySynonymsControlIds,
this.personalizationSpec,
this.priceRerankingLevel,
this.redirectControlIds,
this.replacementControlIds,
this.solutionTypes,
this.twowaySynonymsControlIds,
});
GoogleCloudRetailV2ServingConfig.fromJson(core.Map json_)
: this(
boostControlIds: json_.containsKey('boostControlIds')
? (json_['boostControlIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
displayName: json_.containsKey('displayName')
? json_['displayName'] as core.String
: null,
diversityLevel: json_.containsKey('diversityLevel')
? json_['diversityLevel'] as core.String
: null,
diversityType: json_.containsKey('diversityType')
? json_['diversityType'] as core.String
: null,
doNotAssociateControlIds:
json_.containsKey('doNotAssociateControlIds')
? (json_['doNotAssociateControlIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
dynamicFacetSpec: json_.containsKey('dynamicFacetSpec')
? GoogleCloudRetailV2SearchRequestDynamicFacetSpec.fromJson(
json_['dynamicFacetSpec']
as core.Map<core.String, core.dynamic>)
: null,
enableCategoryFilterLevel:
json_.containsKey('enableCategoryFilterLevel')
? json_['enableCategoryFilterLevel'] as core.String
: null,
facetControlIds: json_.containsKey('facetControlIds')
? (json_['facetControlIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
filterControlIds: json_.containsKey('filterControlIds')
? (json_['filterControlIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
ignoreControlIds: json_.containsKey('ignoreControlIds')
? (json_['ignoreControlIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
modelId: json_.containsKey('modelId')
? json_['modelId'] as core.String
: null,
name: json_.containsKey('name') ? json_['name'] as core.String : null,
onewaySynonymsControlIds:
json_.containsKey('onewaySynonymsControlIds')
? (json_['onewaySynonymsControlIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
personalizationSpec: json_.containsKey('personalizationSpec')
? GoogleCloudRetailV2SearchRequestPersonalizationSpec.fromJson(
json_['personalizationSpec']
as core.Map<core.String, core.dynamic>)
: null,
priceRerankingLevel: json_.containsKey('priceRerankingLevel')
? json_['priceRerankingLevel'] as core.String
: null,
redirectControlIds: json_.containsKey('redirectControlIds')
? (json_['redirectControlIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
replacementControlIds: json_.containsKey('replacementControlIds')
? (json_['replacementControlIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
solutionTypes: json_.containsKey('solutionTypes')
? (json_['solutionTypes'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
twowaySynonymsControlIds:
json_.containsKey('twowaySynonymsControlIds')
? (json_['twowaySynonymsControlIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (boostControlIds != null) 'boostControlIds': boostControlIds!,
if (displayName != null) 'displayName': displayName!,
if (diversityLevel != null) 'diversityLevel': diversityLevel!,
if (diversityType != null) 'diversityType': diversityType!,
if (doNotAssociateControlIds != null)
'doNotAssociateControlIds': doNotAssociateControlIds!,
if (dynamicFacetSpec != null) 'dynamicFacetSpec': dynamicFacetSpec!,
if (enableCategoryFilterLevel != null)
'enableCategoryFilterLevel': enableCategoryFilterLevel!,
if (facetControlIds != null) 'facetControlIds': facetControlIds!,
if (filterControlIds != null) 'filterControlIds': filterControlIds!,
if (ignoreControlIds != null) 'ignoreControlIds': ignoreControlIds!,
if (modelId != null) 'modelId': modelId!,
if (name != null) 'name': name!,
if (onewaySynonymsControlIds != null)
'onewaySynonymsControlIds': onewaySynonymsControlIds!,
if (personalizationSpec != null)
'personalizationSpec': personalizationSpec!,
if (priceRerankingLevel != null)
'priceRerankingLevel': priceRerankingLevel!,
if (redirectControlIds != null)
'redirectControlIds': redirectControlIds!,
if (replacementControlIds != null)
'replacementControlIds': replacementControlIds!,
if (solutionTypes != null) 'solutionTypes': solutionTypes!,
if (twowaySynonymsControlIds != null)
'twowaySynonymsControlIds': twowaySynonymsControlIds!,
};
}
/// Request message to set a specified branch as new default_branch.
class GoogleCloudRetailV2SetDefaultBranchRequest {
/// The final component of the resource name of a branch.
///
/// This field must be one of "0", "1" or "2". Otherwise, an INVALID_ARGUMENT
/// error is returned. If there are no sufficient active products in the
/// targeted branch and force is not set, a FAILED_PRECONDITION error is
/// returned.
core.String? branchId;
/// If set to true, it permits switching to a branch with branch_id even if it
/// has no sufficient active products.
core.bool? force;
/// Some note on this request, this can be retrieved by
/// CatalogService.GetDefaultBranch before next valid default branch set
/// occurs.
///
/// This field must be a UTF-8 encoded string with a length limit of 1,000
/// characters. Otherwise, an INVALID_ARGUMENT error is returned.
core.String? note;
GoogleCloudRetailV2SetDefaultBranchRequest({
this.branchId,
this.force,
this.note,
});
GoogleCloudRetailV2SetDefaultBranchRequest.fromJson(core.Map json_)
: this(
branchId: json_.containsKey('branchId')
? json_['branchId'] as core.String
: null,
force:
json_.containsKey('force') ? json_['force'] as core.bool : null,
note: json_.containsKey('note') ? json_['note'] as core.String : null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (branchId != null) 'branchId': branchId!,
if (force != null) 'force': force!,
if (note != null) 'note': note!,
};
}
/// Request message for ProductService.SetInventory method.
class GoogleCloudRetailV2SetInventoryRequest {
/// If set to true, and the Product with name Product.name is not found, the
/// inventory update will still be processed and retained for at most 1 day
/// until the Product is created.
///
/// If set to false, a NOT_FOUND error is returned if the Product is not
/// found.
core.bool? allowMissing;
/// The inventory information to update.
///
/// The allowable fields to update are: * Product.price_info *
/// Product.availability * Product.available_quantity *
/// Product.fulfillment_info The updated inventory fields must be specified in
/// SetInventoryRequest.set_mask. If SetInventoryRequest.inventory.name is
/// empty or invalid, an INVALID_ARGUMENT error is returned. If the caller
/// does not have permission to update the Product named in Product.name,
/// regardless of whether or not it exists, a PERMISSION_DENIED error is
/// returned. If the Product to update does not have existing inventory
/// information, the provided inventory information will be inserted. If the
/// Product to update has existing inventory information, the provided
/// inventory information will be merged while respecting the last update time
/// for each inventory field, using the provided or default value for
/// SetInventoryRequest.set_time. The caller can replace place IDs for a
/// subset of fulfillment types in the following ways: * Adds
/// "fulfillment_info" in SetInventoryRequest.set_mask * Specifies only the
/// desired fulfillment types and corresponding place IDs to update in
/// SetInventoryRequest.inventory.fulfillment_info The caller can clear all
/// place IDs from a subset of fulfillment types in the following ways: * Adds
/// "fulfillment_info" in SetInventoryRequest.set_mask * Specifies only the
/// desired fulfillment types to clear in
/// SetInventoryRequest.inventory.fulfillment_info * Checks that only the
/// desired fulfillment info types have empty
/// SetInventoryRequest.inventory.fulfillment_info.place_ids The last update
/// time is recorded for the following inventory fields: * Product.price_info
/// * Product.availability * Product.available_quantity *
/// Product.fulfillment_info If a full overwrite of inventory information
/// while ignoring timestamps is needed, ProductService.UpdateProduct should
/// be invoked instead.
///
/// Required.
GoogleCloudRetailV2Product? inventory;
/// Indicates which inventory fields in the provided Product to update.
///
/// At least one field must be provided. If an unsupported or unknown field is
/// provided, an INVALID_ARGUMENT error is returned and the entire update will
/// be ignored.
core.String? setMask;
/// The time when the request is issued, used to prevent out-of-order updates
/// on inventory fields with the last update time recorded.
///
/// If not provided, the internal system time will be used.
core.String? setTime;
GoogleCloudRetailV2SetInventoryRequest({
this.allowMissing,
this.inventory,
this.setMask,
this.setTime,
});
GoogleCloudRetailV2SetInventoryRequest.fromJson(core.Map json_)
: this(
allowMissing: json_.containsKey('allowMissing')
? json_['allowMissing'] as core.bool
: null,
inventory: json_.containsKey('inventory')
? GoogleCloudRetailV2Product.fromJson(
json_['inventory'] as core.Map<core.String, core.dynamic>)
: null,
setMask: json_.containsKey('setMask')
? json_['setMask'] as core.String
: null,
setTime: json_.containsKey('setTime')
? json_['setTime'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (allowMissing != null) 'allowMissing': allowMissing!,
if (inventory != null) 'inventory': inventory!,
if (setMask != null) 'setMask': setMask!,
if (setTime != null) 'setTime': setTime!,
};
}
/// Request to manually start a tuning process now (instead of waiting for the
/// periodically scheduled tuning to happen).
typedef GoogleCloudRetailV2TuneModelRequest = $Empty;
/// UserEvent captures all metadata information Retail API needs to know about
/// how end users interact with customers' website.
class GoogleCloudRetailV2UserEvent {
/// Extra user event features to include in the recommendation model.
///
/// If you provide custom attributes for ingested user events, also include
/// them in the user events that you associate with prediction requests.
/// Custom attribute formatting must be consistent between imported events and
/// events provided with prediction requests. This lets the Retail API use
/// those custom attributes when training models and serving predictions,
/// which helps improve recommendation quality. This field needs to pass all
/// below criteria, otherwise an INVALID_ARGUMENT error is returned: * The key
/// must be a UTF-8 encoded string with a length limit of 5,000 characters. *
/// For text attributes, at most 400 values are allowed. Empty values are not
/// allowed. Each value must be a UTF-8 encoded string with a length limit of
/// 256 characters. * For number attributes, at most 400 values are allowed.
/// For product recommendations, an example of extra user information is
/// traffic_channel, which is how a user arrives at the site. Users can arrive
/// at the site by coming to the site directly, coming through Google search,
/// or in other ways.
core.Map<core.String, GoogleCloudRetailV2CustomAttribute>? attributes;
/// Highly recommended for user events that are the result of
/// PredictionService.Predict.
///
/// This field enables accurate attribution of recommendation model
/// performance. The value must be a valid PredictResponse.attribution_token
/// for user events that are the result of PredictionService.Predict. The
/// value must be a valid SearchResponse.attribution_token for user events
/// that are the result of SearchService.Search. This token enables us to
/// accurately attribute page view or purchase back to the event and the
/// particular predict response containing this clicked/purchased product. If
/// user clicks on product K in the recommendation results, pass
/// PredictResponse.attribution_token as a URL parameter to product K's page.
/// When recording events on product K's page, log the
/// PredictResponse.attribution_token to this field.
core.String? attributionToken;
/// The ID or name of the associated shopping cart.
///
/// This ID is used to associate multiple items added or present in the cart
/// before purchase. This can only be set for `add-to-cart`,
/// `purchase-complete`, or `shopping-cart-page-view` events.
core.String? cartId;
/// The main auto-completion details related to the event.
///
/// This field should be set for `search` event when autocomplete function is
/// enabled and the user clicks a suggestion for search.
GoogleCloudRetailV2CompletionDetail? completionDetail;
/// The entity for customers that may run multiple different entities,
/// domains, sites or regions, for example, "Google US", "Google Ads",
/// "Waymo", "google.com", "youtube.com", etc.
///
/// It is recommended to set this field to get better per-entity search,
/// completion and prediction results.
core.String? entity;
/// Only required for UserEventService.ImportUserEvents method.
///
/// Timestamp of when the user event happened.
core.String? eventTime;
/// User event type.
///
/// Allowed values are: * `add-to-cart`: Products being added to cart. *
/// `category-page-view`: Special pages such as sale or promotion pages
/// viewed. * `detail-page-view`: Products detail page viewed. *
/// `home-page-view`: Homepage viewed. * `promotion-offered`: Promotion is
/// offered to a user. * `promotion-not-offered`: Promotion is not offered to
/// a user. * `purchase-complete`: User finishing a purchase. * `search`:
/// Product search. * `shopping-cart-page-view`: User viewing a shopping cart.
///
/// Required.
core.String? eventType;
/// A list of identifiers for the independent experiment groups this user
/// event belongs to.
///
/// This is used to distinguish between user events associated with different
/// experiment setups (e.g. using Retail API, using different recommendation
/// models).
core.List<core.String>? experimentIds;
/// The filter syntax consists of an expression language for constructing a
/// predicate from one or more fields of the products being filtered.
///
/// See SearchRequest.filter for definition and syntax. The value must be a
/// UTF-8 encoded string with a length limit of 1,000 characters. Otherwise,
/// an INVALID_ARGUMENT error is returned.
core.String? filter;
/// An integer that specifies the current offset for pagination (the 0-indexed
/// starting location, amongst the products deemed by the API as relevant).
///
/// See SearchRequest.offset for definition. If this field is negative, an
/// INVALID_ARGUMENT is returned. This can only be set for `search` events.
/// Other event types should not set this field. Otherwise, an
/// INVALID_ARGUMENT error is returned.
core.int? offset;
/// The order in which products are returned.
///
/// See SearchRequest.order_by for definition and syntax. The value must be a
/// UTF-8 encoded string with a length limit of 1,000 characters. Otherwise,
/// an INVALID_ARGUMENT error is returned. This can only be set for `search`
/// events. Other event types should not set this field. Otherwise, an
/// INVALID_ARGUMENT error is returned.
core.String? orderBy;
/// The categories associated with a category page.
///
/// To represent full path of category, use '\>' sign to separate different
/// hierarchies. If '\>' is part of the category name, replace it with other
/// character(s). Category pages include special pages such as sales or
/// promotions. For instance, a special sale page may have the category
/// hierarchy: "pageCategories" : \["Sales \> 2017 Black Friday Deals"\].
/// Required for `category-page-view` events. At least one of search_query or
/// page_categories is required for `search` events. Other event types should
/// not set this field. Otherwise, an INVALID_ARGUMENT error is returned.
core.List<core.String>? pageCategories;
/// A unique ID of a web page view.
///
/// This should be kept the same for all user events triggered from the same
/// pageview. For example, an item detail page view could trigger multiple
/// events as the user is browsing the page. The `pageViewId` property should
/// be kept the same for all these events so that they can be grouped together
/// properly. When using the client side event reporting with JavaScript pixel
/// and Google Tag Manager, this value is filled in automatically.
core.String? pageViewId;
/// The main product details related to the event.
///
/// This field is optional except for the following event types: *
/// `add-to-cart` * `detail-page-view` * `purchase-complete` In a `search`
/// event, this field represents the products returned to the end user on the
/// current page (the end user may have not finished browsing the whole page
/// yet). When a new page is returned to the end user, after
/// pagination/filtering/ordering even for the same query, a new `search`
/// event with different product_details is desired. The end user may have not
/// finished browsing the whole page yet.
core.List<GoogleCloudRetailV2ProductDetail>? productDetails;
/// A transaction represents the entire purchase transaction.
///
/// Required for `purchase-complete` events. Other event types should not set
/// this field. Otherwise, an INVALID_ARGUMENT error is returned.
GoogleCloudRetailV2PurchaseTransaction? purchaseTransaction;
/// The referrer URL of the current page.
///
/// When using the client side event reporting with JavaScript pixel and
/// Google Tag Manager, this value is filled in automatically.
core.String? referrerUri;
/// The user's search query.
///
/// See SearchRequest.query for definition. The value must be a UTF-8 encoded
/// string with a length limit of 5,000 characters. Otherwise, an
/// INVALID_ARGUMENT error is returned. At least one of search_query or
/// page_categories is required for `search` events. Other event types should
/// not set this field. Otherwise, an INVALID_ARGUMENT error is returned.
core.String? searchQuery;
/// A unique identifier for tracking a visitor session with a length limit of
/// 128 bytes.
///
/// A session is an aggregation of an end user behavior in a time span. A
/// general guideline to populate the sesion_id: 1. If user has no activity
/// for 30 min, a new session_id should be assigned. 2. The session_id should
/// be unique across users, suggest use uuid or add visitor_id as prefix.
core.String? sessionId;
/// Complete URL (window.location.href) of the user's current page.
///
/// When using the client side event reporting with JavaScript pixel and
/// Google Tag Manager, this value is filled in automatically. Maximum length
/// 5,000 characters.
core.String? uri;
/// User information.
GoogleCloudRetailV2UserInfo? userInfo;
/// A unique identifier for tracking visitors.
///
/// For example, this could be implemented with an HTTP cookie, which should
/// be able to uniquely identify a visitor on a single device. This unique
/// identifier should not change if the visitor log in/out of the website.
/// Don't set the field to the same fixed ID for different users. This mixes
/// the event history of those users together, which results in degraded model
/// quality. The field must be a UTF-8 encoded string with a length limit of
/// 128 characters. Otherwise, an INVALID_ARGUMENT error is returned. The
/// field should not contain PII or user-data. We recommend to use Google
/// Analytics
/// [Client ID](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#clientId)
/// for this field.
///
/// Required.
core.String? visitorId;
GoogleCloudRetailV2UserEvent({
this.attributes,
this.attributionToken,
this.cartId,
this.completionDetail,
this.entity,
this.eventTime,
this.eventType,
this.experimentIds,
this.filter,
this.offset,
this.orderBy,
this.pageCategories,
this.pageViewId,
this.productDetails,
this.purchaseTransaction,
this.referrerUri,
this.searchQuery,
this.sessionId,
this.uri,
this.userInfo,
this.visitorId,
});
GoogleCloudRetailV2UserEvent.fromJson(core.Map json_)
: this(
attributes: json_.containsKey('attributes')
? (json_['attributes'] as core.Map<core.String, core.dynamic>)
.map(
(key, value) => core.MapEntry(
key,
GoogleCloudRetailV2CustomAttribute.fromJson(
value as core.Map<core.String, core.dynamic>),
),
)
: null,
attributionToken: json_.containsKey('attributionToken')
? json_['attributionToken'] as core.String
: null,
cartId: json_.containsKey('cartId')
? json_['cartId'] as core.String
: null,
completionDetail: json_.containsKey('completionDetail')
? GoogleCloudRetailV2CompletionDetail.fromJson(
json_['completionDetail']
as core.Map<core.String, core.dynamic>)
: null,
entity: json_.containsKey('entity')
? json_['entity'] as core.String
: null,
eventTime: json_.containsKey('eventTime')
? json_['eventTime'] as core.String
: null,
eventType: json_.containsKey('eventType')
? json_['eventType'] as core.String
: null,
experimentIds: json_.containsKey('experimentIds')
? (json_['experimentIds'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
filter: json_.containsKey('filter')
? json_['filter'] as core.String
: null,
offset:
json_.containsKey('offset') ? json_['offset'] as core.int : null,
orderBy: json_.containsKey('orderBy')
? json_['orderBy'] as core.String
: null,
pageCategories: json_.containsKey('pageCategories')
? (json_['pageCategories'] as core.List)
.map((value) => value as core.String)
.toList()
: null,
pageViewId: json_.containsKey('pageViewId')
? json_['pageViewId'] as core.String
: null,
productDetails: json_.containsKey('productDetails')
? (json_['productDetails'] as core.List)
.map((value) => GoogleCloudRetailV2ProductDetail.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
purchaseTransaction: json_.containsKey('purchaseTransaction')
? GoogleCloudRetailV2PurchaseTransaction.fromJson(
json_['purchaseTransaction']
as core.Map<core.String, core.dynamic>)
: null,
referrerUri: json_.containsKey('referrerUri')
? json_['referrerUri'] as core.String
: null,
searchQuery: json_.containsKey('searchQuery')
? json_['searchQuery'] as core.String
: null,
sessionId: json_.containsKey('sessionId')
? json_['sessionId'] as core.String
: null,
uri: json_.containsKey('uri') ? json_['uri'] as core.String : null,
userInfo: json_.containsKey('userInfo')
? GoogleCloudRetailV2UserInfo.fromJson(
json_['userInfo'] as core.Map<core.String, core.dynamic>)
: null,
visitorId: json_.containsKey('visitorId')
? json_['visitorId'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (attributes != null) 'attributes': attributes!,
if (attributionToken != null) 'attributionToken': attributionToken!,
if (cartId != null) 'cartId': cartId!,
if (completionDetail != null) 'completionDetail': completionDetail!,
if (entity != null) 'entity': entity!,
if (eventTime != null) 'eventTime': eventTime!,
if (eventType != null) 'eventType': eventType!,
if (experimentIds != null) 'experimentIds': experimentIds!,
if (filter != null) 'filter': filter!,
if (offset != null) 'offset': offset!,
if (orderBy != null) 'orderBy': orderBy!,
if (pageCategories != null) 'pageCategories': pageCategories!,
if (pageViewId != null) 'pageViewId': pageViewId!,
if (productDetails != null) 'productDetails': productDetails!,
if (purchaseTransaction != null)
'purchaseTransaction': purchaseTransaction!,
if (referrerUri != null) 'referrerUri': referrerUri!,
if (searchQuery != null) 'searchQuery': searchQuery!,
if (sessionId != null) 'sessionId': sessionId!,
if (uri != null) 'uri': uri!,
if (userInfo != null) 'userInfo': userInfo!,
if (visitorId != null) 'visitorId': visitorId!,
};
}
/// The inline source for the input config for ImportUserEvents method.
class GoogleCloudRetailV2UserEventInlineSource {
/// A list of user events to import.
///
/// Recommended max of 10k items.
///
/// Required.
core.List<GoogleCloudRetailV2UserEvent>? userEvents;
GoogleCloudRetailV2UserEventInlineSource({
this.userEvents,
});
GoogleCloudRetailV2UserEventInlineSource.fromJson(core.Map json_)
: this(
userEvents: json_.containsKey('userEvents')
? (json_['userEvents'] as core.List)
.map((value) => GoogleCloudRetailV2UserEvent.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (userEvents != null) 'userEvents': userEvents!,
};
}
/// The input config source for user events.
class GoogleCloudRetailV2UserEventInputConfig {
/// BigQuery input source.
///
/// Required.
GoogleCloudRetailV2BigQuerySource? bigQuerySource;
/// Google Cloud Storage location for the input content.
///
/// Required.
GoogleCloudRetailV2GcsSource? gcsSource;
/// The Inline source for the input content for UserEvents.
///
/// Required.
GoogleCloudRetailV2UserEventInlineSource? userEventInlineSource;
GoogleCloudRetailV2UserEventInputConfig({
this.bigQuerySource,
this.gcsSource,
this.userEventInlineSource,
});
GoogleCloudRetailV2UserEventInputConfig.fromJson(core.Map json_)
: this(
bigQuerySource: json_.containsKey('bigQuerySource')
? GoogleCloudRetailV2BigQuerySource.fromJson(
json_['bigQuerySource']
as core.Map<core.String, core.dynamic>)
: null,
gcsSource: json_.containsKey('gcsSource')
? GoogleCloudRetailV2GcsSource.fromJson(
json_['gcsSource'] as core.Map<core.String, core.dynamic>)
: null,
userEventInlineSource: json_.containsKey('userEventInlineSource')
? GoogleCloudRetailV2UserEventInlineSource.fromJson(
json_['userEventInlineSource']
as core.Map<core.String, core.dynamic>)
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (bigQuerySource != null) 'bigQuerySource': bigQuerySource!,
if (gcsSource != null) 'gcsSource': gcsSource!,
if (userEventInlineSource != null)
'userEventInlineSource': userEventInlineSource!,
};
}
/// Information of an end user.
class GoogleCloudRetailV2UserInfo {
/// True if the request is made directly from the end user, in which case the
/// ip_address and user_agent can be populated from the HTTP request.
///
/// This flag should be set only if the API request is made directly from the
/// end user such as a mobile app (and not if a gateway or a server is
/// processing and pushing the user events). This should not be set when using
/// the JavaScript tag in UserEventService.CollectUserEvent.
core.bool? directUserRequest;
/// The end user's IP address.
///
/// This field is used to extract location information for personalization.
/// This field must be either an IPv4 address (e.g. "104.133.9.80") or an IPv6
/// address (e.g. "2001:0db8:85a3:0000:0000:8a2e:0370:7334"). Otherwise, an
/// INVALID_ARGUMENT error is returned. This should not be set when: * setting
/// SearchRequest.user_info. * using the JavaScript tag in
/// UserEventService.CollectUserEvent or if direct_user_request is set.
core.String? ipAddress;
/// User agent as included in the HTTP header.
///
/// Required for getting SearchResponse.sponsored_results. The field must be a
/// UTF-8 encoded string with a length limit of 1,000 characters. Otherwise,
/// an INVALID_ARGUMENT error is returned. This should not be set when using
/// the client side event reporting with GTM or JavaScript tag in
/// UserEventService.CollectUserEvent or if direct_user_request is set.
core.String? userAgent;
/// Highly recommended for logged-in users.
///
/// Unique identifier for logged-in user, such as a user name. Don't set for
/// anonymous users. Always use a hashed value for this ID. Don't set the
/// field to the same fixed ID for different users. This mixes the event
/// history of those users together, which results in degraded model quality.
/// The field must be a UTF-8 encoded string with a length limit of 128
/// characters. Otherwise, an INVALID_ARGUMENT error is returned.
core.String? userId;
GoogleCloudRetailV2UserInfo({
this.directUserRequest,
this.ipAddress,
this.userAgent,
this.userId,
});
GoogleCloudRetailV2UserInfo.fromJson(core.Map json_)
: this(
directUserRequest: json_.containsKey('directUserRequest')
? json_['directUserRequest'] as core.bool
: null,
ipAddress: json_.containsKey('ipAddress')
? json_['ipAddress'] as core.String
: null,
userAgent: json_.containsKey('userAgent')
? json_['userAgent'] as core.String
: null,
userId: json_.containsKey('userId')
? json_['userId'] as core.String
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (directUserRequest != null) 'directUserRequest': directUserRequest!,
if (ipAddress != null) 'ipAddress': ipAddress!,
if (userAgent != null) 'userAgent': userAgent!,
if (userId != null) 'userId': userId!,
};
}
/// The response message for Operations.ListOperations.
class GoogleLongrunningListOperationsResponse {
/// The standard List next-page token.
core.String? nextPageToken;
/// A list of operations that matches the specified filter in the request.
core.List<GoogleLongrunningOperation>? operations;
GoogleLongrunningListOperationsResponse({
this.nextPageToken,
this.operations,
});
GoogleLongrunningListOperationsResponse.fromJson(core.Map json_)
: this(
nextPageToken: json_.containsKey('nextPageToken')
? json_['nextPageToken'] as core.String
: null,
operations: json_.containsKey('operations')
? (json_['operations'] as core.List)
.map((value) => GoogleLongrunningOperation.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList()
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (nextPageToken != null) 'nextPageToken': nextPageToken!,
if (operations != null) 'operations': operations!,
};
}
/// This resource represents a long-running operation that is the result of a
/// network API call.
class GoogleLongrunningOperation {
/// If the value is `false`, it means the operation is still in progress.
///
/// If `true`, the operation is completed, and either `error` or `response` is
/// available.
core.bool? done;
/// The error result of the operation in case of failure or cancellation.
GoogleRpcStatus? error;
/// Service-specific metadata associated with the operation.
///
/// It typically contains progress information and common metadata such as
/// create time. Some services might not provide such metadata. Any method
/// that returns a long-running operation should document the metadata type,
/// if any.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object?>? metadata;
/// The server-assigned name, which is only unique within the same service
/// that originally returns it.
///
/// If you use the default HTTP mapping, the `name` should be a resource name
/// ending with `operations/{unique_id}`.
core.String? name;
/// The normal response of the operation in case of success.
///
/// If the original method returns no data on success, such as `Delete`, the
/// response is `google.protobuf.Empty`. If the original method is standard
/// `Get`/`Create`/`Update`, the response should be the resource. For other
/// methods, the response should have the type `XxxResponse`, where `Xxx` is
/// the original method name. For example, if the original method name is
/// `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.Map<core.String, core.Object?>? response;
GoogleLongrunningOperation({
this.done,
this.error,
this.metadata,
this.name,
this.response,
});
GoogleLongrunningOperation.fromJson(core.Map json_)
: this(
done: json_.containsKey('done') ? json_['done'] as core.bool : null,
error: json_.containsKey('error')
? GoogleRpcStatus.fromJson(
json_['error'] as core.Map<core.String, core.dynamic>)
: null,
metadata: json_.containsKey('metadata')
? json_['metadata'] as core.Map<core.String, core.dynamic>
: null,
name: json_.containsKey('name') ? json_['name'] as core.String : null,
response: json_.containsKey('response')
? json_['response'] as core.Map<core.String, core.dynamic>
: null,
);
core.Map<core.String, core.dynamic> toJson() => {
if (done != null) 'done': done!,
if (error != null) 'error': error!,
if (metadata != null) 'metadata': metadata!,
if (name != null) 'name': name!,
if (response != null) 'response': response!,
};
}
/// A generic empty message that you can re-use to avoid defining duplicated
/// empty messages in your APIs.
///
/// A typical example is to use it as the request or the response type of an API
/// method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns
/// (google.protobuf.Empty); }
typedef GoogleProtobufEmpty = $Empty;
/// The `Status` type defines a logical error model that is suitable for
/// different programming environments, including REST APIs and RPC APIs.
///
/// It is used by [gRPC](https://github.com/grpc). Each `Status` message
/// contains three pieces of data: error code, error message, and error details.
/// You can find out more about this error model and how to work with it in the
/// [API Design Guide](https://cloud.google.com/apis/design/errors).
typedef GoogleRpcStatus = $Status;
/// Represents a whole or partial calendar date, such as a birthday.
///
/// The time of day and time zone are either specified elsewhere or are
/// insignificant. The date is relative to the Gregorian Calendar. This can
/// represent one of the following: * A full date, with non-zero year, month,
/// and day values. * A month and day, with a zero year (for example, an
/// anniversary). * A year on its own, with a zero month and a zero day. * A
/// year and month, with a zero day (for example, a credit card expiration
/// date). Related types: * google.type.TimeOfDay * google.type.DateTime *
/// google.protobuf.Timestamp
typedef GoogleTypeDate = $Date;