public async Task <ChatRoomViewModel> Update(string applicationUserIdCurrent, ChatRoomViewModel chatRoomViewModel) { var applicationUserIds = chatRoomViewModel.Users.Select(u => u.ApplicationUserId).Concat(new string[] { applicationUserIdCurrent }).ToList(); var chatRoomEntity = mapper.Map <ChatRoomViewModel, ChatRoomEntity>(chatRoomViewModel); chatRoomEntity = repositoryOfChatRoom.Read(a => a.Id == chatRoomEntity.Id); // delete chatRoomEntity.UserChats .TakeWhile(userChat => !applicationUserIds.Any(applicationUserId => applicationUserId == userChat.UserProfile.ApplicationUserId)) .ToList() .ForEach(async a => await repositoryOfUserChat.Delete(a)); // create chatRoomEntity.UserChats = applicationUserIds .TakeWhile(applicationUserId => !chatRoomEntity.UserChats.Any(userChat => userChat.UserProfile.ApplicationUserId == applicationUserId)) .Select(applicationUserId => { var user = repositoryOfUserProfile.Read(b => b.ApplicationUserId == applicationUserId); var UserChat = new UserChatEntity(); UserChat.ChatRoom = chatRoomEntity; UserChat.ChatRoomId = chatRoomEntity.Id; UserChat.UserId = user.Id; UserChat.UserProfile = user; return(UserChat); }); chatRoomEntity = repositoryOfChatRoom.Update(chatRoomEntity); chatRoomViewModel = mapper.Map <ChatRoomEntity, ChatRoomViewModel>(chatRoomEntity); return(chatRoomViewModel); }
public async Task <ChatRoomViewModel> Create(string applicationUserIdCurrent, ChatRoomViewModel chatRoomViewModel) { var applicationUserIds = chatRoomViewModel.Users.Select(u => u.ApplicationUserId).Concat(new string[] { applicationUserIdCurrent }).ToList(); var chatRoomEntity = mapper.Map <ChatRoomViewModel, ChatRoomEntity>(chatRoomViewModel); chatRoomEntity = repositoryOfChatRoom.Create(chatRoomEntity); chatRoomEntity.UserChats = applicationUserIds.Select(a => { var user = repositoryOfUserProfile.Read(b => b.ApplicationUserId == a); var UserChat = new UserChatEntity(); UserChat.ChatRoom = chatRoomEntity; UserChat.ChatRoomId = chatRoomEntity.Id; UserChat.UserId = user.Id; UserChat.UserProfile = user; return(repositoryOfUserChat.Create(UserChat)); }).ToList(); chatRoomViewModel = mapper.Map <ChatRoomEntity, ChatRoomViewModel>(chatRoomEntity); return(chatRoomViewModel); }