public DirectChat AddDirectChat(string userId, string interlocutorId) { if (GetDirectChatByUserIds(userId, interlocutorId) == null) { var chatToAdd = new DirectChat(); var userChatForUser = new UserChat { UserId = userId, Chat = chatToAdd, }; var userChatForInterlocutor = new UserChat { UserId = interlocutorId, Chat = chatToAdd, }; context.AddRange(chatToAdd, userChatForUser, userChatForInterlocutor); context.SaveChanges(); return(chatToAdd); } else { return(null); } }
public DirectChat CreateDirectChat(string participant1, string participant2) { var chat = GetDirectChat(participant1, participant2); if (chat != null) { throw new ChatAlreadyExistException(); } chat = new DirectChat() { ChatMembers = new List <ChatMember>() }; _chatRepo.Add(chat); chat.ChatMembers.Add(new ChatMember() { Chat = chat, User = _userRepo.GetOne(participant1) }); chat.ChatMembers.Add(new ChatMember() { Chat = chat, User = _userRepo.GetOne(participant2) }); _chatRepo.Save(chat); return(chat); }
public DirectChat GetDirectChatByUserIds(string userId, string interlocutorId) { DirectChat directChat = context.Chats .OfType <DirectChat>() .Where(c => c.UserChats.Any(uc => uc.UserId == userId)) .Where(c => c.UserChats.Any(uc => uc.UserId == interlocutorId)) .Include(c => c.UserChats) .ThenInclude(uc => uc.User) .SingleOrDefault(); if (directChat != null) { UserChat userChat = GetUserChat(userId, directChat.Id); directChat.UserChats.Remove(userChat); } return(directChat); }