public async Task <IActionResult> Put(string id, [FromBody] WorkflowTransitionFunction item)
 {
     return(await FunctionWrapper.ExecuteFunction(this, async() =>
     {
         item.Id = new ObjectId(id);
         return await _workflowTransitionFunctionRepository.Update(item);
     }));
 }
        public async Task <WorkflowTransitionFunction> Add(WorkflowTransitionFunction item)
        {
            try
            {
                item = await Hydrate(item);

                await _context.WorkflowTransitionFunctions.InsertOneAsync(item);

                return(await Get(item.Id));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task <WorkflowTransitionFunction> Update(WorkflowTransitionFunction item)
        {
            var filter = Builders <WorkflowTransitionFunction> .Filter.Eq("Id", item.Id);

            try
            {
                item = await Hydrate(item);

                await _context.WorkflowTransitionFunctions.ReplaceOneAsync(filter, item);

                return(await Get(item.Id));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task <IActionResult> Post([FromBody] WorkflowTransitionFunctionPostRequest request)
        {
            return(await FunctionWrapper.ExecuteFunction(this, async() =>
            {
                if (request.TransitionId == ObjectId.Empty)
                {
                    throw new ApplicationException("TransitionId is required.");
                }

                if (request.FunctionId == ObjectId.Empty)
                {
                    throw new ApplicationException("FunctionId is required.");
                }

                var transFunction = new WorkflowTransitionFunction()
                {
                    TransitionId = request.TransitionId,
                    FunctionId = request.FunctionId,
                    FunctionArgs = request.FunctionArgs
                };
                return await _workflowTransitionFunctionRepository.Add(transFunction);
            }));
        }
        private async Task <WorkflowTransitionFunction> Hydrate(WorkflowTransitionFunction item)
        {
            try
            {
                if (item.FunctionId == ObjectId.Empty || item.TransitionId == ObjectId.Empty)
                {
                    throw new ApplicationException("Required fields missing.");
                }
                if (string.IsNullOrEmpty(item.FunctionArgs))
                {
                    throw new ApplicationException("Required fields missing.");
                }
                var func = await _workflowFunctionRepository.Get(item.FunctionId);

                item.Function = func ?? throw new ApplicationException("Cannot find function specified.");

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