コード例 #1
0
        public async Task <IReadOnlyList <string> > CreateChallengeRequests(CreateChallengeRequestModel model)
        {
            var filterUsersViewModel = new FilterUsersViewModel(model.ChallengeOwnerId, model.Points, model.Range, model.IsBotActivated);
            var userIds = await GetChallengerIds(
                new GetChallengerIdsModel(
                    model.AccessToken,
                    filterUsersViewModel,
                    AppSettingsProvider.LoyaltyBaseUrl,
                    AppSettingsProvider.FilterUsersUrl));

            //var filteredUserId = ExcludeOutOfRangeUsers(model.Range, model.ChallengeOwnerId, userIds);
            //filteredUserId = ApplyGenderFilter(model.Gender, model.ChallengeOwnerId, filteredUserId);

            foreach (var userId in userIds)
            {
                var challengeRequestParams = new ChallengeRequestParams(Status.Active, model.ChallengeOwnerId, userId, model.ChallengeId, Enums.ChallengeRequestStatus.Waiting);
                CreateOrUpdate(challengeRequestParams);

                await _hubContext.Clients.User(userId)
                .SendAsync("ChallengeRequestReceived", JsonConvert.SerializeObject(GetChallengeRequest(challengeRequestParams.Id)));
            }

            if (model.IsBotActivated)
            {
                var acceptingUserId  = userIds.FirstOrDefault();
                var botUser          = _userService.GetUserByUserId(acceptingUserId);
                var challengeRequest = Entities.FirstOrDefault(x => x.ChallengeId == model.ChallengeId && x.ChallengerId == acceptingUserId && x.ChallengeOwnerId == model.ChallengeOwnerId);

                await BotActivationAsync(model, challengeRequest.Id, botUser.Nickname);
            }

            return(userIds);
        }
コード例 #2
0
        private async Task BotActivationAsync(CreateChallengeRequestModel model, int challengeRequestId, string nickname)
        {
            Random random = new Random();
            var    delay  = random.Next(3, 10);

            await Task.Delay(TimeSpan.FromSeconds(delay));

            var credentials = await _userService.Login(new LoginModel()
            {
                Username = nickname, Password = "******"
            });

            await _botService.SendUpdateChallengeRequest(credentials.AccessToken, challengeRequestId,
                                                         new UpdateChallengeInputViewModel()
            {
                ChallengeRequestAnswer = ChallengeRequestStatus.Accepted
            });
        }