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