public List <WeightMeasurement> Read() { var result = new List <WeightMeasurement>(); var connString = DbContext.GetConnectionString(); using (var con = new SqliteConnection(connString)) { StringBuilder sb = new StringBuilder(); sb.AppendLine("SELECT id, entry_date, weight, unit"); sb.AppendLine("FROM WeightMeasurements "); con.Open(); using (var cmd = new SqliteCommand(sb.ToString(), con)) { using (var dr = cmd.ExecuteReader()) { while (dr.Read()) { var measurement = new WeightMeasurement(); measurement.Id = Guid.Parse((string)dr["id"]); measurement.EntryDate = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds((long)dr["entry_date"]); measurement.Weight = (double)dr["weight"]; measurement.Unit = Enum.Parse <WeightMeasurement.Units>((string)dr["unit"]); result.Add(measurement); } } } } return(result); }
public void Update_existing_weight_with_some_values_should_succeed() { // Arrange Guid originalId = Guid.NewGuid(); WeightMeasurement original = GenerateRandomWeightMeasurement(originalId); Weight bizLogic = new Weight(); var created = bizLogic.Create(original); // Act var expected = created.Artifact.Clone(); expected.Weight += 5; var actual = bizLogic.Update(expected, new List <string> { "weight" }); // Assert actual.Outcome.Should().Be(Common.MetrikOutcome.Ok); actual.Artifact.EntryDate.ToUnixTimeSeconds().Should().Be(expected.EntryDate.ToUnixTimeSeconds()); actual.Artifact.Id.Should().NotBeEmpty(); actual.Artifact.Unit.Should().Be(expected.Unit); actual.Artifact.Weight.Should().Be(expected.Weight); actual.Artifact.Weight.Should().NotBe(created.Artifact.Weight); }
public UpdateResult <WeightMeasurement> Update(WeightMeasurement measurement, List <string> updateMask) { if (measurement == null || measurement.Id == Guid.Empty) { return(UpdateResult <WeightMeasurement> .BadRequest("Weight measurement failed to be created before storage.")); } if (updateMask.Contains("unit", StringComparer.InvariantCultureIgnoreCase) && measurement.Unit == WeightMeasurement.Units.None) { return(UpdateResult <WeightMeasurement> .BadRequest("Invalid weight unit provided. Valid values are: " + Enum <WeightMeasurement.Units> .GetValuesAsCSV())); } if (updateMask.Contains("weight", StringComparer.InvariantCultureIgnoreCase) && measurement.Weight < 0) { return(UpdateResult <WeightMeasurement> .BadRequest("Weight must be a non-negative value.")); } try { if (_store.Update(measurement, updateMask)) { var artifact = _store.Read(measurement.Id); return(UpdateResult <WeightMeasurement> .Ok(artifact)); } else { return(UpdateResult <WeightMeasurement> .Conflict("Unable to update the measurement. Please try again.")); } } catch (Exception ex) { return(UpdateResult <WeightMeasurement> .HandleException(ex)); } }
public WeightMeasurement Read(Guid id) { WeightMeasurement result = null; var connString = DbContext.GetConnectionString(); using (var con = new SqliteConnection(connString)) { StringBuilder sb = new StringBuilder(); sb.AppendLine("SELECT id, entry_date, weight, unit"); sb.AppendLine("FROM WeightMeasurements "); sb.AppendLine("WHERE id=@id "); con.Open(); using (var cmd = new SqliteCommand(sb.ToString(), con)) { cmd.Parameters.Add(new SqliteParameter("@id", id.ToString())); using (var dr = cmd.ExecuteReader(System.Data.CommandBehavior.SingleRow)) { while (dr.Read()) { result = new WeightMeasurement(); result.Id = Guid.Parse((string)dr["id"]); result.EntryDate = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds((long)dr["entry_date"]); result.Weight = (double)dr["weight"]; result.Unit = Enum.Parse <WeightMeasurement.Units>((string)dr["unit"]); } } } } return(result); }
public async Task <IHttpActionResult> PutWeightMeasurement(int id, WeightMeasurement weightMeasurement) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != weightMeasurement.Id) { return(BadRequest()); } db.Entry(weightMeasurement).State = EntityState.Modified; try { await db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!WeightMeasurementExists(id)) { return(NotFound()); } else { throw; } } return(StatusCode(HttpStatusCode.NoContent)); }
public void Update_existing_weight_with_all_values_should_succeed() { // Arrange Guid originalId = Guid.NewGuid(); WeightMeasurement expected = GenerateRandomWeightMeasurement(originalId); Weight bizLogic = new Weight(); var original = bizLogic.Create(expected); Assert.AreEqual(Common.MetrikOutcome.Created, original.Outcome, original.Message); // Act var artifactToUpdate = original.Artifact.Clone(); if (artifactToUpdate.Weight < 150) { artifactToUpdate.Weight += 10.0; } else { artifactToUpdate.Weight -= 10.0; } var actual = bizLogic.Update(original.Artifact, new List <string>() { "weight" }); // Assert actual.Outcome.Should().Be(Common.MetrikOutcome.Ok); actual.Artifact.EntryDate.ToUnixTimeSeconds().Should().Be(expected.EntryDate.ToUnixTimeSeconds()); actual.Artifact.Id.Should().NotBeEmpty(); actual.Artifact.Unit.Should().Be(expected.Unit); actual.Artifact.Weight.Should().Be(expected.Weight); }
public bool Create(WeightMeasurement measurement) { bool result; var connString = DbContext.GetConnectionString(); using (var con = new SqliteConnection(connString)) { StringBuilder sb = new StringBuilder(); sb.AppendLine("INSERT INTO WeightMeasurements "); sb.AppendLine("(id, entry_date, weight, unit) "); sb.AppendLine("SELECT @id, @entry_date, @weight, @unit"); sb.AppendLine("WHERE NOT EXISTS (SELECT id FROM WeightMeasurements WHERE id=@id) "); con.Open(); using (var cmd = new SqliteCommand(sb.ToString(), con)) { cmd.Parameters.Add(new SqliteParameter("@id", measurement.Id.ToString())); cmd.Parameters.Add(new SqliteParameter("@entry_date", measurement.EntryDate.ToUnixTimeSeconds())); cmd.Parameters.Add(new SqliteParameter("@weight", measurement.Weight)); cmd.Parameters.Add(new SqliteParameter("@unit", measurement.Unit.ToString())); int resultCount = cmd.ExecuteNonQuery(); result = resultCount > 0; } } return(result); }
// 初始化 public void Initial() { // 方式1 var person = new Person(); // 方式二 Person p = new(); string firstName = "marson"; string lastName = "shine"; var ps = new Person { FirstName = firstName, LastName = lastName }; var ps2 = new Person { FirstName = firstName, LastName = lastName }; // record 类型,常用语只读场景,表示不可变类型 ImmutablePerson ip = new(firstName, lastName); ImmutablePerson ip2 = new(firstName, lastName); Console.WriteLine($"FullName = {ip.FirstName} {ip.LastName}"); Console.WriteLine($"record 类型比较 ip == ip2 : {ip == ip2}"); Console.WriteLine($"record 类型比较 ip.HashCode() = {ip.GetHashCode()}; ip2.HashCode() = {ip2.GetHashCode()}; 相等性 : {ip.GetHashCode() == ip2.GetHashCode()}"); ImmutablePerson ip3 = ip2; ip3.FirstName = "summer"; Console.WriteLine($"ip2.FirstName = {ip2.FirstName} ip3.FirstName = {ip3.FirstName}"); Console.WriteLine($"record 类型比较 ip.HashCode() = {ip.GetHashCode()}; ip2.HashCode() = {ip2.GetHashCode()}; 相等性 : {ip.GetHashCode() == ip2.GetHashCode()}"); // class 类型比较 Person p1 = new() { FirstName = "marsonshine", LastName = "shine" }; Person p2 = new() { FirstName = "marsonshine", LastName = "shine" }; Console.WriteLine($"class 类型比较 p1 == p2 : {p1 == p2}"); Console.WriteLine($"class 类型比较 ps.HashCode() = {ps.GetHashCode()}; ps2.HashCode() = {ps2.GetHashCode()}; 相等性 : {ps.GetHashCode() == ps2.GetHashCode()}"); // record 上的 with 关键字 // 可以指定属性必须和选填,在构造函数参数体现是必填 // 选填是跟以前属性写法一样 // 如果你想在原来的类型下对增加一些属性值,或者更改某些属性值,但是又不想破坏 record 带来的数据不变性,这个时候我们就可以使用 with 关键字,它会从已有的 record 类型按值复制出来一个新的 record 类型 LoginResource login = new("MarsonShine", "123$%^") { RememberMe = true }; LoginResource loginLowercased = login with { UserName = login.UserName.ToLowerInvariant() }; Console.WriteLine(login); Console.WriteLine(loginLowercased); var weight = 200; WeightMeasurement measurement = new(DateTime.Now, weight) { Pounds = WeightMeasurement.GetPounds(weight) }; } } public class Person {
public async Task <IHttpActionResult> GetWeightMeasurement(int id) { WeightMeasurement weightMeasurement = await db.WeightMeasurements.FindAsync(id); if (weightMeasurement == null) { return(NotFound()); } return(Ok(weightMeasurement)); }
public static WeightGet MapFrom(WeightMeasurement weight) { WeightGet result = new WeightGet(); result.EntryDate = weight.EntryDate; result.Id = weight.Id; result.Unit = weight.Unit.ToString(); result.Weight = weight.Weight; return(result); }
/// <summary> /// Tries to Map the the passed in REST Request to a Domain Object /// </summary> /// <returns></returns> public WeightMeasurement MapTo() { Enum.TryParse(this.Unit, true, out WeightMeasurement.Units weightUnit); WeightMeasurement measurement = new WeightMeasurement(); measurement.EntryDate = this.EntryDate; measurement.Weight = this.Weight; measurement.Unit = weightUnit; return(measurement); }
private static WeightMeasurement GenerateRandomWeightMeasurement(Guid id) { Random r = new Random(Guid.NewGuid().GetHashCode()); WeightMeasurement expected = new WeightMeasurement(); expected.EntryDate = DateTime.UtcNow.AddDays(r.Next(1, 100) * -1); expected.Id = id; expected.Unit = WeightMeasurement.Units.Pounds; expected.Weight = (double)(r.Next(60, 300) + (r.Next(0, 9) / 10.0d)); return(expected); }
public bool Update(WeightMeasurement measurement, List <string> updateMask) { bool result; var connString = DbContext.GetConnectionString(); using (var con = new SqliteConnection(connString)) { StringBuilder sb = new StringBuilder(); List <SqliteParameter> parameters = new List <SqliteParameter>(); sb.AppendLine("UPDATE WeightMeasurements SET "); List <string> setCommands = new List <string>(); // Use a List so we can join using commas later if (updateMask.Contains("entry_date", StringComparer.InvariantCultureIgnoreCase)) { setCommands.Add("entry_date=@entry_date"); parameters.Add(new SqliteParameter("@entry_date", measurement.EntryDate.ToUnixTimeSeconds())); } if (updateMask.Contains("weight", StringComparer.InvariantCultureIgnoreCase)) { setCommands.Add("weight=@weight"); parameters.Add(new SqliteParameter("@weight", measurement.Weight)); } if (updateMask.Contains("unit", StringComparer.InvariantCultureIgnoreCase)) { setCommands.Add("unit=@unit"); parameters.Add(new SqliteParameter("@unit", measurement.Unit.ToString())); } sb.AppendLine(string.Join(",", setCommands)); sb.AppendLine("WHERE id=@id "); con.Open(); using (var cmd = new SqliteCommand(sb.ToString(), con)) { cmd.Parameters.Add(new SqliteParameter("@id", measurement.Id.ToString())); foreach (var parameter in parameters) { cmd.Parameters.Add(parameter); } var resultCount = cmd.ExecuteNonQuery(); result = resultCount > 0; } } return(result); }
public async Task <IHttpActionResult> PostWeightMeasurement(WeightMeasurement weightMeasurement) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } db.WeightMeasurements.Add(weightMeasurement); await db.SaveChangesAsync(); return(CreatedAtRoute("DefaultApi", new { id = weightMeasurement.Id }, weightMeasurement)); }
protected void buttonPermissionApprove_ServerClick(object sender, EventArgs e) { try { string nric = ViewState["GridViewPatientSelectedNRIC"].ToString(); short permission = 0; if (CheckBoxTypeHeightMeasurement.Checked) { permission += new HeightMeasurement().permissionFlag; } if (CheckBoxTypeWeightMeasurement.Checked) { permission += new WeightMeasurement().permissionFlag; } if (CheckBoxTypeTemperatureReading.Checked) { permission += new TemperatureReading().permissionFlag; } if (CheckBoxTypeBloodPressureReading.Checked) { permission += new BloodPressureReading().permissionFlag; } if (CheckBoxTypeECGReading.Checked) { permission += new ECGReading().permissionFlag; } if (CheckBoxTypeMRI.Checked) { permission += new MRI().permissionFlag; } if (CheckBoxTypeXRay.Checked) { permission += new XRay().permissionFlag; } if (CheckBoxTypeGait.Checked) { permission += new Gait().permissionFlag; } patientBLL.ApproveRequest(nric, permission); Bind_GridViewTherapist(); Update_UpdatePanelPermissions(nric); ScriptManager.RegisterStartupScript(this, GetType(), "alert", "toastr['success']('Request Approved, Permissions of " + nric + " has been Updated.');", true); } catch { ScriptManager.RegisterStartupScript(this, GetType(), "alert", "toastr['error']('Error occured when Updating Permissions.');", true); } }
public async Task <IHttpActionResult> DeleteWeightMeasurement(int id) { WeightMeasurement weightMeasurement = await db.WeightMeasurements.FindAsync(id); if (weightMeasurement == null) { return(NotFound()); } db.WeightMeasurements.Remove(weightMeasurement); await db.SaveChangesAsync(); return(Ok(weightMeasurement)); }
protected void buttonRequest_ServerClick(object sender, EventArgs e) { try { string nric = ViewState["GridViewPatientSelectedNRIC"].ToString(); short permission = 0; if (CheckBoxTypeHeightMeasurement.Checked) { permission += new HeightMeasurement().permissionFlag; } if (CheckBoxTypeWeightMeasurement.Checked) { permission += new WeightMeasurement().permissionFlag; } if (CheckBoxTypeTemperatureReading.Checked) { permission += new TemperatureReading().permissionFlag; } if (CheckBoxTypeBloodPressureReading.Checked) { permission += new BloodPressureReading().permissionFlag; } if (CheckBoxTypeECGReading.Checked) { permission += new ECGReading().permissionFlag; } if (CheckBoxTypeMRI.Checked) { permission += new MRI().permissionFlag; } if (CheckBoxTypeXRay.Checked) { permission += new XRay().permissionFlag; } if (CheckBoxTypeGait.Checked) { permission += new Gait().permissionFlag; } therapistBLL.SubmitRequest(nric, permission); ScriptManager.RegisterStartupScript(this, GetType(), "alert", "$('#modalSelectPermissions').modal('hide');toastr['success']('Request Submitted to " + nric + " for Permissions.');", true); Bind_GridViewPatient(); } catch { ScriptManager.RegisterStartupScript(this, GetType(), "alert", "$('#modalSelectPermissions').modal('hide');toastr['error']('Error occured when Submitting Request.');", true); } }
public Weight(StructuredDateTime when, WeightMeasurement weight) : this() { if (when == null) { throw new ArgumentNullException("when"); } if (weight == null) { throw new ArgumentNullException("weight"); } When = when; Value = weight; }
public WeightMeasurement MapTo() { var result = new WeightMeasurement(); result.EntryDate = this.EntryDate; result.Id = this.Id; result.Unit = WeightMeasurement.Units.None; if (Enum.TryParse <WeightMeasurement.Units>(this.Unit, true, out var parsedUnit)) { result.Unit = parsedUnit; } result.Weight = this.Weight; return(result); }
/// <summary> /// Tries to Map the the passed in REST Request to a Domain Object /// </summary> /// <returns></returns> public WeightMeasurement MapTo() { if (Enum.TryParse(this.Unit, true, out WeightMeasurement.Units weightUnit)) { if (weightUnit != WeightMeasurement.Units.None) { WeightMeasurement measurement = new WeightMeasurement(); measurement.EntryDate = this.EntryDate; measurement.Weight = this.Weight; measurement.Unit = weightUnit; return(measurement); } } return(null); }
public CreateResult <WeightMeasurement> Create(WeightMeasurement measurement) { if (measurement is null) { return(CreateResult <WeightMeasurement> .BadRequest("Weight measurement failed to be created before storage.")); } if (measurement.Unit == WeightMeasurement.Units.None) { return(CreateResult <WeightMeasurement> .BadRequest("Invalid weight unit provided. Valid values are: " + Enum <WeightMeasurement.Units> .GetValuesAsCSV())); } if (measurement.Weight < 0) { return(CreateResult <WeightMeasurement> .BadRequest("Weight must be a non-negative value.")); } try { if (measurement.Id == Guid.Empty) { measurement.Id = Guid.NewGuid(); } else { var existing = _store.Read(measurement.Id); if (existing != null && existing.Id.Equals(measurement.Id)) { return(CreateResult <WeightMeasurement> .Conflict("ID already exists")); } } if (_store.Create(measurement)) { return(CreateResult <WeightMeasurement> .Created(measurement)); } else { return(CreateResult <WeightMeasurement> .InternalError("Failed to persist the measurement to a data store.")); } } catch (Exception ex) { return(CreateResult <WeightMeasurement> .HandleException(ex)); } }
public void Create_weight_should_populate_an_empty_ID() { // Arrange WeightMeasurement expected = GenerateRandomWeightMeasurement(); expected.Id = Guid.Empty; // Act Weight bizLogic = new Weight(); var actual = bizLogic.Create(expected); // Assert actual.Outcome.Should().Be(Common.MetrikOutcome.Created, actual.Message); actual.Artifact.EntryDate.Should().Be(expected.EntryDate); actual.Artifact.Id.Should().NotBeEmpty(); actual.Artifact.Unit.Should().Be(expected.Unit); actual.Artifact.Weight.Should().Be(expected.Weight); }
public void Get_weight_by_valid_ID() { // Arrange var client = ClientHelper.GetSdkClient(); DateTime expectedEntryDate = TestHelper.GetRandomPastDate(1, 365); double expectedWeight = TestHelper.GetRandomDouble(1, 300); WeightMeasurement.Units expectedUnit = WeightMeasurement.Units.Pounds; var artifact = client.Weight.Create(expectedEntryDate, expectedWeight, expectedUnit); var expectedId = artifact.Id; // Act WeightMeasurement actual = client.Weight.Get(expectedId); // Assert actual.Id.Should().NotBeEmpty(); }
public void Create_weight_should_retain_the_original_ID() { // Arrange var expectedId = Guid.NewGuid(); WeightMeasurement expected = GenerateRandomWeightMeasurement(); expected.Id = expectedId; // Act var bizLogic = new Weight(); var actual = bizLogic.Create(expected); // Assert actual.Outcome.Should().Be(Common.MetrikOutcome.Created, actual.Message); actual.Artifact.EntryDate.Should().Be(expected.EntryDate); actual.Artifact.Id.Should().Be(expectedId); actual.Artifact.Unit.Should().Be(expected.Unit); actual.Artifact.Weight.Should().Be(expected.Weight); }
public async Task <JsonResult> CreateWeight(MeasurementViewModel viewModel) { var user = await userManager.FindByIdAsync(User.Identity.GetUserId()); if (user == null) { return(Json(HttpStatusCode.Unauthorized.ToString())); } if (ModelState.IsValid) { var measurement = new WeightMeasurement { MeasurementDate = viewModel.MeasurementDate, Value = Convert.ToDouble(viewModel.Value) }; var oldMeasurement = weightMeasurementService.Find(m => m.ApplicationUser.Id == user.Id && m.MeasurementDate == measurement.MeasurementDate).ToList(); if (oldMeasurement.Count == 0) { measurement.ApplicationUser = user; weightMeasurementService.Create(measurement); return(Json("Created successfully")); } else { oldMeasurement.First().Value = measurement.Value; weightMeasurementService.Update(oldMeasurement.First()); return(Json("Updated successfully")); } } string errors = ""; foreach (var modelState in ModelState.Values) { foreach (var error in modelState.Errors) { errors += error.ErrorMessage + ". "; } } // error return(Json(errors)); }
// TODO: Clarify what "fail" means public void Create_weight_should_fail_when_a_duplicate_ID_is_passed_in() { // Arrange var originalId = Guid.NewGuid(); WeightMeasurement original = GenerateRandomWeightMeasurement(); original.Id = originalId; WeightMeasurement expected = GenerateRandomWeightMeasurement(); expected.Id = originalId; // Act var bizLogic = new Weight(); _ = bizLogic.Create(original); var actual = bizLogic.Create(expected); // Assert actual.Outcome.Should().Be(Common.MetrikOutcome.Conflict); }
public bool Delete(WeightMeasurement measurement) { bool result = false; var connString = DbContext.GetConnectionString(); using (var con = new SqliteConnection(connString)) { StringBuilder sb = new StringBuilder(); sb.AppendLine("DELETE FROM WeightMeasurements "); sb.AppendLine("WHERE id=@id "); con.Open(); using (var cmd = new SqliteCommand(sb.ToString(), con)) { cmd.Parameters.Add(new SqliteParameter("@id", measurement.Id.ToString())); int resultCount = cmd.ExecuteNonQuery(); result = resultCount > 0; } } return(result); }