public async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log) { log.LogInformation("GET - Get Stops requested"); try { if (!RIPAAuthorization.ValidateUserOrAdministratorRole(req, log).ConfigureAwait(false).GetAwaiter().GetResult()) { return(new UnauthorizedResult()); } } catch (Exception ex) { log.LogError(ex.Message); return(new UnauthorizedResult()); } string stopQueryString = String.Empty; string stopSummaryQueryString = String.Empty; try { StopQueryUtility stopQueryUtility = new StopQueryUtility(); StopQuery stopQuery = stopQueryUtility.GetStopQuery(req); stopQueryString = stopQueryUtility.GetStopsQueryString(stopQuery, true); stopSummaryQueryString = stopQueryUtility.GetStopsSummaryQueryString(stopQuery); } catch (Exception ex) { log.LogError("An error occured while evaluating the stop query.", ex); return(new BadRequestObjectResult("An error occured while evaluating the stop query. Please try again.")); } IEnumerable <Common.Models.Stop> stopResponse; IEnumerable <StopStatusCount> stopStatusCounts; try { stopResponse = await _stopCosmosDbService.GetStopsAsync(stopQueryString); stopStatusCounts = await _stopCosmosDbService.GetStopStatusCounts(stopSummaryQueryString); } catch (Exception ex) { log.LogError(ex, "An error occurred getting stops requested."); return(new BadRequestObjectResult("An error occurred getting stops requested. Please try again.")); } var response = new { stops = stopResponse, summary = new SummaryResponse() { Total = stopStatusCounts.Sum(x => x.Count), Submitted = stopStatusCounts.Where(x => x.Status == "Submitted").Select(x => x.Count).FirstOrDefault(), Resubmitted = stopStatusCounts.Where(x => x.Status == "Resubmitted").Select(x => x.Count).FirstOrDefault(), Unsubmitted = stopStatusCounts.Where(x => x.Status == "Unsubmitted").Select(x => x.Count).FirstOrDefault(), Pending = stopStatusCounts.Where(x => x.Status == "Pending").Select(x => x.Count).FirstOrDefault(), Failed = stopStatusCounts.Where(x => x.Status == "Failed").Select(x => x.Count).FirstOrDefault(), } }; return(new OkObjectResult(response)); }
public async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log) { log.LogInformation("Submit to DOJ requested - submit search"); try { if (!RIPAAuthorization.ValidateUserOrAdministratorRole(req, log).ConfigureAwait(false).GetAwaiter().GetResult()) { return(new UnauthorizedResult()); } } catch (Exception ex) { log.LogError(ex.Message); return(new UnauthorizedResult()); } UserProfile userProfile; try { var objectId = await RIPAAuthorization.GetUserId(req, log); userProfile = (await _userProfileCosmosDbService.GetUserProfileAsync(objectId)); if (userProfile == null) { throw new Exception($"User profile not found for {objectId}"); } } catch (Exception ex) { log.LogError(ex.Message); return(new BadRequestObjectResult("User profile was not found")); } string stopQueryString = String.Empty; try { StopQueryUtility stopQueryUtility = new StopQueryUtility(); StopQuery stopQuery = stopQueryUtility.GetStopQuery(req); stopQueryString = stopQueryUtility.GetStopsQueryString(stopQuery, false); } catch (Exception ex) { log.LogError("An error occured while evaluating the stop query.", ex); return(new BadRequestObjectResult("An error occured while evaluating the stop query. Please try again.")); } IEnumerable <Stop> stopResponse; try { stopResponse = await _stopCosmosDbService.GetStopsAsync(stopQueryString); } catch (Exception ex) { log.LogError(ex, "An error occurred getting stops requested."); return(new BadRequestObjectResult("An error occurred getting stops requested. Please try again.")); } SubmissionUtilities submissionUtilities = new SubmissionUtilities(_stopCosmosDbService, _submissionCosmosDbService, _sftpService, log); Guid submissionId; if (!submissionUtilities.IsValidSFTPConnection()) { return(new BadRequestObjectResult("An error occurred connecting to DOJ SFTP service.")); } try { List <string> errorList = submissionUtilities.ValidateStops(stopResponse); if (errorList.Any()) { errorList.Add("Please adjust your filter criteria and try again."); return(new BadRequestObjectResult(string.Join(Environment.NewLine, errorList))); } } catch (Exception ex) { log.LogError(ex, "An error occurred validating stops."); return(new BadRequestObjectResult("An error validating stops requested. Please try again.")); } try { submissionId = await submissionUtilities.NewSubmission(stopResponse, userProfile); } catch (Exception ex) { log.LogError($"Failure Adding Submission to CosmosDb, No Records Submitted: {ex.Message}"); return(new BadRequestObjectResult($"Failure Adding Submission to CosmosDb, No Records Submitted: {ex.Message}")); } await _submissionServiceBusService.SendServiceBusMessagesAsync(stopResponse.Select(x => new ServiceBusMessage(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new SubmissionMessage() { StopId = x.Id, SubmissionId = submissionId })))).ToList()); return(new OkObjectResult(new { submissionId })); }
public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] string officerName, HttpRequest req, ILogger log) { log.LogInformation("CPRA Report Generation Requested"); try { if (!RIPAAuthorization.ValidateUserOrAdministratorRole(req, log).ConfigureAwait(false).GetAwaiter().GetResult()) { return(new UnauthorizedResult()); } } catch (Exception ex) { log.LogError(ex.Message); return(new UnauthorizedResult()); } await _blobContainerClient.CreateIfNotExistsAsync(); byte[] fileBytes; string tempPath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.csv"); var startDate = req.Query["StartDate"]; var endDate = req.Query["EndDate"]; var fileName = $"{startDate}-{endDate}-CPRAReport.csv"; string stopQueryString; string stopSummaryQueryString; try { StopQueryUtility stopQueryUtility = new StopQueryUtility(); StopQuery stopQuery = stopQueryUtility.GetStopQuery(req); stopQueryString = stopQueryUtility.GetStopsQueryString(stopQuery, true, true); stopSummaryQueryString = stopQueryUtility.GetStopsSummaryQueryString(stopQuery); } catch (Exception ex) { log.LogError("An error occurred while evaluating the stop query.", ex); return(new BadRequestObjectResult("An error occurred while evaluating the stop query. Please try again.")); } List <Stop> stopResponse; IEnumerable <StopStatusCount> stopStatuses; int totalStopCount = 0; try { stopResponse = await _stopCosmosDbService.GetStopsAsync(stopQueryString) as List <Stop>; stopStatuses = await _stopCosmosDbService.GetStopStatusCounts(stopSummaryQueryString); foreach (var stopStatus in stopStatuses) { totalStopCount += stopStatus.Count; } } catch (Exception ex) { log.LogError("An error occurred getting stops requested.", ex); return(new BadRequestObjectResult("An error occurred getting stops requested. Please try again.")); } if (totalStopCount == 0) { return(new OkObjectResult("No valid stops were found during that date range.")); } var builder = new StringBuilder(); try { foreach (var stop in stopResponse) { var dojStop = _stopService.CastToDojStop(stop); dojStop.Officer = null; var jsonStop = JsonConvert.SerializeObject(dojStop); if (stop.Location.Beat != null) { jsonStop += $"|{stop.Location.Beat.Codes.Text}"; } jsonStop = jsonStop.Replace("\"", "\"\""); builder.AppendLine($"\"{jsonStop}\""); } } catch (Exception ex) { log.LogError("An error occurred while parsing stops.", ex.Message); } await File.WriteAllTextAsync(tempPath, builder.ToString(), Encoding.UTF8); using (StreamReader sr = new StreamReader(tempPath)) { using (MemoryStream ms = new MemoryStream()) { sr.BaseStream.CopyTo(ms); fileBytes = ms.ToArray(); } } File.Delete(tempPath); try { await blobUtilities.UploadBlobCpraReport(fileBytes, fileName, officerName, _blobContainerClient); } catch (Exception ex) { return(new BadRequestObjectResult(ex.Message)); } var result = new CpraResult { FileName = $"{officerName}/{fileName}", CpraItems = new List <CpraListItem> { new CpraListItem() { Level = 1, Header = "Total stops in date range", Detail = totalStopCount.ToString(), }, new CpraListItem() { Level = 1, Header = "Submitted stops included on report", Detail = stopResponse.Count.ToString(), }, new CpraListItem() { Level = 1, Header = "From Date", Detail = startDate, }, new CpraListItem() { Level = 1, Header = "To Date", Detail = endDate, } } }; return(new OkObjectResult(result)); }