public IHttpActionResult UpdateProperty([FromBody] ExtendedPropertyModel propertyModel) { try { var connectionString = Request.Headers.GetValues("connectionString").FirstOrDefault(); HttpRequires.IsNotNull(connectionString, "Invalid Connection"); HttpRequires.IsNotNull(propertyModel, "Invalid Properties"); ValidatePropertyModel(propertyModel); DalResponseModel deletionResponse, addResponse; //Using the sql server system procedures I had (for add and delete). Instead of an in // place update, the process is to first delete the existing property, and then add // the new values. To avoid a situation where the delete succeeds but the add fails, // we use a transaction scope. using (var scope = new TransactionScope()) { deletionResponse = _propertyDal.DeleteProperty(propertyModel, connectionString); addResponse = _propertyDal.AddProperty(propertyModel, connectionString); HttpAssert.Success(deletionResponse); HttpAssert.Success(addResponse); scope.Complete(); } return(Ok()); } catch (ArgumentException ex) { return(BadRequest(ex.Message)); } catch (Exception ex) { return(InternalServerError(ex)); } }
public IHttpActionResult AddProperty([FromBody] ExtendedPropertyModel propertyModel) { try { var connectionString = Request.Headers.GetValues("connectionString").FirstOrDefault(); HttpRequires.IsNotNull(connectionString, "Invalid Connection"); HttpRequires.IsNotNull(propertyModel, "Invalid Properties"); ValidatePropertyModel(propertyModel); var response = _propertyDal.AddProperty(propertyModel, connectionString); HttpAssert.Success(response); return(Ok()); } catch (ArgumentException ex) { return(BadRequest(ex.Message)); } catch (Exception ex) { return(InternalServerError(ex)); } }
public async Task ReplaceItem_PreconditionsFail_Returns412() { var item = GetItemFromDb <HUnit>("hunit-8"); var originalData = item.Data; item.Data = "Replaced"; var response = await SendRequestToServer <HUnit>(HttpMethod.Put, $"/tables/hunits/{item.Id}", item, new Dictionary <string, string> { { "If-None-Match", ETag.FromByteArray(item.Version) } }); Assert.AreEqual(HttpStatusCode.PreconditionFailed, response.StatusCode); var actual = await GetValueFromResponse <HUnit>(response); Assert.AreEqual(item.Id, actual.Id); Assert.AreEqual(originalData, actual.Data); HttpAssert.AreEqual(actual.Version, response.Headers.ETag); HttpAssert.Match(actual.UpdatedAt, response.Content.Headers.LastModified); var dbItem = GetItemFromDb <HUnit>(item.Id); Assert.IsNotNull(dbItem); Assert.AreEqual(originalData, dbItem.Data); }