55namespace EstateReportingAPI . BusinessLogic {
66 using Microsoft . EntityFrameworkCore ;
77 using Models ;
8+ using Shared . EntityFramework ;
89 using System . Linq ;
910 using System . Threading ;
1011 using Calendar = Models . Calendar ;
1112 using Merchant = Models . Merchant ;
1213 using Operator = Models . Operator ;
1314
1415 public class ReportingManager : IReportingManager {
15- #region Fields
16-
17- private readonly Shared . EntityFramework . IDbContextFactory < EstateManagementContext > ContextFactory ;
16+ private readonly IDbContextResolver < EstateManagementContext > Resolver ;
1817
18+
1919 private Guid Id ;
20-
21- #endregion
22-
20+ private static readonly String EstateManagementDatabaseName = "TransactionProcessorReadModel" ;
2321 #region Constructors
2422
25- public ReportingManager ( Shared . EntityFramework . IDbContextFactory < EstateManagementContext > contextFactory ) {
26- this . ContextFactory = contextFactory ;
23+ public ReportingManager ( IDbContextResolver < EstateManagementContext > resolver ) {
24+ this . Resolver = resolver ;
2725 }
2826
2927 #endregion
@@ -32,7 +30,8 @@ public ReportingManager(Shared.EntityFramework.IDbContextFactory<EstateManagemen
3230
3331 public async Task < List < UnsettledFee > > GetUnsettledFees ( Guid estateId , DateTime startDate , DateTime endDate , List < Int32 > merchantIds , List < Int32 > operatorIds , List < Int32 > productIds , GroupByOption ? groupByOption , CancellationToken cancellationToken ) {
3432
35- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
33+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
34+ await using EstateManagementContext context = resolvedContext . Context ;
3635
3736 var fees = ( from merchantSettlementFee in context . MerchantSettlementFees
3837 join transaction in context . Transactions
@@ -132,7 +131,8 @@ into grouped
132131 }
133132
134133 public async Task < List < Calendar > > GetCalendarComparisonDates ( Guid estateId , CancellationToken cancellationToken ) {
135- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
134+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
135+ await using EstateManagementContext context = resolvedContext . Context ;
136136
137137 DateTime startOfYear = new DateTime ( DateTime . Now . Year , 1 , 1 ) ;
138138
@@ -159,7 +159,8 @@ public async Task<List<Calendar>> GetCalendarComparisonDates(Guid estateId, Canc
159159 }
160160
161161 public async Task < List < Calendar > > GetCalendarDates ( Guid estateId , CancellationToken cancellationToken ) {
162- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
162+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
163+ await using EstateManagementContext context = resolvedContext . Context ;
163164
164165 List < TransactionProcessor . Database . Entities . Calendar > entities = context . Calendar . Where ( c => c . Date <= DateTime . Now . Date ) . ToList ( ) ;
165166
@@ -184,15 +185,17 @@ public async Task<List<Calendar>> GetCalendarDates(Guid estateId, CancellationTo
184185 }
185186
186187 public async Task < List < Int32 > > GetCalendarYears ( Guid estateId , CancellationToken cancellationToken ) {
187- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
188-
188+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
189+ await using EstateManagementContext context = resolvedContext . Context ;
190+
189191 List < Int32 > years = context . Calendar . Where ( c => c . Date <= DateTime . Now . Date ) . GroupBy ( c => c . Year ) . Select ( y => y . Key ) . ToList ( ) ;
190192
191193 return years ;
192194 }
193195
194196 public async Task < LastSettlement > GetLastSettlement ( Guid estateId , CancellationToken cancellationToken ) {
195- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
197+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
198+ await using EstateManagementContext context = resolvedContext . Context ;
196199
197200 DateTime settlementDate = await context . SettlementSummary . Where ( s => s . IsCompleted ) . OrderByDescending ( s => s . SettlementDate ) . Select ( s => s . SettlementDate ) . FirstOrDefaultAsync ( cancellationToken ) ;
198201
@@ -217,7 +220,8 @@ public async Task<LastSettlement> GetLastSettlement(Guid estateId, CancellationT
217220 }
218221
219222 public async Task < MerchantKpi > GetMerchantsTransactionKpis ( Guid estateId , CancellationToken cancellationToken ) {
220- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
223+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
224+ await using EstateManagementContext context = resolvedContext . Context ;
221225
222226 Int32 merchantsWithSaleInLastHour = ( from m in context . Merchants
223227 where m . LastSaleDate == DateTime . Now . Date
@@ -242,7 +246,8 @@ public async Task<MerchantKpi> GetMerchantsTransactionKpis(Guid estateId, Cancel
242246 }
243247
244248 public async Task < List < Merchant > > GetMerchantsByLastSale ( Guid estateId , DateTime startDateTime , DateTime endDateTime , CancellationToken cancellationToken ) {
245- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
249+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
250+ await using EstateManagementContext context = resolvedContext . Context ;
246251
247252 List < Merchant > response = new ( ) ;
248253
@@ -292,7 +297,8 @@ public async Task<List<Merchant>> GetMerchantsByLastSale(Guid estateId, DateTime
292297 }
293298
294299 public async Task < List < ResponseCode > > GetResponseCodes ( Guid estateId , CancellationToken cancellationToken ) {
295- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
300+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
301+ await using EstateManagementContext context = resolvedContext . Context ;
296302 List < ResponseCode > response = new List < ResponseCode > ( ) ;
297303
298304 List < ResponseCodes > responseCodes = await context . ResponseCodes . ToListAsync ( cancellationToken ) ;
@@ -306,7 +312,8 @@ public async Task<List<ResponseCode>> GetResponseCodes(Guid estateId, Cancellati
306312 }
307313
308314 public async Task < TodaysSales > GetTodaysFailedSales ( Guid estateId , DateTime comparisonDate , String responseCode , CancellationToken cancellationToken ) {
309- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
315+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
316+ await using EstateManagementContext context = resolvedContext . Context ;
310317
311318 List < decimal > todaysSales = await ( from t in context . TodayTransactions
312319 where t . IsAuthorised == false
@@ -377,7 +384,8 @@ private async Task<IQueryable<TransactionHistory>> GetSalesForDate(EstateManagem
377384 }
378385
379386 public async Task < TodaysSales > GetTodaysSales ( Guid estateId , Int32 merchantReportingId , Int32 operatorReportingId , DateTime comparisonDate , CancellationToken cancellationToken ) {
380- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
387+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
388+ await using EstateManagementContext context = resolvedContext . Context ;
381389
382390 IQueryable < TodayTransaction > todaysSales = await GetTodaysSales ( context , merchantReportingId , operatorReportingId , cancellationToken ) ;
383391 IQueryable < TransactionHistory > comparisonSales = await GetSalesForDate ( context , comparisonDate , merchantReportingId , operatorReportingId , cancellationToken ) ;
@@ -399,7 +407,8 @@ public async Task<TodaysSales> GetTodaysSales(Guid estateId, Int32 merchantRepor
399407 }
400408
401409 public async Task < List < TodaysSalesCountByHour > > GetTodaysSalesCountByHour ( Guid estateId , Int32 merchantReportingId , Int32 operatorReportingId , DateTime comparisonDate , CancellationToken cancellationToken ) {
402- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
410+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
411+ await using EstateManagementContext context = resolvedContext . Context ;
403412
404413 IQueryable < TodayTransaction > todaysSales = await GetTodaysSales ( context , merchantReportingId , operatorReportingId , cancellationToken ) ;
405414 IQueryable < TransactionHistory > comparisonSales = await GetSalesForDate ( context , comparisonDate , merchantReportingId , operatorReportingId , cancellationToken ) ;
@@ -435,7 +444,8 @@ on today.Hour equals comparison.Hour
435444 }
436445
437446 public async Task < List < TodaysSalesValueByHour > > GetTodaysSalesValueByHour ( Guid estateId , Int32 merchantReportingId , Int32 operatorReportingId , DateTime comparisonDate , CancellationToken cancellationToken ) {
438- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
447+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
448+ await using EstateManagementContext context = resolvedContext . Context ;
439449
440450 IQueryable < TodayTransaction > todaysSales = await GetTodaysSales ( context , merchantReportingId , operatorReportingId , cancellationToken ) ;
441451 IQueryable < TransactionHistory > comparisonSales = await GetSalesForDate ( context , comparisonDate , merchantReportingId , operatorReportingId , cancellationToken ) ;
@@ -520,7 +530,8 @@ join t in context.TodayTransactions on f.TransactionId equals t.TransactionId
520530 }
521531
522532 public async Task < TodaysSettlement > GetTodaysSettlement ( Guid estateId , Int32 merchantReportingId , Int32 operatorReportingId , DateTime comparisonDate , CancellationToken cancellationToken ) {
523- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
533+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
534+ await using EstateManagementContext context = resolvedContext . Context ;
524535
525536 IQueryable < MerchantSettlementFee > todaySettlementData = await GetTodaysSettlement ( context , merchantReportingId , operatorReportingId , cancellationToken ) ;
526537 IQueryable < MerchantSettlementFee > comparisonSettlementData = await GetSettlementDataForDate ( context , merchantReportingId , operatorReportingId , comparisonDate , cancellationToken ) ;
@@ -560,7 +571,8 @@ group f by f.IsSettled into grouped
560571 }
561572
562573 public async Task < List < TopBottomData > > GetTopBottomData ( Guid estateId , TopBottom direction , Int32 resultCount , Dimension dimension , CancellationToken cancellationToken ) {
563- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
574+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
575+ await using EstateManagementContext context = resolvedContext . Context ;
564576
565577 IQueryable < TodayTransaction > mainQuery = context . TodayTransactions
566578 . Where ( joined => joined . IsAuthorised == true
@@ -642,7 +654,8 @@ public async Task<List<TopBottomData>> GetTopBottomData(Guid estateId, TopBottom
642654 }
643655
644656 public async Task < TodaysSales > GetMerchantPerformance ( Guid estateId , DateTime comparisonDate , List < Int32 > merchantReportingIds , CancellationToken cancellationToken ) {
645- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
657+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
658+ await using EstateManagementContext context = resolvedContext . Context ;
646659
647660 // First we need to get a value of todays sales
648661 var todaysSalesQuery = ( from t in context . TodayTransactions
@@ -700,7 +713,8 @@ private Decimal SafeDivide(Decimal number, Int32 divisor)
700713
701714 public async Task < TodaysSales > GetProductPerformance ( Guid estateId , DateTime comparisonDate , List < Int32 > productReportingIds , CancellationToken cancellationToken )
702715 {
703- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
716+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
717+ await using EstateManagementContext context = resolvedContext . Context ;
704718
705719 // First we need to get a value of todays sales
706720 var todaysSalesQuery = ( from t in context . TodayTransactions
@@ -738,7 +752,8 @@ public async Task<TodaysSales> GetProductPerformance(Guid estateId, DateTime com
738752 }
739753
740754 public async Task < TodaysSales > GetOperatorPerformance ( Guid estateId , DateTime comparisonDate , List < Int32 > operatorReportingIds , CancellationToken cancellationToken ) {
741- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
755+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
756+ await using EstateManagementContext context = resolvedContext . Context ;
742757
743758 // First we need to get a value of todays sales
744759 var todaysSalesQuery = ( from t in context . TodayTransactions
@@ -777,7 +792,8 @@ public async Task<TodaysSales> GetOperatorPerformance(Guid estateId, DateTime co
777792
778793 public async Task < List < TransactionResult > > TransactionSearch ( Guid estateId , TransactionSearchRequest searchRequest , PagingRequest pagingRequest , SortingRequest sortingRequest , CancellationToken cancellationToken ) {
779794 // Base query before any filtering is added
780- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
795+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
796+ await using EstateManagementContext context = resolvedContext . Context ;
781797
782798 var mainQuery = ( from txn in context . Transactions
783799 join merchant in context . Merchants on txn . MerchantId equals merchant . MerchantId
@@ -875,7 +891,8 @@ join product in context.ContractProducts on txn.ContractProductId equals product
875891 }
876892
877893 public async Task < List < Merchant > > GetMerchants ( Guid estateId , CancellationToken cancellationToken ) {
878- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
894+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
895+ await using EstateManagementContext context = resolvedContext . Context ;
879896
880897 var merchants = context . Merchants
881898 . Select ( m => new
@@ -931,7 +948,8 @@ public async Task<List<Merchant>> GetMerchants(Guid estateId, CancellationToken
931948 }
932949
933950 public async Task < List < Operator > > GetOperators ( Guid estateId , CancellationToken cancellationToken ) {
934- EstateManagementContext ? context = await this . ContextFactory . GetContext ( estateId , ReportingManager . ConnectionStringIdentifier , cancellationToken ) ;
951+ using ResolvedDbContext < EstateManagementContext > ? resolvedContext = this . Resolver . Resolve ( EstateManagementDatabaseName , estateId . ToString ( ) ) ;
952+ await using EstateManagementContext context = resolvedContext . Context ;
935953
936954 List < Operator > operators = await ( from o in context . Operators
937955 select new Operator
0 commit comments