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); }