public async Task <IActionResult> Search([FromQuery] WorkflowTransitionFunctionSearchRequest requestArgs)
        {
            return(await FunctionWrapper.ExecuteFunction(this, async() =>
            {
                if (string.IsNullOrEmpty(requestArgs.TransitionId))
                {
                    throw new ApplicationException("Search parameters missing.");
                }

                return await _workflowTransitionFunctionRepository.Search(requestArgs);
            }));
        }
        public async Task <IEnumerable <WorkflowTransitionFunction> > Search(WorkflowTransitionFunctionSearchRequest requestArgs)
        {
            if (string.IsNullOrEmpty(requestArgs.TransitionId))
            {
                throw new ApplicationException("Required fields not supplied.");
            }

            var filter = Builders <WorkflowTransitionFunction> .Filter.Eq("TransitionId", new ObjectId(requestArgs.TransitionId));

            try
            {
                var transitionFunctions = await _context.WorkflowTransitionFunctions.Find(filter).ToListAsync();

                // Hydrate Function for all transition functions
                Dictionary <string, WorkflowFunction> functionCache = new Dictionary <string, WorkflowFunction>();
                foreach (var transFunction in transitionFunctions)
                {
                    string funcId = transFunction.FunctionId.ToString();

                    if (!functionCache.ContainsKey(funcId))
                    {
                        transFunction.Function = await _workflowFunctionRepository.Get(transFunction.FunctionId);
                    }
                    else
                    {
                        transFunction.Function = functionCache[funcId];
                    }
                }

                return(transitionFunctions);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }