public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string tenantUrl = req.Query["tenantUrl"];
            string empID     = req.Query["empID"];
            string startRaw  = req.Query["start"];
            string endRaw    = req.Query["end"];
            string token     = req.Query["token"];

            // We still want to validate dates.
            DateTime.TryParse(startRaw, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var start);
            DateTime.TryParse(endRaw, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var end);

            var validationModel = Validate(tenantUrl, empID, start, end, token);

            if (!validationModel.IsValid)
            {
                return(new BadRequestObjectResult(validationModel));
            }

            var result = await _getTimesheetsQuery.Execute(new GetTimesheets(tenantUrl, empID, startRaw, endRaw, token));

            return(new JsonResult(result));
        }
        public async Task <CollectDataModel> Execute(CollectDataRequest request)
        {
            var data = new CollectDataModel
            {
                EmpID = request.EmpID,
                Date  = request.Date
            };

            var crmAppointmentsTask = _getCrmAppointmentsQuery.Execute(new GetCrmAppointments(
                                                                           request.TenantUrl,
                                                                           request.EmpID,
                                                                           request.Date,
                                                                           request.Date,
                                                                           request.Token));

            var recentProjectsTask = _getRecentProjectsQuery.Execute(new GetRecentProjects(
                                                                         request.TenantUrl,
                                                                         request.EmpID,
                                                                         request.Token));

            var timesheetsTask = _getTimesheetsQuery.Execute(new GetTimesheets.GetTimesheets(
                                                                 request.TenantUrl,
                                                                 request.EmpID,
                                                                 request.Date,
                                                                 request.Date,
                                                                 request.Token));

            IEnumerable <GitCommitModel> commits = await GetCommits(request);

            data.Commits = commits;

            data.CrmAppointments = await crmAppointmentsTask;
            data.RecentProjects  = await recentProjectsTask;
            data.Timesheets      = await timesheetsTask;

            return(data);
        }