public DateTime CreateLog(CarLogBinding binding) { using (var context = GetMainContext()) { if (string.IsNullOrWhiteSpace(binding.CarValueId)) { binding.CarValueId = context.Users.Include(x => x.DefaultCar).SingleOrDefault(x => x.Id == UserId).DefaultCar.ValueId; } var lastEntry = GetLatestLog(binding.CarValueId, new CarLogGetBinding() { HasOdometer = true }); if (lastEntry != null && binding.Odometer < lastEntry.Odometer) { throw new InvalidRequestException($"Odometer must be {lastEntry.Odometer}km or higher."); } var entity = binding.ToEntity(context); context.CarLogs.Add(entity); context.SaveChanges(); return(entity.Timestamp); } }
public async Task <GoogleCloudDialogflowV2WebhookResponse> SetLatestOdometer(GoogleCloudDialogflowV2WebhookRequest request) { var odometer = (JObject)request.QueryResult.Parameters.FirstOrDefault().Value; var carLog = new CarLogBinding() { Odometer = (int)odometer["amount"] }; _carHandler.CreateLog(carLog); return(new GoogleCloudDialogflowV2WebhookResponse()); }
public static CarLog ToEntity(this CarLogBinding b, MainContext context, CarLog entity = null) { if (entity == null) { entity = new CarLog(); } entity.CarId = context.Cars.GetId(b.CarValueId).Value; entity.Odometer = b.Odometer; entity.Timestamp = DateTime.Now; return(entity); }
public DateTime PostLog([FromBody] CarLogBinding binding, string id) { binding.CarValueId = id; return(_carHandler.CreateLog(binding)); }