retail/interactive-tutorial/RetailProducts.Samples/CrudProductSample.cs (131 lines of code) (raw):

// Copyright 2021 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. using Google.Cloud.Retail.V2; using System; /// <summary> /// The crud product sample class. /// </summary> public class CrudProductSample { /// <summary> /// Generate the product. /// </summary> /// <returns>Generated product.</returns> private static Product GenerateProduct() { return new Product { Id = Guid.NewGuid().ToString("N").Substring(0, 14), Title = "Nest Mini", Type = Product.Types.Type.Primary, PriceInfo = new PriceInfo { Price = 30.0f, OriginalPrice = 35.5f, CurrencyCode = "USD" }, Availability = Product.Types.Availability.InStock, Categories = { "Speakers and displays" }, Brands = { "Google" } }; } /// <summary> /// Get the product for update. /// </summary> /// <param name="productName">The actual name of the retail product.</param> /// <returns>Generated product for update.</returns> private static Product GenerateProductForUpdate(string productName) { return new Product { Name = productName, Title = "Updated Nest Mini", Type = Product.Types.Type.Primary, PriceInfo = new PriceInfo { Price = 20.0f, OriginalPrice = 25.5f, CurrencyCode = "EUR" }, Availability = Product.Types.Availability.OutOfStock, Categories = { "Updated Speakers and displays" }, Brands = { "Updated Google" } }; } /// <summary> /// Call the Retail API to create a product. /// </summary> /// <param name="defaultBranchName">The default branch name.</param> /// <returns>Created retail product.</returns> public static Product CreateRetailProduct(string defaultBranchName) { Product generatedProduct = GenerateProduct(); CreateProductRequest createProductRequest = new CreateProductRequest { Product = generatedProduct, ProductId = generatedProduct.Id, Parent = defaultBranchName }; Console.WriteLine("Create product request:"); Console.WriteLine($"Product: {createProductRequest.Product}"); Console.WriteLine($"ProductId: {createProductRequest.ProductId}"); Console.WriteLine($"Parent: {createProductRequest.Parent}"); Console.WriteLine(); ProductServiceClient client = ProductServiceClient.Create(); Product createdProduct = client.CreateProduct(createProductRequest); Console.WriteLine("Created product:"); Console.WriteLine($"Product title: {createdProduct.Title}"); Console.WriteLine($"ProductId: {createProductRequest.ProductId}"); Console.WriteLine($"Parent: {createProductRequest.Parent}"); Console.WriteLine(); return createdProduct; } /// <summary> /// Call the Retail API to get a product /// </summary> /// <param name="productName">The actual name of the retail product.</param> /// <returns>Retail product.</returns> public static Product GetRetailProduct(string productName) { GetProductRequest getProductRequest = new GetProductRequest { Name = productName }; Console.WriteLine("Get product request:"); Console.WriteLine($"Product name: {getProductRequest.Name}"); Console.WriteLine(); ProductServiceClient client = ProductServiceClient.Create(); Product product = client.GetProduct(getProductRequest); Console.WriteLine("Get product response:"); Console.WriteLine($"Product Name: {product.Name}"); Console.WriteLine($"Product Title: {product.Title}"); Console.WriteLine($"Product Brands: {product.Brands}"); Console.WriteLine($"Product Categories: {product.Categories}"); Console.WriteLine($"Product Fulfillment Info: {product.FulfillmentInfo}"); Console.WriteLine(); return product; } /// <summary> /// Call the Retail API to update a product. /// </summary> /// <param name="productName">The actual name of the retail product.</param> /// <returns>Updated retail product.</returns> public static Product UpdateRetailProduct(string productName) { Product generatedProductForUpdate = GenerateProductForUpdate(productName); UpdateProductRequest updateProductRequest = new UpdateProductRequest { Product = generatedProductForUpdate, AllowMissing = true }; Console.WriteLine("Update product request:"); Console.WriteLine($"Product Name: {updateProductRequest.Product.Name}"); Console.WriteLine($"Product title: {updateProductRequest.Product.Title}"); Console.WriteLine(); ProductServiceClient client = ProductServiceClient.Create(); Product updatedProduct = client.UpdateProduct(updateProductRequest); Console.WriteLine($"Update title: {updatedProduct.Title}"); Console.WriteLine(); return updatedProduct; } /// <summary> /// Call the Retail API to delete a product /// </summary> /// <param name="productName">The actual name of the retail product.</param> public static void DeleteRetailProduct(string productName) { DeleteProductRequest deleteProductRequest = new DeleteProductRequest { Name = productName }; Console.WriteLine("Delete product request:"); Console.WriteLine($"Product Name: {deleteProductRequest.Name}"); Console.WriteLine(); ProductServiceClient client = ProductServiceClient.Create(); client.DeleteProduct(deleteProductRequest); Console.WriteLine($"Deleting product:"); Console.WriteLine($"Product {productName} was deleted"); Console.WriteLine(); } } /// <summary> /// The crud product tutorial class. /// </summary> public static class CrudProductTutorial { [Runner.Attributes.Example] public static void PerformCRUDProductOperations() { string projectId = Environment.GetEnvironmentVariable("GOOGLE_PROJECT_ID"); string defaultBranchName = $"projects/{projectId}/locations/global/catalogs/default_catalog/branches/default_branch"; Product createdProduct = CrudProductSample.CreateRetailProduct(defaultBranchName); CrudProductSample.GetRetailProduct(createdProduct.Name); CrudProductSample.UpdateRetailProduct(createdProduct.Name); CrudProductSample.DeleteRetailProduct(createdProduct.Name); } }