public async Task <IActionResult> PostAsync([FromBody] CollisionDTO value) { var now = DateTime.Now; try { var collision = await FillCollision(value); collision.LastSeen = now; var existing = await CollisionRepository.Find(value.Date, collision.Location); if (existing != null) { collision.Key = existing.Key; collision.FirstSeen = existing.FirstSeen == DateTime.MinValue ? now : existing.FirstSeen; await CollisionRepository.Update(collision); } else { collision.FirstSeen = now; await CollisionRepository.Add(collision); } return(Ok(Mapper.Map <CollisionDTO>(collision))); } catch (Exception e) { Logger.LogError("Error adding collision:\n{message}", e.Message); return(BadRequest(e.ToString())); } }
public async void ShouldUpdateCollision() { //Given var now = DateTime.Now; var calendar = await CalendarRepository.Add(Calendars[0].Date); var company = await CompanyRepository.Add(Companies[0], true); var trip = await TripRepository.Add(Trips[0]); var vehicle = await VehicleRepository.Add(Vehicles[0], true); var status = await StatusRepository.Add(new Status { Name = "Open" }, true); var location = new Point(new Coordinate(-122.3456, 45.67890)); var dbCollision = new Collision { Key = 1, DateKey = calendar.Key, Time = now.TimeOfDay, CompanyKey = company.Key, Location = location, VehicleTypeKey = 4 }; await CollisionRepository.Add(dbCollision); //When var collisionDTO = new CollisionDTO { Date = Calendars[0].Date + now.TimeOfDay, Location = location.ToGeoJson <GeoJSON.Net.Geometry.Point>(), CompanyName = Companies[0].Name, VehicleName = Vehicles[0].Name, TripAlternateKey = Trips[0].AlternateKey, VehicleTypeKey = 4, OtherVehicleTypeKey = 1, ClaimStatusKey = Convert.ToByte(status.Key) }; var result = await Controller.PostAsync(collisionDTO); dbCollision = await CollisionRepository.Find(1); //Then var viewResult = Assert.IsType <OkObjectResult>(result); var model = Assert.IsType <CollisionDTO>(viewResult.Value); Assert.NotNull(model); Assert.Equal(collisionDTO.Date.TimeOfDay, dbCollision.Time); }
private async Task <Collision> FillCollision(CollisionDTO value) { var collision = Mapper.Map <Collision>(value); var calendarTask = CalendarRepository.Find(value.Date); var companyTask = CompanyRepository.Find(value.CompanyName); var tripTask = TripRepository.Find(value.TripAlternateKey); var vehicle = await VehicleRepository.Find(value.VehicleName) ?? await VehicleRepository.Add(new Vehicle { Name = value.VehicleName }); collision.DateKey = (await calendarTask).Key; collision.CompanyKey = (await companyTask).Key; collision.VehicleKey = vehicle?.Key; return(collision); }
public void ShouldMapCollision() { //Given var now = DateTime.Now; var point = new GeoJSON.Net.Geometry.Point(new GeoJSON.Net.Geometry.Position(-45.12638971, 122.54672893563)); var Collision = new CollisionDTO { Date = now, Location = point }; //When var dbCollision = Mapper.Map <Collision>(Collision); //Then Assert.NotNull(dbCollision); Assert.Equal(now.TimeOfDay, dbCollision.Time); }