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

                    if (obj.TagName != null)
                    {
                        sqlPatchOperations.AppendLine(obj.TagName.Operation == OperationKind.Remove
                            ? "tagName = NULL,"
                            : "tagName = @TagName,"
                                                      );
                        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 \"Tag\" SET {patchOperations} WHERE tagId = @ResourceId", new {
                        ResourceId = obj.ResourceId,
                        TagName    = (string)(obj.TagName == default ? default : obj.TagName.Value)
                    }).ConfigureAwait(false);

                    return(Result.Ok());
                }
示例#2
0
 public void Patch([FromRoute(Name = "tag-code")] string tagCode, [FromBody] TagPatch patch)
 {
 }