public IHttpActionResult Update(int networkId, int id, SensorModelPut sensorModel) { _credentials.SetCredentials(Request.Headers.Authorization.Parameter); var userId = _userRep.Get(_credentials.Email, _credentials.Password).Id; if (!_networkRep.GetAll().Any(n => n.Id == networkId && n.User_Id == userId)) { var errorMessage = _messages.GetMessage(Custom.NotFound, "Network", "Id"); return(NotFound(errorMessage)); } if (sensorModel == null) { var errorMessage = _messages.GetMessage(Generic.NullObject); return(BadRequest(errorMessage)); } if (_sensorRep.GetAll().Any( p => p.Name == sensorModel.Name && p.Id != id)) { var errorMessage = _messages.GetMessage(Custom.Conflict, "Sensor", "Name"); return(Conflict(errorMessage)); } var sensor = _sensorRep.Get(id); if (sensor == null) { var errorMessage = _messages.GetMessage(Custom.NotFound, "Sensor"); return(NotFound(errorMessage)); } //Pending if (sensorModel.UploadInterval < sensor.UploadInterval && sensor.Active == true) { var lastInsertDate = sensor.LastInsertDate.Value; var waitTime = (uint) ( lastInsertDate.AddMinutes(sensor.UploadInterval) - _dateTime.GetDateTime() ).TotalMinutes; if (waitTime == 0) { waitTime = 1; } var s = waitTime > 1 ? "s" : ""; var pendingModel = _mapper.Map <Sensor, SensorPendingModel>(sensor, opt => opt.AfterMap((dest, src) => src.UploadInterval = sensorModel.UploadInterval)); TheSensorIntervalPending.AddToPending(pendingModel); _mapper.Map(sensorModel, sensor, opts => opts.BeforeMap((src, dest) => { src.UploadInterval = dest.UploadInterval; })); _sensorRep.Update(sensor); return(Ok($"It will take {waitTime} minute{s} to change the upload interval")); } _mapper.Map(sensorModel, sensor); _sensorRep.Update(sensor); return(StatusCode(HttpStatusCode.NoContent)); }
public IHttpActionResult PartialUpdate(int networkId, int id, JsonPatchDocument <SensorModelPut> patchDoc) { _credentials.SetCredentials(Request.Headers.Authorization.Parameter); var userId = _userRep.Get(_credentials.Email, _credentials.Password).Id; if (!_networkRep.GetAll().Any(n => n.Id == networkId && n.User_Id == userId)) { var errorMessage = _messages.GetMessage(Custom.NotFound, "Network", "Id"); return(NotFound(errorMessage)); } if (patchDoc == null) { var errorMessage = _messages.GetMessage(Generic.NullObject); return(BadRequest(errorMessage)); } var sensor = _sensorRep.Get(id); if (sensor == null) { var errorMessage = _messages.GetMessage(Custom.NotFound, "Sensor"); return(NotFound(errorMessage)); } var sensorModel = _mapper.Map <SensorModelPut>(sensor); try { patchDoc.ApplyTo(sensorModel); } catch (JsonPatchException ex) { return(BadRequest(ex.Message)); } catch (ArgumentNullException ex) { return(BadRequest(ex.Message)); } catch (Exception ex) { return(BadRequest(ex.Message)); } Validate(sensorModel); if (!ModelState.IsValid) { var error = ModelState.SelectMany(m => m.Value.Errors) .Where(m => m.ErrorMessage != "") .FirstOrDefault(); var errorMessage = error != null ? error.ErrorMessage : _messages.GetMessage(Generic.InvalidRequest); return(BadRequest(errorMessage)); } if (_sensorRep.GetAll().Any( p => p.Name == sensorModel.Name && p.Id != id)) { var errorMessage = _messages.GetMessage(Custom.Conflict, "Sensor", "Name"); return(Conflict(errorMessage)); } if (sensorModel.UploadInterval < sensor.UploadInterval && sensor.Active == true) { var lastInsertDate = sensor.LastInsertDate.Value; var waitTime = (uint) ( lastInsertDate.AddMinutes(sensor.UploadInterval) - _dateTime.GetDateTime() ).TotalMinutes; if (waitTime == 0) { waitTime = 1; } var s = waitTime > 1 ? "s" : ""; var pendingModel = _mapper.Map <Sensor, SensorPendingModel>(sensor, opt => opt.AfterMap((dest, src) => src.UploadInterval = sensorModel.UploadInterval)); TheSensorIntervalPending.AddToPending(pendingModel); _mapper.Map(sensorModel, sensor, opts => opts.BeforeMap((src, dest) => { src.UploadInterval = dest.UploadInterval; })); _sensorRep.Update(sensor); return(Ok($"It will take {waitTime} minute{s} to change the upload interval")); } _mapper.Map(sensorModel, sensor); _sensorRep.Update(sensor); return(StatusCode(HttpStatusCode.NoContent)); }
public IHttpActionResult Add(SensorReadingModelPost sensorReadingModel) { if (sensorReadingModel == null) { var errorMessage = _messages.GetMessage(Generic.NullObject); return(BadRequest(errorMessage)); } _throttler.ThrottlerSetup(sensorReadingModel.SensorAddress, 1, 3); if (_throttler.RequestShouldBeThrottled()) { return(TooManyRequests(_throttler)); } var sensor = _sensorRep.GetAll() .Where(s => s.Address == sensorReadingModel.SensorAddress) .SingleOrDefault(); if (sensor != null) { var gateway = _gatewayRep.GetAll() .SingleOrDefault(g => g.Address == sensorReadingModel.GatewayAddress); if (gateway == null) { var errorMessage = _messages.GetMessage(Custom.NotFound, "Gateway", "Address"); return(NotFound(errorMessage)); } var sensorReading = _mapper.Map <SensorReading>(sensorReadingModel); sensorReading.Sensor_Id = sensor.Id; sensorReading.InsertDate = _dateTime.GetDateOffSet(); _readingRep.Add(sensorReading); var pending = TheSensorIntervalPending .GetPendingMember(sensor.Id); //Check if the pending exists if (pending != null) { _mapper.Map(pending, sensor); TheSensorIntervalPending.ClearPending(pending); } sensor.Active = true; sensor.LastReadingDate = sensorReading.ReadingDate; sensor.LastInsertDate = sensorReading.InsertDate; _sensorRep.Update(sensor); var address = sensorReadingModel.SensorAddress; Hub.Clients.Group(address).refreshReadings(); //add the gateway connections if (!_connectionRep.GetAll() .Any( c => c.Gateway_Id == gateway.Id && c.Sensor_Id == sensor.Id) ) { var connection = _connectionService.Create(gateway.Id, sensor.Id); _connectionRep.Add(connection); } gateway.LastSensorDate = sensorReading.ReadingDate; _gatewayRep.Update(gateway); var createdReading = _mapper.Map <SensorReadingModelGet>(sensorReading); return(Created($"api/networks/{sensor.Network_Id}/sensors/{sensor.Id}/readings", createdReading)); } else { var errorMessage = _messages.GetMessage(Custom.NotFound, "Sensor", "Address"); return(NotFound(errorMessage)); } }