public async Task <TaskModuleResponse> Handle(Activity activity, IUrlHelper urlHelper) { var invokeActionData = activity.GetInvokeActionData(); var competition = await _competitionService.GetCompetition(invokeActionData.CompetitionId); var errorMessage = CanActivateCompetition(competition); if (!string.IsNullOrEmpty(errorMessage)) { return(_activityBuilder.CreateDraftCompetitionEditTaskInfoResponse(competition, errorMessage, activity.Locale)); } competition = await _competitionService.ActivateCompetition(competition.Id); var mainActivity = _activityBuilder.CreateMainActivity(competition); using (var botClient = _botClientFactory.CreateBotClient(activity.ServiceUrl)) { await botClient.UpdateActivityAsync(competition.ChannelId, competition.MainActivityId, mainActivity); } await _timerService.AddScheduledHttpRequest( competition.PlannedDrawTime, "POST", urlHelper.Action(nameof(CompetitionsController.DrawForCompetition), "Competitions", new { competitionId = competition.Id })); return(null); }
public async Task Handle(Activity activity, IUrlHelper urlHelper) { var editForm = GetEditForm(activity); var offset = activity.GetOffset(); var date = DateTimeOffset.Parse(editForm.PlannedDrawTimeLocalDate); var time = DateTimeOffset.Parse(editForm.PlannedDrawTimeLocalTime); var plannedDrawTime = new DateTimeOffset(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second, 0, offset).ToUniversalTime(); var channelData = activity.GetChannelData <TeamsChannelData>(); var isGroupChat = channelData.Channel == null; var teamId = isGroupChat ? string.Empty : channelData.Team.Id; var channelId = isGroupChat ? activity.Conversation.Id : channelData.Channel.Id; var competition = await _competitionService.CreateActiveCompetition( activity.ServiceUrl, Guid.Parse(channelData.Tenant.Id), teamId, channelId, plannedDrawTime, activity.Locale, offset.TotalHours, editForm.Gift, editForm.GiftImageUrl, int.Parse(editForm.WinnerCount), activity.From.Name, activity.From.AadObjectId); var mainActivity = _activityBuilder.CreateMainActivity(competition); using (var botClient = _botClientFactory.CreateBotClient(activity.ServiceUrl)) { var mainMessage = await botClient.SendToConversationAsync(mainActivity); await _competitionService.UpdateMainActivity(competition.Id, mainMessage.Id); } await _timerService.AddScheduledHttpRequest( competition.PlannedDrawTime, "POST", urlHelper.Action(nameof(CompetitionsController.DrawForCompetition), "Competitions", new { competitionId = competition.Id })); }
private async Task <bool> HandleCompetitionInitialization(Activity activity) { var parameters = ParseCreateCompetitionParameters(activity); if (parameters == null) { return(false); } var channelData = activity.GetChannelData <TeamsChannelData>(); var competition = await _competitionService.Create( activity.ServiceUrl, Guid.Parse(channelData.Tenant.Id), channelData.Team.Id, channelData.Channel.Id, parameters.PlannedDrawTime, activity.Locale, parameters.OffsetHours, parameters.Gift, parameters.GiftImageUrl, parameters.WinnerCount, activity.From.Name, activity.From.AadObjectId); var mainActivity = _activityBuilder.CreateMainActivity(competition); using (var botClient = _botClientFactory.CreateBotClient(activity.ServiceUrl)) { var mainMessage = await botClient.SendToConversationAsync(mainActivity); await _competitionService.UpdateMainActivity(competition.Id, mainMessage.Id); } await _timerService.AddScheduledHttpRequest( competition.PlannedDrawTime, "POST", Url.Action(nameof(CompetitionsController.DrawForCompetition), "Competitions", new { competitionId = competition.Id })); return(true); }