Esempio n. 1
0
        public IHttpActionResult GetSensorConnections(int networkId, int sensorId, int page = 1, int pageSize = 30)
        {
            _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));
            }

            var sensor = _sensorRep.Get(sensorId);

            if (sensor == null)
            {
                var errorMessage = _messages.GetMessage(Custom.NotFound, "Sensor", "Id");
                return(NotFound(errorMessage));
            }

            if (page < 1)
            {
                page = 1;
            }
            if (pageSize < 1)
            {
                pageSize = 30;
            }

            var connections = _connectionRep.GetAll()
                              .Where(c => c.Sensor_Id == sensorId);

            var totalCount = connections.Count();
            var pageCount  = (int)Math.Ceiling((float)totalCount / pageSize);

            var results = _gatewayRep.GetAll()
                          .Join(connections, g => g.Id, c => c.Gateway_Id, (g, c) => g)
                          .Skip(pageSize * (page - 1))
                          .Take(pageSize)
                          .Select(p => _mapper.Map <GatewayModelGet>(p))
                          .ToList();


            return(Ok("GetGatewayConnections", page, pageSize, pageCount, totalCount, results));
        }
Esempio n. 2
0
        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));
            }
        }