public void StoreAnswer(Answer answer)
        {
            using var redis = RedisManager.GetClient();
            if (answer.Id == default(long))
            {
                answer.Id          = redis.As <Answer>().GetNextSequence();
                answer.CreatedDate = DateTime.UtcNow;
            }

            //Store as a 'Related Answer' to the parent Question
            redis.As <Question>().StoreRelatedEntities(answer.QuestionId, answer);
            //Populate user => answer index
            redis.AddItemToSet(UserAnswerIndex.Answers(answer.UserId), answer.Id.ToString());
        }
        public void VoteAnswerDown(long userId, long answerId)
        {
            //Populate Question => User and User => Question set indexes in a single transaction
            RedisManager.ExecTrans(trans =>
            {
                //Register downvote against answer and remove any upvotes if any
                trans.QueueCommand(redis => redis.AddItemToSet(AnswerUserIndex.DownVotes(answerId), userId.ToString()));
                trans.QueueCommand(redis => redis.RemoveItemFromSet(AnswerUserIndex.UpVotes(answerId), userId.ToString()));

                //Register downvote against user and remove any upvotes if any
                trans.QueueCommand(redis => redis.AddItemToSet(UserAnswerIndex.DownVotes(userId), answerId.ToString()));
                trans.QueueCommand(redis => redis.RemoveItemFromSet(UserAnswerIndex.UpVotes(userId), answerId.ToString()));
            });
        }
        /// <summary>
        /// Delete Answer by performing compensating actions to StoreAnswer() to keep the datastore in a consistent state
        /// </summary>
        /// <param name="questionId"></param>
        /// <param name="answerId"></param>
        public void DeleteAnswer(long questionId, long answerId)
        {
            using var redis = RedisManager.GetClient();
            var answer = redis.As <Question>().GetRelatedEntities <Answer>(questionId).FirstOrDefault(x => x.Id == answerId);

            if (answer == null)
            {
                return;
            }

            redis.As <Question>().DeleteRelatedEntity <Answer>(questionId, answerId);

            //remove user => answer index
            redis.RemoveItemFromSet(UserAnswerIndex.Answers(answer.UserId), answerId.ToString());
        }