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