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()); }
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); }