Beispiel #1
0
        public async Task CreateReply(NewReply message)
        {
            MessageErrors error;

            if (Context.Items.ContainsKey("account") && _unitOfWork.Message.GetById(message.Parent).locked == false)
            {
                error = _messageService.CreateReply(message, (Account)Context.Items["account"]);
            }
            else
            {
                error = _messageService.CreateReply(message, null);
            }

            if (error != MessageErrors.NoError)
            {
                await Clients.Caller.MessageCreationError(error);
            }
        }
        public MessageErrors CreateReply(NewReply message, Account authenticated)
        {
            MessageErrors error;
            Account       account = _unitOfWork.Account.GetByEmail(message.Email);

            if (authenticated != null)
            {
                account = _unitOfWork.Account.GetById(authenticated.Id.ToString());
            }
            else
            {
                if (account != null)
                {
                    error = Messages.Utility.CheckMessage(message, false);

                    if (error != MessageErrors.NoError)
                    {
                        return(error);
                    }

                    if (account.Roles.Any(role => role.Name != "Guest"))
                    {
                        if (authenticated != null && authenticated.Id == account.Id)
                        {
                        }
                        else
                        {
                            return(MessageErrors.EmailAlreadyOwned);
                        }
                    }
                }
                else
                {
                    error = Messages.Utility.CheckMessage(message);

                    if (error != MessageErrors.NoError)
                    {
                        return(error);
                    }

                    account = new Account()
                    {
                        Email     = message.Email,
                        Password  = "",
                        FirstName = message.Author,
                        LastName  = "",
                        Roles     = new List <Role>()
                        {
                            _unitOfWork.Role.GetByName("Guest")
                        }
                    };

                    _unitOfWork.Account.Add(account);
                }
            }

            Message parent = _unitOfWork.Message.GetById(message.Parent);

            if (parent.Type != MessageType.Thread)
            {
                if (parent.Parent == null || parent.Parent.Type != MessageType.Thread)
                {
                    return(MessageErrors.CannotCreateSubReply);
                }
            }

            Message newMessage = new Message()
            {
                Author    = account,
                Content   = Messages.Utility.SanitizeContent(message.Content),
                Created   = DateTimeOffset.Now.ToUnixTimeMilliseconds(),
                Type      = MessageType.Reply,
                Parent    = parent,
                Title     = null,
                Processed = false,
                Pinned    = false
            };

            _unitOfWork.Message.Add(newMessage);

            _unitOfWork.SaveChanges();

            return(MessageErrors.NoError);
        }