public MessageDTO deleteMessage(int id)
        {
            using (var uow = new UnitOfWork())
            {
                var messageRepository      = uow.GetRepository <Message>();
                var acountRepository       = uow.GetRepository <Account>();
                var conversationRepository = uow.GetRepository <Conversation>();

                var message = messageRepository.GetById(id);

                if (message == null)
                {
                    return(null);
                }
                else
                {
                    message.Conversation = conversationRepository.GetById(message.ConversationId);
                    message.User         = acountRepository.GetById(message.UserId);
                    MessageMapper messageMapper = new MessageMapper();
                    MessageDTO    messageDTO    = messageMapper.MapToDTO(message);

                    messageRepository.Delete(id);
                    uow.SaveChanges();

                    return(messageDTO);
                }
            }
        }
        public IEnumerable <MessageDTO> GetMessages(int pageSize, int pageNumber, int userOneId, int userSecondId)
        {
            using (var uow = new UnitOfWork())
            {
                var conversationRepository = uow.GetRepository <Conversation>();
                var messagesRepository     = uow.GetRepository <Message>();
                var accountRepository      = uow.GetRepository <Account>();

                var conversation = conversationRepository.FindBy(conv => (
                                                                     (conv.UserOneId == userOneId & conv.UserTwoId == userSecondId) |
                                                                     (conv.UserOneId == userSecondId & conv.UserTwoId == userOneId))).FirstOrDefault();

                if (conversation == null)
                {
                    return(null);
                }

                var messages = messagesRepository.GetAll().Where(m => m.ConversationId == conversation.Id);

                var totalCount = messages.Count();
                var totalPages = Math.Ceiling((double)totalCount / pageSize);


                messages = messages.OrderByDescending(s => s.Date);

                var messagesPage = messages.Skip((pageNumber - 1) * pageSize)
                                   .Take(pageSize)
                                   .ToList();

                List <MessageDTO> messDTO = new List <MessageDTO>();

                MessageMapper messageMapper = new MessageMapper();
                foreach (Message m in messagesPage)
                {
                    m.User         = accountRepository.GetById(m.UserId);
                    m.Conversation = conversationRepository.GetById(m.ConversationId);
                    messDTO.Add(messageMapper.MapToDTO(m));
                }

                return(messDTO);
            }
        }
        public MessageDTO addMessage(MessageDTO messageDTO)
        {
            using (var uow = new UnitOfWork())
            {
                var messageRepository      = uow.GetRepository <Message>();
                var acountRepository       = uow.GetRepository <Account>();
                var conversationRepository = uow.GetRepository <Conversation>();

                Account ac = acountRepository.GetById(messageDTO.User.Id);

                MessageMapper messageMapper = new MessageMapper();
                messageDTO.User.FullName = ac.FirstName + " " + ac.LastName;
                Message message = messageMapper.MapFromDTO(messageDTO);
                message.User         = ac;
                message.Conversation = conversationRepository.GetById(messageDTO.ConversationId);
                message.Date         = DateTime.Now;
                message = messageRepository.Add(message);
                uow.SaveChanges();
                return(messageMapper.MapToDTO(message));
            }
        }