Example #1
0
        public async Task <bool> CreateInvite(Project project, string userName, string message)
        {
            var user = await _userManager.FindByNameAsync(userName);

            if (user == null)
            {
                _toastService.ShowToast("User was not found", ToastLevel.Error);
                return(false);
            }
            if (await _databaseContext.Invites.Where(inv => inv.UserId == user.Id && inv.ProjectId == project.Id).Select(inv => inv).SingleOrDefaultAsync() != null)
            {
                _toastService.ShowToast("Invite was already sent", ToastLevel.Error);
                return(false);
            }
            if (await _databaseContext.UserProjects.Where(up => up.ContributorId == user.Id && up.ProjectId == project.Id).Select(up => up).SingleOrDefaultAsync() != null)
            {
                _toastService.ShowToast("User is already a part of your team", ToastLevel.Error);
                return(false);
            }

            var invite = new Invite()
            {
                Project = project,
                Message = message,
                UserId  = user.Id,
                Status  = Invite.InviteStatus.Pending,
            };
            await _databaseContext.Invites.AddAsync(invite);

            await _databaseContext.SaveChangesAsync();

            _toastService.ShowToast("Invite was sent successfully", ToastLevel.Success);

            var msg = $"You were invited to join {invite.Project.Name}! <p>{invite.Message}</p>";

            _mailingService.Send(invite.User.Email, "You were invited to join a new project!", msg);
            return(true);
        }
Example #2
0
        private async Task SendNotifications(Ticket ticket, string message)
        {
            var alreadySend = new List <string>();
            var regex       = new Regex("(@[^ ,!.:?]+)");

            foreach (var match in regex.Matches(message))
            {
                var user = await _databaseContext.UserProjects
                           .Where(up => up.ProjectId == ticket.ProjectId)
                           .Include(up => up.Contributor)
                           .Select(up => up.Contributor)
                           .Where(u => u.UserName == ((Match)match).Value.Trim('@'))
                           .SingleOrDefaultAsync();

                if (user == null || alreadySend.Contains(user.UserName))
                {
                    continue;
                }

                _mailingService.Send(user.Email, "You were mentioned in a comment!", message);
                alreadySend.Add(user.UserName);
            }
        }