/// <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()); }