private DeviceDataMetadataPipelineMapPayload BuildPayload(DeviceDataPayload incomingPayload)
        {
            var patient = PatientRepository.Instance.GetPatientByDeviceId(incomingPayload.DeviceId);
            var map     = PipelineMapRepository.Instance.GetPipelineMapByPatientId(patient.Id);

            var outgoingPayload = new DeviceDataMetadataPipelineMapPayload
            {
                Data      = incomingPayload.Data,
                DataType  = incomingPayload.DataType,
                DeviceId  = incomingPayload.DeviceId,
                Map       = map,
                PatientId = patient.Id,
                StudyId   = patient.StudyId
            };

            return(outgoingPayload);
        }
        public IActionResult Post([FromBody] DeviceDataMetadataPipelineMapPayload payload)
        {
            var data = payload.Data;

            var routes = payload.Map.Routes;

            List <Func <object, object> > pipeline = new List <Func <object, object> >();

            foreach (var route in routes)
            {
                var path = route.Path;

                if (_pipelineRoutes.ContainsKey(path))
                {
                    var f = _pipelineRoutes[path];
                    pipeline.Add(f);
                }
                else
                {
                    var f = BuildRouteRequestFunction(route);
                    pipeline.Add(f);
                }
            }

            foreach (Func <object, object> pipe in pipeline)
            {
                var result = pipe.Invoke(data);
                if (result is BadRequestObjectResult)
                {
                    Console.WriteLine((result as BadRequestObjectResult).Value);
                    continue;
                }

                data = result;
            }

            return(Ok("pipeline completed"));
        }