Пример #1
0
        public async Task ProcessAsync(IEvent @event)
        {
            var providerUpdateEvent = (IntegrationProviderUpdateEvent)@event;

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

            StravaUpdateNotification stravaUpdate =
                ((JObject)providerUpdateEvent.Data.ProviderData)
                .ToObject <StravaUpdateNotification>();

            if (stravaUpdate.ObjectType != "activity")
            {
                _logger.LogWarning($"Unsupported Strava object type '{stravaUpdate.ObjectType}'.");
                return;
            }

            string accessToken = await _stravaAuthenticationService.GetAccessTokenAsync(stravaUpdate.OwnerId);

            if (accessToken is null)
            {
                _logger.LogWarning($"Failed to retrieve Strava access token for owner ID '{stravaUpdate.OwnerId}'.");
                return;
            }

            DetailedActivity activity = await _stravaClient.GetActivityAsync(stravaUpdate.ObjectId, accessToken);

            if (activity.Type != ActivityType.Ride)
            {
                _logger.LogWarning($"Unsupported Strava activity type '{activity.Type}'.");
                return;
            }

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

            IoMTModel ioMTModel = new BikeRide
            {
                Distance            = activity.Distance.Value,
                Duration            = activity.ElapsedTime.Value,
                DeviceId            = providerUpdateEvent.Data.UserId,
                PatientId           = providerUpdateEvent.Data.UserId,
                MeasurementDateTime = activity.StartDate.Value
            };

            await _iomtDataPublisher.PublishAsync(ioMTModel);
        }