public async Task <ChannelDetails> CreateChannel(User activeUser, string groupTitle, IEnumerable <string> addUsernames) { List <int> recipientIds = new List <int>(); int channelId; using (var trans = TransactionScopeFactory.Create()) { if (addUsernames != null && addUsernames.Count() > 0) { var recipients = (await UserDomain.RetrieveUsersByUsername(addUsernames)).ToDictionary(u => u.Username); foreach (var userName in addUsernames) { if (!recipients.ContainsKey(userName) || !recipients[userName].IsActive) { throw new CritterException($"Could not add {userName} to a group!", $"Invalid message recipient provided - {userName}", System.Net.HttpStatusCode.BadRequest); } recipientIds.Add(recipients[userName].Id); } } if (string.IsNullOrEmpty(groupTitle)) { groupTitle = string.Join(", ", addUsernames); } channelId = await MessageRepo.CreateChannel(groupTitle); recipientIds.Add(activeUser.Id); await MessageRepo.AddUsersToChannel(channelId, recipientIds); trans.Complete(); } return((await GetChannels(new List <int> { channelId }, activeUser)).FirstOrDefault()); }