public IHttpActionResult SendPersonalMessage(UserMessageBindingModel messageData)
        {
            if (messageData == null)
            {
                return BadRequest("Missing message data.");
            }

            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var recipientUser = this.db.Users.All()
                .FirstOrDefault(u => u.UserName == messageData.Recipient);
            if (recipientUser == null)
            {
                return BadRequest("Recipient user " + messageData.Recipient + " does not exists.");
            }

            var currentUserId = User.Identity.GetUserId();
            var currentUser = this.db.Users.Find(currentUserId);

            var message = new UserMessage()
            {
                Text = messageData.Text,
                DateSent = DateTime.Now,
                SenderUser = currentUser,
                RecipientUser = recipientUser
            };
            db.UserMessages.Add(message);
            db.SaveChanges();

            if (message.SenderUser == null)
            {
                return this.Ok(
                    new
                    {
                        message.Id,
                        Message = "Anonymous message sent successfully to user " + recipientUser.UserName + "."
                    }
                );
            }

            return this.Ok(
                new
                {
                    message.Id, 
                    Sender = message.SenderUser.UserName,
                    Message = "Message sent successfully to user " + recipientUser.UserName + "."
                }
            );
        }
        public IHttpActionResult SendUserMessages(UserMessagesBindingModel m)
        {
            if (!ModelState.IsValid ||
                !Data.Users.Any(u => u.UserName == m.Recipient) ||
                string.IsNullOrEmpty(m.Text.Trim()))
                return BadRequest();


            if (User.Identity.GetUserName() != null)
            {
                var message = new UserMessage
                {
                    ReceiverId = Data.Users.First(u => u.UserName == m.Recipient).Id,
                    SenderId = User.Identity.GetUserId(),
                    Text = m.Text,
                    DateSent = DateTime.Now
                };

                Data.UserMessages.Add(message);

                Data.SaveChanges();

                return Ok(new
                {
                    message.Id,
                    Sender = User.Identity.GetUserName(),
                    Message = "Message sent successfully to user " + m.Recipient + "."
                });
            }

            else
            {
                var message = new UserMessage
                {
                    ReceiverId = Data.Users.First(u => u.UserName == m.Recipient).Id,
                    Text = m.Text,
                    DateSent = DateTime.Now
                };

                Data.UserMessages.Add(message);

                Data.SaveChanges();

                return Ok(new
                {
                    message.Id,
                    Message = "Anonymous message sent successfully to user " + m.Recipient + "."
                });
            }
        }
        public IHttpActionResult PostUserMessage([FromUri] string recipient,
            [FromUri] AnonymousMessageBindingModel model)
        {
            var recipientUser = this.Data.Users.FirstOrDefault(u => u.UserName == recipient);

            if (recipientUser == null || model==null)
            {
                return BadRequest();
            }
            if (!ModelState.IsValid)
            {
                return BadRequest();
            }
            var userId = recipientUser.Id;
            var SenderId = User.Identity.GetUserId();
            if (SenderId == null)
            {

                var newMessage = new UserMessage()
                {
                    Text = model.Text,
                    DateSend = DateTime.Now,
                    RecipientId = userId
                };
                this.Data.UserMessages.Add(newMessage);
                this.Data.SaveChanges();
                return Ok(new
                {
                    Id = newMessage.Id,
                    Message = "Anonymous message sent successfully to user " + recipientUser.UserName + " ."
                });
            }
            var MessageWithUser = new UserMessage()
            {
                Text = model.Text,
                DateSend = DateTime.Now,
                RecipientId = userId,
                SenderId = SenderId
            };
            this.Data.UserMessages.Add(MessageWithUser);
            this.Data.SaveChanges();
            return Ok(new
            {
                Id = MessageWithUser.Id,
                Sender = User.Identity.GetUserName(),
                Message = "Message sent successfully to user " + recipientUser.UserName + " ."
            });
        }
        public IHttpActionResult SendPersonalMessage(PersonalMessageBindingModel model)
        {
            var loggedUserId = this.User.Identity.GetUserId();
            var loggedUser = this.Data.Users.Find(loggedUserId);
            if (loggedUserId == null)
            {
                return this.Unauthorized();
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            var recipient = this.Data.Users.All()
                .FirstOrDefault(u => u.UserName.Equals(model.Recipient));

            if (recipient == null)
            {
                return this.NotFound();
            }

            var message = new UserMessage
            {
                Text = model.Text,
                DateSent = DateTime.Now,
                Sender = loggedUser,
                SenderId = loggedUserId,
                Recipient = recipient,
                RecipientId = recipient.Id
            };

            this.Data.UserMessages.Add(message);
            this.Data.SaveChanges();

            var responseMessage =
                string.Format("Message sent successfully to user {0}.", recipient.UserName);

            return this.Ok(new
            {
                message.Id,
                Message = responseMessage
            });
        }