Example #1
0
        /// <summary>
        /// Updates a single Product with one or more values
        /// </summary>
        /// <param name="updatedProduct">The new data for the Product you wish to update</param>
        /// <returns>Returns a result indicating if the operation succeeded</returns>
        public async Task <Result> UpdateVenueProduct(int venueId, ProductPatch updatedProduct)
        {
            try
            {
                using var con = new Npgsql.NpgsqlConnection(settings.Connection.DatabaseConnectionString);
                var sqlPatchOperations = new StringBuilder();
                var obj = updatedProduct;

                if (obj.ProductType != null)
                {
                    sqlPatchOperations.AppendLine(obj.ProductType.Operation == OperationKind.Remove
                      ? "productTypeId = NULL,"
                      : "productTypeId = @ProductType,"
                                                  );
                }
                if (obj.ProductName != null)
                {
                    sqlPatchOperations.AppendLine(obj.ProductName.Operation == OperationKind.Remove
                      ? "productName = NULL,"
                      : "productName = @ProductName,"
                                                  );
                }
                if (obj.ProductDescription != null)
                {
                    sqlPatchOperations.AppendLine(obj.ProductDescription.Operation == OperationKind.Remove
                      ? "productDescription = NULL,"
                      : "productDescription = @ProductDescription,"
                                                  );
                }
                if (obj.Price != null)
                {
                    sqlPatchOperations.AppendLine(obj.Price.Operation == OperationKind.Remove
                      ? "price = NULL,"
                      : "price = @Price,"
                                                  );
                }
                if (obj.Image != null)
                {
                    sqlPatchOperations.AppendLine(obj.Image.Operation == OperationKind.Remove
                      ? "image = NULL,"
                      : "image = @Image,"
                                                  );
                }
                if (obj.AgeRestricted != null)
                {
                    sqlPatchOperations.AppendLine(obj.AgeRestricted.Operation == OperationKind.Remove
                      ? "ageRestricted = NULL,"
                      : "ageRestricted = @AgeRestricted,"
                                                  );
                }
                if (obj.ParentProductId != null)
                {
                    sqlPatchOperations.AppendLine(obj.ParentProductId.Operation == OperationKind.Remove
                      ? "parentProductId = NULL"
                      : "parentProductId = @ParentProductId"
                                                  );
                }

                // Remove final ", " from StringBuilder to ensure query is valid
                sqlPatchOperations.Remove(sqlPatchOperations.Length - 2, 2);

                await con.ExecuteAsync($"UPDATE \"Product\" SET {sqlPatchOperations} WHERE venueId = @VenueId AND productId = @ResourceId", new
                {
                    VenueId = venueId,
                    obj.ResourceId,
                    ProductType        = (int)(obj.ProductType == default ? default : obj.ProductType.Value),
                    ProductName        = (string)(obj.ProductName == default ? default : obj.ProductName.Value),
                    ProductDescription = (string)(obj.ProductDescription == default ? default : obj.ProductDescription.Value),
                    Price           = (decimal)(obj.Price == default ? default : obj.Price.Value),
                    Image           = (string)(obj.Image == default ? default : obj.Image.Value),
                    AgeRestricted   = (bool)(obj.AgeRestricted != default && obj.AgeRestricted.Value),
                    ParentProductId = (int)(obj.ParentProductId == default ? default : obj.ParentProductId.Value)
                }).ConfigureAwait(false);

                return(Result.Ok());
            }
        /// <summary>
        /// Updates a single Product with one or more values
        /// </summary>
        /// <param name="updatedProduct">The new data for the Product you wish to update</param>
        /// <returns>Returns a result indicating if the operation succeeded</returns>
        public async Task <Result> UpdateProduct(ProductPatch updatedProduct)
        {
            try
            {
                using (var con = new Npgsql.NpgsqlConnection(settings.Connection.DatabaseConnectionString))
                {
                    var sqlPatchOperations = new StringBuilder();
                    var obj            = updatedProduct;
                    var operationCount = 0;

                    if (obj.ProductType != null)
                    {
                        sqlPatchOperations.AppendLine(obj.ProductType.Operation == OperationKind.Remove
                            ? "productTypeId = NULL,"
                            : "productTypeId = @ProductType,"
                                                      );
                        operationCount++;
                    }
                    if (obj.ProductName != null)
                    {
                        sqlPatchOperations.AppendLine(obj.ProductName.Operation == OperationKind.Remove
                            ? "productName = NULL,"
                            : "productName = @ProductName,"
                                                      );
                        operationCount++;
                    }
                    if (obj.ProductDescription != null)
                    {
                        sqlPatchOperations.AppendLine(obj.ProductDescription.Operation == OperationKind.Remove
                            ? "productDescription = NULL,"
                            : "productDescription = @ProductDescription,"
                                                      );
                        operationCount++;
                    }
                    if (obj.Price != null)
                    {
                        sqlPatchOperations.AppendLine(obj.Price.Operation == OperationKind.Remove
                            ? "price = NULL,"
                            : "price = @Price,"
                                                      );
                        operationCount++;
                    }
                    if (obj.Image != null)
                    {
                        sqlPatchOperations.AppendLine(obj.Image.Operation == OperationKind.Remove
                            ? "image = NULL,"
                            : "image = @Image,"
                                                      );
                        operationCount++;
                    }
                    if (obj.AgeRestricted != null)
                    {
                        sqlPatchOperations.AppendLine(obj.AgeRestricted.Operation == OperationKind.Remove
                            ? "ageRestricted = NULL,"
                            : "ageRestricted = @AgeRestricted,"
                                                      );
                        operationCount++;
                    }
                    if (obj.ParentProductId != null)
                    {
                        sqlPatchOperations.AppendLine(obj.ParentProductId.Operation == OperationKind.Remove
                            ? "parentProductId = NULL,"
                            : "parentProductId = @ParentProductId,"
                                                      );
                        operationCount++;
                    }
                    if (obj.VenueId != null)
                    {
                        sqlPatchOperations.AppendLine(obj.VenueId.Operation == OperationKind.Remove
                            ? "venueId = NULL,"
                            : "venueId = @VenueId,"
                                                      );
                        operationCount++;
                    }

                    var patchOperations = sqlPatchOperations.ToString();

                    if (operationCount > 0)
                    {
                        // Remove final ", " from StringBuilder to ensure query is valid
                        patchOperations = patchOperations.TrimEnd(System.Environment.NewLine.ToCharArray());
                        patchOperations = patchOperations.TrimEnd(',');
                    }

                    await con.ExecuteAsync($"UPDATE \"Product\" SET {patchOperations} WHERE productId = @ResourceId", new {
                        ResourceId         = obj.ResourceId,
                        ProductType        = (int)(obj.ProductType == default ? default : obj.ProductType.Value),
                        ProductName        = (string)(obj.ProductName == default ? default : obj.ProductName.Value),
                        ProductDescription = (string)(obj.ProductDescription == default ? default : obj.ProductDescription.Value),
                        Price           = (decimal)(obj.Price == default ? default : obj.Price.Value),
                        Image           = (string)(obj.Image == default ? default : obj.Image.Value),
                        AgeRestricted   = (bool)(obj.AgeRestricted == default ? default : obj.AgeRestricted.Value),
                        ParentProductId = (int)(obj.ParentProductId == default ? default : obj.ParentProductId.Value),
                        VenueId         = (int)(obj.VenueId == default ? default : obj.VenueId.Value)
                    }).ConfigureAwait(false);

                    return(Result.Ok());
                }