public Task <IPagedResults <IAssetRegisterVersion> > Search(IPagedQuery searchRequest, CancellationToken cancellationToken)
        {
            using (var context = new AssetRegisterContext(_databaseUrl))
            {
                IQueryable <AssetRegisterVersionEntity> queryable = context.AssetRegisterVersions;

                queryable = queryable.OrderByDescending(o => o.Id)
                            .Skip((searchRequest.Page.Value - 1) * searchRequest.PageSize.Value)
                            .Take(searchRequest.PageSize.Value);

                IEnumerable <AssetRegisterVersionEntity> results = queryable.ToList();

                int totalCount = context.AssetRegisterVersions.Select(s => s.Id).Count();
                IPagedResults <IAssetRegisterVersion> pagedResults = new PagedResults <IAssetRegisterVersion>
                {
                    Results = results.Select(s => new AssetRegisterVersion
                    {
                        Id = s.Id,
                        ModifiedDateTime = s.ModifiedDateTime
                    } as IAssetRegisterVersion).ToList(),
                    TotalCount    = totalCount,
                    NumberOfPages = (int)Math.Ceiling(totalCount / (decimal)searchRequest.PageSize.Value)
                };
                return(Task.FromResult(pagedResults));
            }
        }
        public async Task <IAssetRegisterVersion> CreateAsync(IAssetRegisterVersion assetRegisterVersion, CancellationToken cancellationToken)
        {
            AssetRegisterVersionEntity assetRegisterVersionEntity = new AssetRegisterVersionEntity(assetRegisterVersion);

            Console.WriteLine($"{DateTime.UtcNow.TimeOfDay.ToString("g")}: Start Associate Entities with Asset Register Version");

            assetRegisterVersionEntity.Assets = assetRegisterVersionEntity.Assets?.Select(s =>
            {
                s.AssetRegisterVersion = assetRegisterVersionEntity;
                return(s);
            }).ToList();

            Console.WriteLine($"{DateTime.UtcNow.TimeOfDay.ToString("g")}: Finish Associate Entities with Asset Register Version");

            using (var context = new AssetRegisterContext(_databaseUrl))
            {
                Console.WriteLine($"{DateTime.UtcNow.TimeOfDay.ToString("g")}: Start Add async");
                await context.AssetRegisterVersions.AddAsync(assetRegisterVersionEntity).ConfigureAwait(false);

                Console.WriteLine($"{DateTime.UtcNow.TimeOfDay.ToString("g")}: Finish Add async");
                Console.WriteLine($"{DateTime.UtcNow.TimeOfDay.ToString("g")}: Start Save Changes async");
                await context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

                Console.WriteLine($"{DateTime.UtcNow.TimeOfDay.ToString("g")}: Finish Save Changes async");
                Console.WriteLine($"{DateTime.UtcNow.TimeOfDay.ToString("g")}: Start Marshall Data");
                IAssetRegisterVersion result = new AssetRegisterVersion
                {
                    Id = assetRegisterVersionEntity.Id,
                    ModifiedDateTime = assetRegisterVersionEntity.ModifiedDateTime,
                    Assets           = assetRegisterVersionEntity.Assets?.Select(s => new Asset(s) as IAsset).ToList()
                };
                Console.WriteLine($"{DateTime.UtcNow.TimeOfDay.ToString("g")}: Finish Marshall Data");
                return(result);
            }
        }
        public Task <IAssetAggregation> Aggregate(IAssetSearchQuery searchRequest, CancellationToken cancellationToken)
        {
            using (var context = new AssetRegisterContext(_databaseUrl))
            {
                var filteringCriteria = GenerateFilteringCriteria(context, searchRequest);

                var aggregatedData = filteringCriteria.Select(s => new
                {
                    AssetValue   = s.AgencyFairValue,
                    MoneyPaidOut = s.AgencyEquityLoan,
                    SchemeId     = s.SchemeId,
                });

                decimal?uniqueCount  = aggregatedData?.Select(w => w.SchemeId).Distinct().Count();
                decimal?moneyPaidOut = aggregatedData?.Select(w => w.MoneyPaidOut).Sum(s => s);
                decimal?assetValue   = aggregatedData?.Select(w => w.AssetValue).Sum(s => s);

                IAssetAggregation assetAggregates = new AssetAggregation
                {
                    UniqueRecords        = uniqueCount,
                    AssetValue           = assetValue,
                    MoneyPaidOut         = moneyPaidOut,
                    MovementInAssetValue = assetValue - moneyPaidOut
                };
                return(Task.FromResult(assetAggregates));
            }
        }
Exemplo n.º 4
0
 public Task <IAuthenticationToken> ReadAsync(string token, CancellationToken cancellationToken)
 {
     using (var context = new AssetRegisterContext(_databaseUrl))
     {
         IAuthenticationToken foundToken = context.AuthenticationTokens.FirstOrDefault(t => t.Token == token);
         return(Task.FromResult(foundToken));
     }
 }
Exemplo n.º 5
0
 public Task DeleteAsync(string token, CancellationToken cancellationToken)
 {
     using (var context = new AssetRegisterContext(_databaseUrl))
     {
         AuthenticationTokenEntity foundToken = context.AuthenticationTokens.First(t => t.Token == token);
         context.AuthenticationTokens.Remove(foundToken);
         return(Task.FromResult(context.SaveChanges()));
     }
 }
        public Task <IAsset> ReadAsync(int index)
        {
            using (var context = new AssetRegisterContext(_databaseUrl))
            {
                context.ChangeTracker.AutoDetectChangesEnabled = false;
                IAsset entity = context.Assets.Find(index);

                return(Task.FromResult(entity));
            }
        }
Exemplo n.º 7
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors();
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
            {
                var secret = Configuration["HmacSecret"];
                var key    = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    IssuerSigningKey         = key,
                    RequireExpirationTime    = true,
                    ValidateIssuerSigningKey = true,
                    ValidateIssuer           = false,
                    ValidateLifetime         = true,
                    ValidateAudience         = false
                };
            });
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddSingleton <IApiVersionDescriptionProvider, DefaultApiVersionDescriptionProvider>();

            services.AddMvc(options =>
            {
                options.RespectBrowserAcceptHeader = true;
                options.OutputFormatters.Add(new CsvOutputFormatter(GetCsvOptions()));
                options.FormatterMappings.SetMediaTypeMappingForFormat("csv", MediaTypeHeaderValue.Parse("text/csv"));

                var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            }).AddCsvSerializerFormatters(GetCsvOptions());

            var assetRegister = new AssetRegister();

            assetRegister.ExportDependencies((type, provider) => services.AddTransient(type, _ => provider()));

            assetRegister.ExportTypeDependencies((type, provider) => services.AddTransient(type, provider));

            assetRegister.ExportSingletonDependencies((type, provider) => services.AddSingleton(type, _ => provider()));

            assetRegister.ExportSingletonTypeDependencies((type, provider) => services.AddSingleton(type, provider));

            services.ConfigureDocumentation(_apiName);


            services
            .AddEntityFrameworkNpgsql()
            .AddDbContext <AssetRegisterContext>();

            AssetRegisterContext assetRegisterContext =
                services.BuildServiceProvider().GetService <AssetRegisterContext>();

            assetRegisterContext.Database.Migrate();

            services.AddHostedService <BackgroundProcessor>();
        }
        public EFAuthenticationTokenGatewayTests()
        {
            var databaseUrl = Environment.GetEnvironmentVariable("DATABASE_URL");
            var gateway     = new EFAuthenticationTokenGateway(databaseUrl);

            _classUnderTest = gateway;

            var assetRegisterContext = new AssetRegisterContext(databaseUrl);

            assetRegisterContext.Database.Migrate();
        }
Exemplo n.º 9
0
        public GetAssetDevelopersGatewayTests()
        {
            var databaseUrl  = Environment.GetEnvironmentVariable("DATABASE_URL");
            var assetGateway = new EFAssetGateway(databaseUrl);

            _gateway        = assetGateway;
            _classUnderTest = assetGateway;

            var assetRegisterContext = new AssetRegisterContext(databaseUrl);

            assetRegisterContext.Database.Migrate();
        }
        public Task <IList <AssetRegion> > ListRegionsAsync(CancellationToken cancellationToken)
        {
            using (var context = new AssetRegisterContext(_databaseUrl))
            {
                IList <AssetRegion> results = context.Assets.Select(s => new AssetRegion
                {
                    Name = s.ImsOldRegion
                }).Distinct().ToList();

                return(Task.FromResult(results));
            }
        }
        public Task <IList <AssetDeveloper> > ListDevelopersAsync(CancellationToken cancellationToken)
        {
            using (var context = new AssetRegisterContext(_databaseUrl))
            {
                IList <AssetDeveloper> results = context.Assets.Select(s => new AssetDeveloper
                {
                    Name = s.DevelopingRslName
                }).Distinct().ToList();

                return(Task.FromResult(results));
            }
        }
Exemplo n.º 12
0
        public void Setup()
        {
            var databaseUrl  = Environment.GetEnvironmentVariable("DATABASE_URL");
            var assetGateway = new EFAssetRegisterVersionGateway(databaseUrl);

            _classUnderTest = assetGateway;
            _assetRegisterVersionCreator = assetGateway;

            var assetRegisterContext = new AssetRegisterContext(databaseUrl);

            assetRegisterContext.Database.Migrate();
        }
Exemplo n.º 13
0
        public Task <IAuthenticationToken> CreateAsync(IAuthenticationToken token, CancellationToken cancellationToken)
        {
            var tokenEntity = new AuthenticationTokenEntity(token);

            using (var context = new AssetRegisterContext(_databaseUrl))
            {
                context.Add(tokenEntity);
                context.SaveChanges();
                token.Id = tokenEntity.Id;
                IAuthenticationToken foundAsset = context.AuthenticationTokens.Find(tokenEntity.Id);
                return(Task.FromResult(foundAsset));
            }
        }
        public Task <IAsset> CreateAsync(IAsset entity)
        {
            var assetEntity = new AssetEntity(entity);

            using (var context = new AssetRegisterContext(_databaseUrl))
            {
                context.Add(assetEntity);
                context.SaveChanges();
                entity.Id = assetEntity.Id;
                IAsset foundAsset = context.Assets.Find(assetEntity.Id);
                return(Task.FromResult(foundAsset));
            }
        }
        public void Setup()
        {
            Environment.SetEnvironmentVariable("GOV_NOTIFY_URL", GovNotifyHost);
            Environment.SetEnvironmentVariable("GOV_NOTIFY_API_KEY", GovNotifyApiKey);

            _govNotifySimulator = new FluentSimulator(GovNotifyHost);
            _govNotifySimulator.Start();
            _govNotifySimulator.Post("/v2/notifications/email").Responds("{}");

            var assetRegister = new AssetRegister();
            var importUseCase = assetRegister.Get <IImportAssetsUseCase>();
            var textSplitter  = assetRegister.Get <ITextSplitter>();
            var getAssetRegisterVersionUseCase = assetRegister.Get <IGetAssetRegisterVersionsUseCase>();
            var assetRegisterUploadNotifier    = assetRegister.Get <IAssetRegisterUploadProcessedNotifier>();
            var backgroundProcessor            = assetRegister.Get <IBackgroundProcessor>();

            _assetRegisterContext = assetRegister.Get <AssetRegisterContext>();
            _classUnderTest       = new AssetRegisterVersionController(getAssetRegisterVersionUseCase, importUseCase, textSplitter, assetRegisterUploadNotifier, backgroundProcessor);
        }
        public Task <IPagedResults <IAsset> > Search(IAssetPagedSearchQuery searchRequest, CancellationToken cancellationToken)
        {
            using (var context = new AssetRegisterContext(_databaseUrl))
            {
                var queryable = GenerateFilteringCriteria(context, searchRequest);

                queryable = queryable.Skip((searchRequest.Page.Value - 1) * searchRequest.PageSize.Value)
                            .Take(searchRequest.PageSize.Value);

                IEnumerable <IAsset> results = queryable.ToList();

                int totalCount = GenerateFilteringCriteria(context, searchRequest).Select(s => s.Id).Count();
                IPagedResults <IAsset> pagedResults = new PagedResults <IAsset>
                {
                    Results       = results.ToList(),
                    TotalCount    = totalCount,
                    NumberOfPages = (int)Math.Ceiling(totalCount / (decimal)searchRequest.PageSize.Value)
                };

                return(Task.FromResult(pagedResults));
            }
        }
        private IQueryable <AssetEntity> GenerateFilteringCriteria(AssetRegisterContext context, IAssetSearchQuery searchRequest)
        {
            IQueryable <AssetEntity> queryable = context.Assets;

            if (!searchRequest.AssetRegisterVersionId.HasValue)
            {
                throw new ArgumentNullException("AssetRegisterVersionId is null");
            }

            queryable = queryable.Where(w => w.AssetRegisterVersionId.Equals(searchRequest.AssetRegisterVersionId));

            if (!string.IsNullOrEmpty(searchRequest.Address) && !string.IsNullOrWhiteSpace(searchRequest.Address))
            {
                queryable = queryable.Where(w =>
                                            EF.Functions.Like(w.Address.ToLower(), $"%{searchRequest.Address}%".ToLower()));
            }

            if (!string.IsNullOrEmpty(searchRequest.Region) && !string.IsNullOrWhiteSpace(searchRequest.Region))
            {
                queryable = queryable.Where(w => EF.Functions.Like(w.ImsOldRegion.ToLower(), $"%{searchRequest.Region}%".ToLower()));
            }

            if (!string.IsNullOrEmpty(searchRequest.Developer) && !string.IsNullOrWhiteSpace(searchRequest.Developer))
            {
                queryable = queryable.Where(w => EF.Functions.Like(w.DevelopingRslName.ToLower(), $"%{searchRequest.Developer}%".ToLower()));
            }

            if (searchRequest.SchemeId.HasValue && searchRequest?.SchemeId.Value > 0)
            {
                queryable = queryable.Where(w => w.SchemeId.HasValue && w.SchemeId == searchRequest.SchemeId.Value);
            }

            queryable = queryable.OrderByDescending(w => w.SchemeId);

            return(queryable);
        }