Esempio n. 1
0
        public async Task <IActionResult> MessageBoard()
        {
            var currentUser = await _userManager.GetUserAsync(User);

            var messageChats = await unitOfWork.db.UserChatGroups
                               .Include(ucg => ucg.Group)
                               .Include(ucg => ucg.Group.UserChatGroups)
                               .ThenInclude(ucg => ucg.User)
                               .Include(ucg => ucg.Group.Messages)
                               .ThenInclude(m => m.User)
                               .Where(ucg => ucg.UserId == currentUser.Id)
                               .Select(ucg => ucg.Group)
                               .ToListAsync();


            if (messageChats.Count != 0)
            {
                var currentChat = messageChats.FirstOrDefault();
                var viewmodel   = new MessageboardVM(messageChats, currentChat.Id, currentUser.NickName);
                return(View(viewmodel));
            }
            else
            {
                var viewmodel = new MessageboardVM(currentUser.NickName);
                return(View(viewmodel));
            }
        }
Esempio n. 2
0
        public async Task <IActionResult> ChatWith(int currentUserId, int requestedUserID)
        {
            var followRelation1 = unitOfWork.FollowRelations.GetFollowRelationOfTwoUsers(currentUserId, requestedUserID);
            var followRelation2 = unitOfWork.FollowRelations.GetFollowRelationOfTwoUsers(requestedUserID, currentUserId);

            if (followRelation1 == null || followRelation2 == null)
            {
                return(NotFound());
            }

            var currentUser   = unitOfWork.GGUsers.GetUser(currentUserId);
            var RequestedUser = unitOfWork.GGUsers.GetUser(requestedUserID);

            var chatGroup = await unitOfWork.db.ChatGroups
                            .Where(cg =>
                                   cg.UserChatGroups.Any(ucg => ucg.UserId == currentUser.Id) &&
                                   cg.UserChatGroups.Any(ucg => ucg.UserId == RequestedUser.Id))
                            .Include(cg => cg.Messages)
                            .FirstOrDefaultAsync();


            if (chatGroup == null)
            {
                chatGroup = new ChatGroup()
                {
                    Name           = RequestedUser.NickName,
                    UserChatGroups = new List <UserChatGroup>(),
                    Messages       = new List <Message>()
                };

                var chatGroupRelation1 = new UserChatGroup()
                {
                    User  = currentUser,
                    Group = chatGroup
                };

                var chatGroupRelation2 = new UserChatGroup()
                {
                    User  = RequestedUser,
                    Group = chatGroup
                };

                chatGroup.UserChatGroups.Add(chatGroupRelation1);
                chatGroup.UserChatGroups.Add(chatGroupRelation2);

                unitOfWork.db.ChatGroups.Add(chatGroup);
                await unitOfWork.Save();


                chatGroup = await unitOfWork.db.ChatGroups
                            .Where(cg =>
                                   cg.UserChatGroups.Any(ucg => ucg.UserId == currentUser.Id) &&
                                   cg.UserChatGroups.Any(ucg => ucg.UserId == RequestedUser.Id))
                            .Include(cg => cg.Messages)
                            .FirstOrDefaultAsync();
            }


            var chatGroupsOfCurrentUser = await unitOfWork.db.UserChatGroups
                                          .Where(ucg => ucg.UserId == currentUser.Id)
                                          .Include(ucg => ucg.Group)
                                          .ThenInclude(g => g.Messages)
                                          .Select(ucg => ucg.Group)
                                          .ToListAsync();

            var viewModel = new MessageboardVM(chatGroupsOfCurrentUser, chatGroup.Id, currentUser.NickName);


            return(View("MessageBoard", viewModel));
        }