public async Task GraduateMembersIfNeeded(AppendOnlyStringList messages)
        {
            var members = await _repository.ListAsync();

            var membersToGraduate = await CheckIfAnyMemberGraduating(members);

            // add message indicating how many members should be graduated by the end of this flow
            if (membersToGraduate.Any())
            {
                string?membersToGraduateMessage;
                if (membersToGraduate.Count == 1)
                {
                    membersToGraduateMessage = $"There is 1 member to graduate: {membersToGraduate[0].UserFullName()}.";
                }
                else
                {
                    membersToGraduateMessage = $"There are {membersToGraduate.Count} members to graduate: ";
                    foreach (var member in membersToGraduate)
                    {
                        membersToGraduateMessage += member.UserFullName() + ",";
                    }
                    membersToGraduateMessage  = membersToGraduateMessage.Substring(0, membersToGraduateMessage.Length - 1);
                    membersToGraduateMessage += ".";
                }
                messages.Append(membersToGraduateMessage);

                // graduate members
                var newMessages = await GraduateMembers(membersToGraduate);

                foreach (var message in newMessages)
                {
                    messages.Append(message);
                }
            }
        }
Esempio n. 2
0
    public async Task DeactiveInvitesForExistingMembers(AppendOnlyStringList messages)
    {
        var spec = new ActiveInvitationsSpec();
        var activeInvitations = await _inviteRepository.ListAsync(spec);

        foreach (var invitation in activeInvitations)
        {
            var user = await _userManager.FindByEmailAsync(invitation.Email);

            if (user == null)
            {
                continue;
            }
            var member = await _memberRepository.GetBySpecAsync(new MemberByUserIdSpec(user.Id));

            if (member == null)
            {
                continue;
            }

            invitation.Deactivate();
            await _inviteRepository.UpdateAsync(invitation);

            messages.Append($"Disabled invitation for email {invitation.Email}");
        }
    }
Esempio n. 3
0
    public async Task PingAdminsAboutAlmostAlumsIfNeeded(AppendOnlyStringList messages)
    {
        var members = await _memberRepository.ListAsync();

        var membersToPingAdminsAbout = new List <Member>();

        foreach (var member in members)
        {
            if (member.TotalSubscribedDays() == DAYS_IN_TWO_YEARS - DAYS_BEFORE_GRADUATION_TO_PING)
            {
                membersToPingAdminsAbout.Add(member);
            }
        }

        if (membersToPingAdminsAbout.Any())
        {
            string listOfMembersToPingAdminsAbout = "";

            foreach (var member in membersToPingAdminsAbout)
            {
                listOfMembersToPingAdminsAbout = $"{member.UserFullName()}\n";
            }

            messages.Append($"Admins need to be reminded not to renew the subscriptions of the following members about to graduate: {listOfMembersToPingAdminsAbout}");

            var usersInAdminRole = await _userManager.GetUsersInRoleAsync(AuthConstants.Roles.ADMINISTRATORS);

            foreach (var user in usersInAdminRole)
            {
                await _emailService.SendEmailAsync(user.Email, "Upcoming DevBetter Graduation", $"Ensure that the following member(s)'s subscriptions are not renewed, as they will graduate to alumni status in {DAYS_BEFORE_GRADUATION_TO_PING} days:\n {listOfMembersToPingAdminsAbout}");
            }

            messages.Append($"Admins have been reminded not to renew the subscriptions of the following members about to graduate: {listOfMembersToPingAdminsAbout}");
        }
    }
 private async Task SendMessagesToDiscord(AppendOnlyStringList messages)
 {
     foreach (var message in messages)
     {
         _webhook.Content = message;
         await _webhook.Send();
     }
 }
Esempio n. 5
0
        public void AppendsStringsToList()
        {
            var list              = new AppendOnlyStringList();
            var testString        = "I am a test";
            var anotherTestString = "Look! Another test string!";

            list.Append(testString);
            list.Append(anotherTestString);

            Assert.Contains(testString, list);
            Assert.Contains(anotherTestString, list);
        }
    public async Task WarnIfNumberOfMemberSubscriptionPlansDifferentThanExpected(AppendOnlyStringList messages)
    {
        // TODO: replace with just CountAsync() once it supports parameterless overload
        var subscriptionPlans = await _repository.ListAsync();

        int numberOfSubscriptionPlans = subscriptionPlans.Count();

        var numberOfPaymentProviderSubscriptionPlans = await _paymentHandlerPrice.GetPriceCount();

        if (numberOfSubscriptionPlans != numberOfPaymentProviderSubscriptionPlans + _expectedNumberOfSubscriptionPlansNotInPaymentProvider)
        {
            messages.Append($"THE NUMBER OF MEMBERSUBSCRIPTIONPLANS ON DevBetter ({numberOfSubscriptionPlans} DOES NOT MATCH THE EXPECTED VALUE IN STRIPE ({numberOfPaymentProviderSubscriptionPlans}) PLUS CONFIGURED VALUE OF PLANS NOT IN STRIPE ({_expectedNumberOfSubscriptionPlansNotInPaymentProvider})!");
        }
    }
    private async Task StoreMessagesInTasksCompleted(AppendOnlyStringList messages)
    {
        var spec             = new DailyCheckByDateSpec(DateTime.Today);
        var todaysDailyCheck = await _repository.GetBySpecAsync(spec);

        if (todaysDailyCheck != null)
        {
            foreach (var message in messages)
            {
                if (!message.Equals(DAILY_CHECK_COMPLETED_MESSAGE))
                {
                    if (todaysDailyCheck.TasksCompleted == null)
                    {
                        todaysDailyCheck.TasksCompleted = "";
                    }
                    todaysDailyCheck.TasksCompleted += message;
                }
            }
            await _repository.UpdateAsync(todaysDailyCheck);
        }
    }
Esempio n. 8
0
    public async Task SendPingIfNeeded(AppendOnlyStringList messages)
    {
        var spec = new ActiveInvitationsSpec();
        var activeInvitations = await _inviteRepository.ListAsync(spec);

        var invitationsForUserPing = CheckIfAnyActiveInvitationsRequireUserPing(activeInvitations);

        if (invitationsForUserPing.Any())
        {
            foreach (var invitation in invitationsForUserPing)
            {
                messages.Append($"User at email {invitation.Email} should be reminded to finish setting up their account.");
            }

            var userPingMessages = await SendUserPing(invitationsForUserPing);

            foreach (var message in userPingMessages)
            {
                messages.Append(message);
            }
        }

        var invitationsForAdminPing = CheckIfAnyActiveInvitationsRequireAdminPing(activeInvitations);

        if (invitationsForAdminPing.Any())
        {
            var listOfEmailsToRemindAdminsAbout = "";
            foreach (var invitation in invitationsForAdminPing)
            {
                listOfEmailsToRemindAdminsAbout += $"{invitation.Email}\n";
            }
            messages.Append($"Admins should be reminded to remind these users to finish setting up their DevBetter accounts: {listOfEmailsToRemindAdminsAbout}");

            var adminPingMessage = await SendAdminPing(invitationsForAdminPing);

            messages.Append(adminPingMessage);
        }
    }