public static async Task <IActionResult> AddDevice(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "AddDevice/{email}/{device_name}/{address}/{version}/{longitude}/{latitude}")] HttpRequestMessage request,
            [Table("DetectorsEntities")] CloudTable table,
            [SignalR(HubName = "CounterHub")] IAsyncCollector <SignalRMessage> signalRMessages,
            string email, string device_name, string address, string version, string longitude, string latitude,
            ILogger log)
        {
            log.LogInformation("Adding device.\n");

            /////////////// Checking that device_name is unique ////////
            string emailFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, email);
            var    emailQuery  = new TableQuery <SmokingDetector>().Where(emailFilter);

            TableContinuationToken continuationToken = null;

            do
            {
                var newEntity = await table.ExecuteQuerySegmentedAsync(emailQuery, continuationToken);

                continuationToken = newEntity.ContinuationToken;
                foreach (SmokingDetector device in newEntity.Results)
                {
                    if (device.device_name == device_name)
                    {
                        return(new BadRequestObjectResult("Device name already taken, sorry..."));
                    }
                }
            }while (continuationToken != null);

            /////////////// Finding device_id /////////////
            long max_id = 0;

            var query = new TableQuery <DynamicTableEntity>()
            {
                SelectColumns = new List <string>()
                {
                    "RowKey"
                }
            };

            var queryOutput = table.ExecuteQuerySegmentedAsync <DynamicTableEntity>(query, null);
            var results     = queryOutput.Result;

            foreach (var entity in results)
            {
                if (max_id <= long.Parse(entity.RowKey))
                {
                    max_id = long.Parse(entity.RowKey);
                }
            }

            /////////////////// Inserting the new device to the table //////////////////
            SmokingDetector new_device = new SmokingDetector(email, (max_id + 1).ToString(), device_name,
                                                             address, version, longitude, latitude);

            TableOperation insert = TableOperation.Insert(new_device);
            await table.ExecuteAsync(insert);

            return((ActionResult) new OkObjectResult($"Added device: {device_name}"));
        }
        public static async Task <SmokingDetector> GetDevice(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "GetDevice/{email}/{id}")] HttpRequestMessage request,
            [Table("DetectorsEntities")] CloudTable ClientsTable,
            string email, string id,
            ILogger log)
        {
            log.LogInformation("GetDevice!\n");

            string emailFilter    = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, email);
            string idFilter       = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, id);
            var    combinedFilter = TableQuery.CombineFilters(emailFilter, TableOperators.And, idFilter);

            var Query = new TableQuery <SmokingDetector>().Where(combinedFilter);
            TableQuerySegment <SmokingDetector> queryResult = await ClientsTable.ExecuteQuerySegmentedAsync(Query, null);

            SmokingDetector detector = queryResult.FirstOrDefault();

            if (detector == null)
            {
                return(null);
            }
            return(detector);
        }