public async Task TestNoResourcesAreFoundShouldReturnEmptyBundle()
        {
            var interactor = new SearchResourcesInteractor(new InMemoryFhirRepository(), new InMemorySearchRepository());
            var result     = await interactor.ExecuteAsync(new SearchResourcesRequest { ResourceType = "Patient" });

            Assert.AreEqual(0, ((Bundle)result.Resource).Entry.Count);
        }
        static DependencyResolver()
        {
            var iotaRepository = new CachedIotaRestRepository(
                new FallbackIotaClient(new List <string> {
                "https://nodes.devnet.thetangle.org:443"
            }, 5000),
                new PoWSrvService());

            var channelFactory      = new MamChannelFactory(CurlMamFactory.Default, CurlMerkleTreeFactory.Default, iotaRepository);
            var subscriptionFactory = new MamChannelSubscriptionFactory(iotaRepository, CurlMamParser.Default, CurlMask.Default);

            var encryption      = new RijndaelEncryption("somenicekey", "somenicesalt");
            var resourceTracker = new SqlLiteResourceTracker(channelFactory, subscriptionFactory, encryption);

            var fhirRepository = new IotaFhirRepository(
                iotaRepository,
                new FhirJsonTryteSerializer(),
                resourceTracker,
                new SqlLiteDeterministicSeedManager(
                    resourceTracker,
                    new IssSigningHelper(new Curl(), new Curl(), new Curl()),
                    new AddressGenerator(),
                    iotaRepository,
                    encryption));

            var fhirParser       = new FhirJsonParser();
            var searchRepository = new SqlLiteSearchRepository(fhirParser);

            CreateResourceInteractor   = new CreateResourceInteractor(fhirRepository, fhirParser, searchRepository);
            ReadResourceInteractor     = new ReadResourceInteractor(fhirRepository, searchRepository);
            ValidateResourceInteractor = new ValidateResourceInteractor(fhirRepository, fhirParser);
            SearchResourcesInteractor  = new SearchResourcesInteractor(fhirRepository, searchRepository);
            ResourceTracker            = resourceTracker;
        }
        public async Task TestResourceHasReferenceShouldReturnResource()
        {
            var searchRepository = new InMemorySearchRepository();
            await searchRepository.AddResourceAsync(FhirResourceProvider.Observation);

            await searchRepository.AddResourceAsync(new Observation { Id = "4354363", Subject = new ResourceReference("did:iota:765658556") });

            var interactor = new SearchResourcesInteractor(new InMemoryFhirRepository(), searchRepository);
            var result     = await interactor.ExecuteAsync(new SearchResourcesRequest { ResourceType = "Observation", Parameters = "_reference=did:iota:1234567890" });

            Assert.AreEqual(1, ((Bundle)result.Resource).Entry.Count);
        }
        /// <inheritdoc />
        protected override void Load(ContainerBuilder builder)
        {
            var connectionSupplier = new DefaultDbConnectionSupplier();
            var iotaRepository     = new CachedIotaRestRepository(
                new FallbackIotaClient(new List <string> {
                "https://nodes.devnet.thetangle.org:443"
            }, 5000),
                new PoWSrvService(),
                null,
                connectionSupplier,
                $"{DependencyResolver.LocalStoragePath}\\iotacache.sqlite");

            var channelFactory      = new MamChannelFactory(CurlMamFactory.Default, CurlMerkleTreeFactory.Default, iotaRepository);
            var subscriptionFactory = new MamChannelSubscriptionFactory(iotaRepository, CurlMamParser.Default, CurlMask.Default);

            var encryption      = new RijndaelEncryption("somenicekey", "somenicesalt");
            var resourceTracker = new SqlLiteResourceTracker(
                channelFactory,
                subscriptionFactory,
                encryption,
                connectionSupplier,
                $"{DependencyResolver.LocalStoragePath}\\iotafhir.sqlite");

            var seedManager = new SqlLiteDeterministicSeedManager(
                resourceTracker,
                new IssSigningHelper(new Curl(), new Curl(), new Curl()),
                new AddressGenerator(),
                iotaRepository,
                encryption,
                connectionSupplier,
                $"{DependencyResolver.LocalStoragePath}\\iotafhir.sqlite");

            var fhirRepository   = new IotaFhirRepository(iotaRepository, new FhirJsonTryteSerializer(), resourceTracker, seedManager);
            var fhirParser       = new FhirJsonParser();
            var searchRepository = new SqlLiteSearchRepository(fhirParser, connectionSupplier, $"{DependencyResolver.LocalStoragePath}\\resources.sqlite");

            var createInteractor     = new CreateResourceInteractor(fhirRepository, fhirParser, searchRepository);
            var readInteractor       = new ReadResourceInteractor(fhirRepository, searchRepository);
            var validationInteractor = new ValidateResourceInteractor(fhirRepository, fhirParser);
            var searchInteractor     = new SearchResourcesInteractor(fhirRepository, searchRepository);

            var resourceImporter = new ResourceImporter(searchRepository, fhirRepository, seedManager);

            builder.RegisterInstance(createInteractor);
            builder.RegisterInstance(readInteractor);
            builder.RegisterInstance(validationInteractor);
            builder.RegisterInstance(searchInteractor);
            builder.RegisterInstance(resourceImporter);
            builder.RegisterInstance(seedManager).As <ISeedManager>();
            builder.RegisterInstance(subscriptionFactory);
        }
示例#5
0
        private void InjectDependencies(IServiceCollection services)
        {
            var iotaRepository = new CachedIotaRestRepository(
                new FallbackIotaClient(new List <string> {
                "https://nodes.devnet.thetangle.org:443"
            }, 5000),
                new PoWService(new CpuPearlDiver()));

            var channelFactory      = new MamChannelFactory(CurlMamFactory.Default, CurlMerkleTreeFactory.Default, iotaRepository);
            var subscriptionFactory = new MamChannelSubscriptionFactory(iotaRepository, CurlMamParser.Default, CurlMask.Default);

            var encryption      = new RijndaelEncryption("somenicekey", "somenicesalt");
            var resourceTracker = new SqlLiteResourceTracker(channelFactory, subscriptionFactory, encryption);

            var seedManager = new SqlLiteDeterministicSeedManager(
                resourceTracker,
                new IssSigningHelper(new Curl(), new Curl(), new Curl()),
                new AddressGenerator(),
                iotaRepository,
                encryption);

            var fhirRepository   = new IotaFhirRepository(iotaRepository, new FhirJsonTryteSerializer(), resourceTracker, seedManager);
            var fhirParser       = new FhirJsonParser();
            var searchRepository = new SqlLiteSearchRepository(fhirParser);

            var createInteractor       = new CreateResourceInteractor(fhirRepository, fhirParser, searchRepository);
            var readInteractor         = new ReadResourceInteractor(fhirRepository, searchRepository);
            var readVersionInteractor  = new ReadResourceVersionInteractor(fhirRepository);
            var readHistoryInteractor  = new ReadResourceHistoryInteractor(fhirRepository);
            var capabilitiesInteractor = new GetCapabilitiesInteractor(fhirRepository, new AppConfigSystemInformation(this.Configuration));
            var validationInteractor   = new ValidateResourceInteractor(fhirRepository, fhirParser);
            var searchInteractor       = new SearchResourcesInteractor(fhirRepository, searchRepository);
            var deleteInteractor       = new DeleteResourceInteractor(fhirRepository, searchRepository);

            var resourceImporter = new ResourceImporter(searchRepository, fhirRepository, seedManager);

            services.AddScoped(provider => createInteractor);
            services.AddScoped(provider => readInteractor);
            services.AddScoped(provider => capabilitiesInteractor);
            services.AddScoped(provider => validationInteractor);
            services.AddScoped(provider => searchInteractor);
            services.AddScoped(provider => resourceImporter);
            services.AddScoped(provider => readVersionInteractor);
            services.AddScoped(provider => readHistoryInteractor);
            services.AddScoped(provider => deleteInteractor);

            services.AddScoped <ISeedManager>(provider => seedManager);
            services.AddSingleton <IMemoryCache>(new Microsoft.Extensions.Caching.Memory.MemoryCache(new MemoryCacheOptions()));
        }
        public async Task TestSearchByTagReturnsRightResource()
        {
            var searchRepository = new InMemorySearchRepository();
            await searchRepository.AddResourceAsync(FhirResourceProvider.Observation);

            await searchRepository.AddResourceAsync(new Observation { Id = "4354363", Subject = new ResourceReference("did:iota:765658556"), Meta = new Meta {
                                                                          Tag = new List <Coding> {
                                                                              new Coding("Test", "Unit")
                                                                          }
                                                                      } });

            var interactor = new SearchResourcesInteractor(new InMemoryFhirRepository(), searchRepository);
            var result     = await interactor.ExecuteAsync(new SearchResourcesRequest { ResourceType = "Observation", Parameters = "_tag=Test|" });

            Assert.AreEqual(1, ((Bundle)result.Resource).Entry.Count);
            Assert.AreEqual("4354363", ((Bundle)result.Resource).Entry.First().Resource.Id);
        }
示例#7
0
 public FhirController(
     CreateResourceInteractor createResourceInteractor,
     ReadResourceInteractor readResourceInteractor,
     GetCapabilitiesInteractor capabilitiesInteractor,
     ValidateResourceInteractor validateResourceInteractor,
     SearchResourcesInteractor searchResourcesInteractor,
     ReadResourceVersionInteractor readResourceVersionInteractor,
     ReadResourceHistoryInteractor readResourceHistoryInteractor,
     DeleteResourceInteractor deleteResourceInteractor)
 {
     this.CreateResourceInteractor      = createResourceInteractor;
     this.ReadResourceInteractor        = readResourceInteractor;
     this.CapabilitiesInteractor        = capabilitiesInteractor;
     this.ValidateResourceInteractor    = validateResourceInteractor;
     this.SearchResourcesInteractor     = searchResourcesInteractor;
     this.ReadResourceVersionInteractor = readResourceVersionInteractor;
     this.ReadResourceHistoryInteractor = readResourceHistoryInteractor;
     this.DeleteResourceInteractor      = deleteResourceInteractor;
 }
 public GlucoseController(SearchResourcesInteractor searchResourcesInteractor, ReadResourceHistoryInteractor readResourceHistoryInteractor)
 {
     this.SearchResourcesInteractor     = searchResourcesInteractor;
     this.ReadResourceHistoryInteractor = readResourceHistoryInteractor;
     this.Cache = new SqlLiteGlucoseCache();
 }
        /// <inheritdoc />
        protected override void Load(ContainerBuilder builder)
        {
            var iotaRepository = new RestIotaRepository(
                new FallbackIotaClient(new List <string> {
                "https://nodes.devnet.thetangle.org:443"
            }, 5000),
                new PoWService(new CpuPearlDiver()));

            var channelFactory      = new MamChannelFactory(CurlMamFactory.Default, CurlMerkleTreeFactory.Default, iotaRepository);
            var subscriptionFactory = new MamChannelSubscriptionFactory(iotaRepository, CurlMamParser.Default, CurlMask.Default);

            var encryption      = new RijndaelEncryption("somenicekey", "somenicesalt");
            var resourceTracker = new ResourceTracker(
                channelFactory,
                subscriptionFactory,
                encryption,
                $"{DependencyResolver.LocalStoragePath}\\resources.sqlite");

            var seedManager = new SeedManager(
                resourceTracker,
                new IssSigningHelper(new Curl(), new Curl(), new Curl()),
                new AddressGenerator(),
                iotaRepository,
                encryption,
                $"{DependencyResolver.LocalStoragePath}\\seedmanager.sqlite");

            var fhirRepository   = new IotaFhirRepository(iotaRepository, new FhirJsonTryteSerializer(), resourceTracker, seedManager);
            var fhirParser       = new FhirJsonParser();
            var searchRepository = new SearchRepository($"{DependencyResolver.LocalStoragePath}\\search.sqlite");

            var createInteractor     = new CreateResourceInteractor(fhirRepository, fhirParser, searchRepository);
            var readInteractor       = new ReadResourceInteractor(fhirRepository, searchRepository);
            var validationInteractor = new ValidateResourceInteractor(fhirRepository, fhirParser);
            var searchInteractor     = new SearchResourcesInteractor(fhirRepository, searchRepository);

            var resourceImporter = new ResourceImporter(searchRepository, fhirRepository, seedManager);

            builder.RegisterInstance(searchRepository).As <ISearchRepository>();
            builder.RegisterInstance(resourceTracker).As <IResourceTracker>();

            builder.RegisterInstance(createInteractor);
            builder.RegisterInstance(readInteractor);
            builder.RegisterInstance(validationInteractor);
            builder.RegisterInstance(searchInteractor);
            builder.RegisterInstance(resourceImporter);
            builder.RegisterInstance(seedManager).As <ISeedManager>();
            builder.RegisterInstance(subscriptionFactory);
            builder.RegisterInstance(fhirRepository).As <IFhirRepository>();
            builder.RegisterInstance(new AndroidLogout()).As <ILogout>();

            var backgroundWorker = new BackgroundWorkerService();

            var glucoseService = new FhirGlucoseService(
                new CreateResourceInteractor(fhirRepository, fhirParser, searchRepository),
                new UpdateResourceInteractor(fhirRepository, fhirParser),
                new ReadResourceInteractor(fhirRepository, searchRepository),
                searchRepository);
            var glucoseRepository = new DexcomGlucoseManagementRepository(new RestClient("https://sandbox-api.dexcom.com"));

            //backgoundWorker.RegisterTaskWorker(new ContinuousGlucoseTaskWorker(glucoseService, glucoseRepository));
            backgroundWorker.RegisterTaskWorker(new AggregateGlucoseTaskWorker(glucoseService, glucoseRepository));
        }