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); }