public Guid SendMessage(string toId, string subject, string text)
        {
            Require.NotNullOrEmpty(toId, nameof(toId));
            Require.NotNullOrEmpty(subject, nameof(subject));
            Require.NotNullOrEmpty(text, nameof(text));

            var toUser = this.UnitOfWork.Users.FindById(toId);

            if (toUser == null)
            {
                throw new Exceptions.ApplicationException("Cannot find user", ErrorCode.UserDoesNotExist);
            }

            var messageFrom = new Domain.Messages.Message(this.CurrentUser, this.CurrentUser, toUser, subject, text, Domain.Messages.MessageFolder.Sent);

            messageFrom.IsRead = true;
            var messageTo = new Domain.Messages.Message(toUser, this.CurrentUser, toUser, subject, text, Domain.Messages.MessageFolder.Inbox);

            this.UnitOfWork.Messages.Add(messageFrom);
            this.UnitOfWork.Messages.Add(messageTo);

            // Notify recipient
            this.userNotificationService.SendNotification(toUser.Id, new DTO.Notifications.NewMessageNotification
            {
                FromUserName = this.CurrentUser.UserName,
                Subject      = subject
            });

            this.UnitOfWork.Commit();

            return(messageTo.Id);
        }
        public Guid SendMessage(string toId, string subject, string text)
        {
            Require.NotNullOrEmpty(toId, nameof(toId));
            Require.NotNullOrEmpty(subject, nameof(subject));
            Require.NotNullOrEmpty(text, nameof(text));

            var toUser = this.UnitOfWork.Users.FindById(toId);
            if (toUser == null)
            {
                throw new Exceptions.ApplicationException("Cannot find user", ErrorCode.UserDoesNotExist);
            }

            var messageFrom = new Domain.Messages.Message(this.CurrentUser, this.CurrentUser, toUser, subject, text, Domain.Messages.MessageFolder.Sent);
            messageFrom.IsRead = true;
            var messageTo = new Domain.Messages.Message(toUser, this.CurrentUser, toUser, subject, text, Domain.Messages.MessageFolder.Inbox);

            this.UnitOfWork.Messages.Add(messageFrom);
            this.UnitOfWork.Messages.Add(messageTo);

            // Notify recipient
            this.userNotificationService.SendNotification(toUser.Id, new DTO.Notifications.NewMessageNotification
            {
                FromUserName = this.CurrentUser.UserName,
                Subject = subject
            });

            this.UnitOfWork.Commit();

            return messageTo.Id;
        }