public async Task <IActionResult> Execute([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log) { try { var request = await req.ReadSlackRequest(); if (string.IsNullOrWhiteSpace(request.Text)) { return(SlackResponse.NoLocationProvided().AsJson()); } var location = new LocationFromRequest(request.Text); var totalAvailableSeats = _locations.TotalCapacityOf(location); var filledSeats = _capacityService.NumberOfDesksOccupiedForLocation(location); var result = $"There are {filledSeats} of {totalAvailableSeats} desks used in {request.Text}."; var imageUrl = _urlHelper.CapacityImageFor(location); return(new SlackResponse(result, imageUrl).AsJson()); } catch (Exception ex) { log.LogError(ex.ToString()); throw; } }
public async Task <IActionResult> Execute([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log) { try { var rawLocation = req.Query.ContainsKey("location") ? req.Query["location"].FirstOrDefault() : null; var location = new LocationFromRequest(rawLocation); if (!location.IsValid()) { return(new BadRequestResult()); } _capacityService.CheckIn(location); return(new JsonResult(new { message = "Thanks for checking in!" }) { StatusCode = 200 }); } catch (Exception ex) { log.LogError(ex.ToString()); throw; } }
public int NumberOfDesksOccupiedForLocation(LocationFromRequest location) { var state = _repo.Load(); var keysInThisRegion = state.Keys.Where(x => x.ToLower().StartsWith(location.Value)); return(keysInThisRegion.Sum(key => state[key])); }
public void CheckIn(LocationFromRequest compoundKey) { var state = _repo.Load(); if (!state.ContainsKey(compoundKey)) { state.Add(compoundKey, 0); } state[compoundKey]++; _repo.Save(state); }