private Either <MeasurementError, MeasurementDto> RunMeasurementIntegration(long installationExternalId) { bool isOutdated = _measurementCore.IsOutdatedByInstallationExternalId(installationExternalId); if (!isOutdated) { return(_measurementCore.GetByExternalId(installationExternalId)); } var command = MeasurementGetByInstallationExternalIdCommand.Create(installationExternalId); var integrationResult = _measurementIntegration.GetMeasurementByInstallationId(command); // TODO flatMap on Either if (integrationResult.IsLeft) { return(Either <MeasurementError, MeasurementDto> .Left <MeasurementError, MeasurementDto>(integrationResult.GetLeft)); } return(_measurementCore.Update(integrationResult.Get)); }
// TODO includeWind, indexType public static GetMeasurementByInstallationIdRequest FromCommand(MeasurementGetByInstallationExternalIdCommand command) => GetMeasurementByInstallationIdRequest.Create(command.InstallationExternalId);
public Either <MeasurementError, MeasurementCreateCommand> GetMeasurementByInstallationId(MeasurementGetByInstallationExternalIdCommand command) { return(TracedOperation.CallSync ( _logger, ClientOperationType.GetMeasurementByInstallationId, command, () => SynchronizeHttpCall // TODO move this to `TracedOperationClass` cos like that it kills a purpose of this class xD ( _airlyClient.GetMeasurementByInstallationId(AirMonitorToAirlyClientMeasurementAdapter.FromCommand(command)) ) ) .Map(AirlyClientToAirMonitorMeasurementAdapter.FromApi) .Peek(createCommand => createCommand.ExternalId = command.InstallationExternalId) .MapLeft(AirlyClientToAirMonitorMeasurementAdapter.ErrorFromResponse)); }