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); }
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); } }