Beispiel #1
0
        public async Task <ActionResult> TestFitbitUpdate([FromBody] FitbitUpdateNotification update, [FromQuery] string userId)
        {
            if (string.IsNullOrEmpty(userId))
            {
                return(BadRequest());
            }

            await _eventHandler.ProcessAsync(
                new IntegrationProviderUpdateEvent(
                    id : Guid.NewGuid().ToString(),
                    subject : update.SubscriptionId,
                    eventTime : DateTime.UtcNow,
                    dataVersion : EventConstants.EventDataVersion,
                    data : new IntegrationProviderEventData
            {
                OperationId = "test",
                SourceSystem = EventConstants.IntegrationsApi,
                SubjectSystem = EventConstants.MyHealth,
                Provider = Provider.Fitbit,
                ProviderData = JObject.FromObject(update),
                UserId = userId
            }));

            return(Ok());
        }
Beispiel #2
0
        public async Task ProcessAsync(IEvent @event)
        {
            var providerUpdateEvent = (IntegrationProviderUpdateEvent)@event;

            _logger.Information(nameof(FitbitProviderUpdateEventHandler), providerUpdateEvent.Properties);

            FitbitUpdateNotification fitbitUpdate =
                ((JObject)providerUpdateEvent.Data.ProviderData)
                .ToObject <FitbitUpdateNotification>();

            string accessToken = await _fitbitTokenService.GetAccessTokenAsync(providerUpdateEvent.Data.UserId);

            ResourceContainer resource = await _fitbitClient.GetResourceAsync(
                ownerType : fitbitUpdate.OwnerType,
                ownerId : fitbitUpdate.OwnerId,
                collectionType : fitbitUpdate.CollectionType,
                date : fitbitUpdate.Date,
                accessToken : accessToken);

            if (resource.Body is null)
            {
                _logger.LogWarning($"Data mapping not supported: {JsonConvert.SerializeObject(resource)}");
                return;
            }

            await _fhirClient.EnsurePatientDeviceAsync(providerUpdateEvent.Data.UserId);

            IoMTModel iomtModel = new BodyWeight
            {
                Weight = resource.Body.Weight,
                MeasurementDateTime = fitbitUpdate.Date,
                DeviceId            = providerUpdateEvent.Data.UserId,
                PatientId           = providerUpdateEvent.Data.UserId
            };

            await _iomtDataPublisher.PublishAsync(iomtModel);
        }