Exemplo n.º 1
0
        public async Task <IActionResult> Sent(FriendInvitationViewModel.SentInvitationsViewModel vm)
        {
            if (string.IsNullOrEmpty(vm.InvitedEmail))
            {
                TempData["ErrorMessage"] = Constants.EmptyEmailInvitationMessage;
                return(RedirectToAction(nameof(List)));
            }

            if (!ModelState.IsValid)
            {
                return(RedirectToAction(nameof(List), new { vm.InvitedEmail }));
            }

            var currentUserId = GetCurrentUserId().Result;

            if (_friendInvitationRepository.IfInvitationWasSentByCurrentUser(currentUserId, vm.InvitedEmail))
            {
                TempData["ErrorMessage"] = Constants.ExistingInvitationSentByCurrentUserErrorMessage;
                return(RedirectToAction(nameof(List), new { vm.InvitedEmail }));
            }

            var invitedUser      = _userManager.FindByEmailAsync(vm.InvitedEmail).Result;
            var currentUserEmail = _userManager.FindByIdAsync(currentUserId).Result.Email;

            if (ToolsExtensions.IfStringsEqual(currentUserEmail, vm.InvitedEmail))
            {
                TempData["ErrorMessage"] = Constants.InvitationSentToAndByCurrentUserErrorMessage;
                return(RedirectToAction(nameof(List), new { vm.InvitedEmail }));
            }

            if (invitedUser != null &&
                _friendInvitationRepository.IfInvitationWasReceivedByCurrentUser(invitedUser.Id, currentUserEmail))
            {
                TempData["ErrorMessage"] = Constants.ExistingInvitationReceivedByCurrentUserErrorMessage;
                return(RedirectToAction(nameof(List), new { vm.InvitedEmail }));
            }

            var appLinkRegister = Url.Action("Register", "Account", new { Email = vm.InvitedEmail },
                                             HttpContext.Request.Scheme);
            var appLinkInvitations = Url.Action("List", "ReceivedInvitation", null, HttpContext.Request.Scheme);
            var response           = await _templateSender.SendGeneralEmailAsync(new SendEmailDetails
            {
                IsHTML  = true,
                ToEmail = vm.InvitedEmail,
                Subject = Constants.SubjectNewFriendInvitationEmail
            }, Constants.TitleNewFriendInvitationEmail,
                                                                                 invitedUser != null
                                                                                 ?Constants.ContentNewFriendInvitationExistingUserEmail
                                                                                 : Constants.ContentNewFriendInvitationNonExistingUserEmail,
                                                                                 invitedUser != null?Constants.ButtonCheckFriendInvitation : Constants.ButtonVisitSide,
                                                                                 invitedUser != null?appLinkInvitations : appLinkRegister);

            if (response.Successful)
            {
                var invitation = new FriendInvitation();
                if (invitedUser != null)
                {
                    invitation.Invited         = invitedUser;
                    TempData["SuccessMessage"] = Constants.ExistingAccountSentInvitationMessage;
                }
                else
                {
                    TempData["SuccessMessage"] = Constants.NoAccountSentInvitationMessage;
                }

                invitation.InvitedEmail = vm.InvitedEmail;
                invitation.SenderId     = currentUserId;
                _friendInvitationRepository.AddInvitation(invitation);

                return(RedirectToAction(nameof(List)));
            }

            _logger.LogCritical(vm.InvitedEmail);
            TempData["ErrorMessage"] =
                $"{Constants.GeneralSendEmailErrorMessage} {Constants.FriendInvitationEmailErrorMessage}";
            foreach (var error in response.Errors)
            {
                _logger.LogError(error);
            }

            return(RedirectToAction(nameof(List), new { vm.InvitedEmail }));
        }