Пример #1
0
        public UserGroupsListViewModel InitUserGroups(string userId, string email)
        {
            using (DataContext db = new DataContext())
            {
                List <UserGroupViewModel> userGroups = new List <UserGroupViewModel>();
                foreach (var ugr in db.UsersGroups.Where(ug => ug.GroupMembers.Any(gm => gm.AspNetUser.Email == email)))
                {
                    userGroups.Add(new UserGroupViewModel()
                    {
                        Id = ugr.Id,
                        LastChatMessages = ugr.ChatMessages.OrderByDescending(cm => cm.DateCreated).Take(1).ToList().Select(cm => _mapper.Map <ChatMessageViewModel>(cm)).FirstOrDefault(),
                        UserGroupMembers = ugr.GroupMembers.Select(gm => new UserGroupMemberViewModel()
                        {
                            Id       = gm.Id,
                            UserName = gm.AspNetUser.UserName
                        }).ToList(),
                        NewMessagesCount = ugr.ChatMessages.Where(cm => cm.SenderId != userId && !cm.SeenBy.Contains(email)).Count()
                    });
                }

                var currentUserGroupViewModel = new UserGroupWithMessagesViewModel();
                userGroups = userGroups.OrderByDescending(ugvm => ugvm.LastChatMessages.DateCreated).ToList();

                if (userGroups.Any())
                {
                    var currentGroupId   = userGroups.FirstOrDefault().Id;
                    var currentUserGroup = db.UsersGroups.Where(ug => ug.Id == currentGroupId).FirstOrDefault();

                    currentUserGroupViewModel.Id = currentUserGroup.Id;
                    currentUserGroupViewModel.ChatMessagesByDay = _mapper.Map <List <ChatMessageViewModel> >(currentUserGroup.ChatMessages
                                                                                                             .OrderByDescending(cm => cm.DateCreated)
                                                                                                             .Take(MaxMessageCountPerPage)
                                                                                                             .OrderBy(cm => cm.DateCreated))
                                                                  .GroupBy(cm => cm.DateCreated.Date)
                                                                  .OrderBy(g => g.Key);
                    currentUserGroupViewModel.UserGroupMembers = currentUserGroup.GroupMembers.Select(gm => new UserGroupMemberViewModel()
                    {
                        Id       = gm.Id,
                        UserName = gm.AspNetUser.UserName,
                    }).ToList();
                    currentUserGroupViewModel.HasOlderMessages = currentUserGroup.ChatMessages.Count > MaxMessageCountPerPage;
                }

                UserGroupsListViewModel model = new UserGroupsListViewModel()
                {
                    UserGroupsList   = userGroups,
                    CurrentUserGroup = currentUserGroupViewModel,
                };

                return(model);
            }
        }
Пример #2
0
        public UserGroupWithMessagesViewModel GetUserGroupWithMessages(int userGroupId, int userGroupLatMessageId)
        {
            using (DataContext db = new DataContext())
            {
                var currentUserGroupViewModel = new UserGroupWithMessagesViewModel();
                try
                {
                    var usersGroup = db.UsersGroups.FirstOrDefault(ug => ug.Id == userGroupId);
                    if (usersGroup != null)
                    {
                        currentUserGroupViewModel.Id = userGroupId;

                        if (userGroupLatMessageId == 0)
                        {
                            currentUserGroupViewModel.ChatMessagesByDay = _mapper.Map <List <ChatMessageViewModel> >(usersGroup.ChatMessages
                                                                                                                     .OrderByDescending(cm => cm.DateCreated)
                                                                                                                     .Take(MaxMessageCountPerPage))
                                                                          .GroupBy(cm => cm.DateCreated.Date)
                                                                          .OrderBy(g => g.Key);
                        }
                        else
                        {
                            currentUserGroupViewModel.ChatMessagesByDay = _mapper.Map <List <ChatMessageViewModel> >(usersGroup.ChatMessages
                                                                                                                     .OrderBy(cm => cm.DateCreated)
                                                                                                                     .SkipWhile(cm => userGroupLatMessageId == 0 ? true : cm.Id == userGroupLatMessageId)
                                                                                                                     .Take(MaxMessageCountPerPage))
                                                                          .GroupBy(cm => cm.DateCreated.Date)
                                                                          .OrderBy(g => g.Key);
                        }
                        currentUserGroupViewModel.UserGroupMembers = usersGroup.GroupMembers.Select(gm => new UserGroupMemberViewModel()
                        {
                            Id       = gm.Id,
                            UserName = gm.AspNetUser.UserName
                        }).ToList();
                    }
                }
                catch (Exception ex)
                {
                    ExceptionLogingHelper.LogException(ex);
                }

                return(currentUserGroupViewModel);
            }
        }