public SkillResponse Handle(IntentRequest intentRequest, ILambdaContext context, Session session)
        {
            if (IsDialogIntentRequest(intentRequest))
            {
                if (IsDialogSequenceComplete(intentRequest) == false)
                {
                    return(ResponseBuilder.DialogDelegate(session));
                }
            }

            var intent             = intentRequest.Intent;
            var dateSlotValue      = intent.Slots["date"].Value;
            var clubNameSlotValue  = intent.Slots["clubName"].Value;
            var classNameSlotValue = intent.Slots["className"].Value;

            var date = NodaTime.AmazonDate.AmazonDateParser.Parse(dateSlotValue);

            var dateFrom = date.From.ToDateTimeUnspecified();
            var dateTo   = date.To.ToDateTimeUnspecified();

            if (dateFrom == dateTo)
            {
                dateFrom = new DateTime(dateFrom.Year, dateFrom.Month, dateFrom.Day, 0, 0, 0);
                dateTo   = new DateTime(dateTo.Year, dateTo.Month, dateTo.Day, 23, 59, 59);
            }

            var goApiClient = new GoApiClient();
            var result      = goApiClient.UpcomingClasses(classNameSlotValue, clubNameSlotValue, dateFrom, dateTo).Result;

            if (result.Errors.Any())
            {
                return(ResponseBuilder.Tell($"{result.Errors.First().Message}"));
            }



            var bookingsResponse = string.Join(',', result.Data.OrderBy(x => x.StartDate).
                                               Select(x =>
            {
                var startDate = x.StartDate.ToString("dddd dd MMMM hh:mm tt",
                                                     CultureInfo.CreateSpecificCulture("en-US"));
                return($" {x.ClassName} on {startDate}");
            }));

            var speech = new SsmlOutputSpeech {
                Ssml = $"<speak>{ GetFirstPartResponse(result.Data.Count())}{ bookingsResponse}</speak>"
            };
            var repromptMessage = new PlainTextOutputSpeech {
                Text = "Would you like to book one ?"
            };
            var repromptBody = new Reprompt();

            repromptBody.OutputSpeech = repromptMessage;
            var finalResponse = ResponseBuilder.Ask(speech, repromptBody);

            return(finalResponse);

            //return ResponseBuilder.Ask($"{GetFirstPartResponse(result.Data.Count())}{bookingsResponse}",
            //    new Reprompt("Whould you like to book one? "));
        }
예제 #2
0
        public async Task UpcomingClasses_Should_Return_UpcomingBookings_For_Valid_Request()
        {
            var goApiClient = new GoApiClient();
            var result      = await goApiClient.UpcomingClasses("Aerobics", "PerfectFit", new DateTime(2018, 8, 22), new DateTime(2018, 8, 24));

            Assert.NotNull(result);
            Assert.True(result.Data.Any());
        }
예제 #3
0
        public async Task UpcomingClasses_Should_Return_Error_For_BadRequest()
        {
            var goApiClient = new GoApiClient();
            var result      = await goApiClient.UpcomingClasses("", "", new DateTime(2018, 8, 22), new DateTime(2018, 8, 24));

            Assert.NotNull(result);
            Assert.True(result.Errors.Any());
        }