Ejemplo n.º 1
0
        public Task WithingsRunDeviceNotificationIngestion(
            [ActivityTrigger] IDurableActivityContext context,
            CancellationToken cancellationToken)
        {
            return(exceptionFilter.FilterExceptions(async() =>
            {
                var message = context.GetInput <StartNotificationIngestionMessage>();
                var userId = message.UserId;
                var startDate = DateTimeOffset.FromUnixTimeSeconds(message.StartDateEpoch);
                var endDate = DateTimeOffset.FromUnixTimeSeconds(message.EndDateEpoch);

                var consent = await consentStore.FetchConsent(userId, cancellationToken);
                consent = consent.Verify(userId);

                var measurementsTask = withingsClient.FetchMeasurements(userId, startDate, endDate, cancellationToken);
                var devicesTask = withingsClient.FetchDevices(userId, cancellationToken);

                var measurements = await measurementsTask;
                var devices = await devicesTask;

                var fhirDevices = converter.Convert(devices, consent.Devices.Select(d => d.Value).ToArray()).ToArray();
                var fhirObservations = converter.Convert(consent.FhirId, measurements, fhirDevices).ToArray();

                await fhirClient.CreateObservations(userId, fhirObservations, cancellationToken);

                await SendNotifications(
                    consent,
                    messages: fhirObservations
                    .Select(observation => observation.Device)
                    .Distinct()
                    .Select(device => $"New data is available for {device.Display}"),
                    silent: true,
                    cancellationToken);
            }));
        }
        public async Task <Ref[]> FetchDevices(string userId, CancellationToken cancellationToken)
        {
            var withingsDevices = await client.FetchDevices(userId, cancellationToken);

            return(converter.Convert(withingsDevices, null).ToArray());
        }