diff --git a/EstateReportingAPI.BusinessLogic/EstateReportingAPI.BusinessLogic.csproj b/EstateReportingAPI.BusinessLogic/EstateReportingAPI.BusinessLogic.csproj index b77b8a9..550ecfd 100644 --- a/EstateReportingAPI.BusinessLogic/EstateReportingAPI.BusinessLogic.csproj +++ b/EstateReportingAPI.BusinessLogic/EstateReportingAPI.BusinessLogic.csproj @@ -9,7 +9,8 @@ - + + diff --git a/EstateReportingAPI.BusinessLogic/ReportingManager.cs b/EstateReportingAPI.BusinessLogic/ReportingManager.cs index 5e723a7..6352e05 100644 --- a/EstateReportingAPI.BusinessLogic/ReportingManager.cs +++ b/EstateReportingAPI.BusinessLogic/ReportingManager.cs @@ -1,16 +1,19 @@ -using System.Linq.Expressions; -using EstateReportingAPI.BusinessLogic.Queries; +using EstateReportingAPI.BusinessLogic.Queries; using SimpleResults; +using System.Linq.Expressions; using TransactionProcessor.Database.Contexts; using TransactionProcessor.Database.Entities; using TransactionProcessor.Database.Entities.Summary; namespace EstateReportingAPI.BusinessLogic; +using Azure; using Microsoft.EntityFrameworkCore; using Models; using Shared.EntityFramework; +using Shared.Results; using System; +using System.ClientModel.Primitives; using System.Linq; using System.Threading; using Calendar = Models.Calendar; @@ -19,27 +22,27 @@ namespace EstateReportingAPI.BusinessLogic; public interface IReportingManager { #region Methods - Task> GetCalendarComparisonDates(CalendarQueries.GetComparisonDatesQuery request, CancellationToken cancellationToken); - Task> GetCalendarDates(CalendarQueries.GetAllDatesQuery request, CancellationToken cancellationToken); - Task> GetCalendarYears(CalendarQueries.GetYearsQuery request, CancellationToken cancellationToken); - Task> GetRecentMerchants(MerchantQueries.GetRecentMerchantsQuery request, CancellationToken cancellationToken); - Task> GetRecentContracts(ContractQueries.GetRecentContractsQuery request, CancellationToken cancellationToken); - Task> GetContracts(ContractQueries.GetContractsQuery request, CancellationToken cancellationToken); - Task GetContract(ContractQueries.GetContractQuery request, CancellationToken cancellationToken); - Task GetTodaysFailedSales(TransactionQueries.TodaysFailedSales request, CancellationToken cancellationToken); - Task GetTodaysSales(TransactionQueries.TodaysSalesQuery request, CancellationToken cancellationToken); - Task GetEstate(EstateQueries.GetEstateQuery request, CancellationToken cancellationToken); - Task> GetEstateOperators(EstateQueries.GetEstateOperatorsQuery request, CancellationToken cancellationToken); - Task GetMerchantsTransactionKpis(MerchantQueries.GetTransactionKpisQuery request, CancellationToken cancellationToken); - Task> GetOperators(OperatorQueries.GetOperatorsQuery request, CancellationToken cancellationToken); - Task> GetMerchants(MerchantQueries.GetMerchantsQuery request, CancellationToken cancellationToken); - Task GetMerchant(MerchantQueries.GetMerchantQuery request, CancellationToken cancellationToken); - Task> GetMerchantOperators(MerchantQueries.GetMerchantOperatorsQuery request, CancellationToken cancellationToken); - Task> GetMerchantContracts(MerchantQueries.GetMerchantContractsQuery request, CancellationToken cancellationToken); - Task> GetMerchantDevices(MerchantQueries.GetMerchantDevicesQuery request, CancellationToken cancellationToken); - Task GetOperator(OperatorQueries.GetOperatorQuery request, CancellationToken cancellationToken); - - Task GetTransactionDetailReport(TransactionQueries.TransactionDetailReportQuery request, + Task>> GetCalendarComparisonDates(CalendarQueries.GetComparisonDatesQuery request, CancellationToken cancellationToken); + Task>> GetCalendarDates(CalendarQueries.GetAllDatesQuery request, CancellationToken cancellationToken); + Task>> GetCalendarYears(CalendarQueries.GetYearsQuery request, CancellationToken cancellationToken); + Task>> GetRecentMerchants(MerchantQueries.GetRecentMerchantsQuery request, CancellationToken cancellationToken); + Task>> GetRecentContracts(ContractQueries.GetRecentContractsQuery request, CancellationToken cancellationToken); + Task>> GetContracts(ContractQueries.GetContractsQuery request, CancellationToken cancellationToken); + Task> GetContract(ContractQueries.GetContractQuery request, CancellationToken cancellationToken); + Task> GetTodaysFailedSales(TransactionQueries.TodaysFailedSales request, CancellationToken cancellationToken); + Task> GetTodaysSales(TransactionQueries.TodaysSalesQuery request, CancellationToken cancellationToken); + Task> GetEstate(EstateQueries.GetEstateQuery request, CancellationToken cancellationToken); + Task>> GetEstateOperators(EstateQueries.GetEstateOperatorsQuery request, CancellationToken cancellationToken); + Task> GetMerchantsTransactionKpis(MerchantQueries.GetTransactionKpisQuery request, CancellationToken cancellationToken); + Task>> GetOperators(OperatorQueries.GetOperatorsQuery request, CancellationToken cancellationToken); + Task>> GetMerchants(MerchantQueries.GetMerchantsQuery request, CancellationToken cancellationToken); + Task> GetMerchant(MerchantQueries.GetMerchantQuery request, CancellationToken cancellationToken); + Task>> GetMerchantOperators(MerchantQueries.GetMerchantOperatorsQuery request, CancellationToken cancellationToken); + Task>> GetMerchantContracts(MerchantQueries.GetMerchantContractsQuery request, CancellationToken cancellationToken); + Task>> GetMerchantDevices(MerchantQueries.GetMerchantDevicesQuery request, CancellationToken cancellationToken); + Task> GetOperator(OperatorQueries.GetOperatorQuery request, CancellationToken cancellationToken); + + Task> GetTransactionDetailReport(TransactionQueries.TransactionDetailReportQuery request, CancellationToken cancellationToken); #endregion @@ -61,29 +64,62 @@ public ReportingManager(IDbContextResolver resolver) { #region Methods - public async Task> GetCalendarComparisonDates(CalendarQueries.GetComparisonDatesQuery request, - CancellationToken cancellationToken) { - using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); - await using EstateManagementContext context = resolvedContext.Context; + private static async Task>> ExecuteQuerySafeToList(IQueryable query,CancellationToken cancellationToken,string contextMessage = null) + { + try + { + List items = await query.ToListAsync(cancellationToken); + return Result.Success(items); + } + catch (Exception ex) + { + string msg = contextMessage == null ? $"Error executing query: {ex.Message}" : $"{contextMessage}: {ex.Message}"; + return Result.Failure(msg); + } + } - //DateTime startOfYear = new(DateTime.Now.Year, 1, 1); + private static async Task> ExecuteQuerySafeSingleOrDefault(IQueryable query, CancellationToken cancellationToken, string contextMessage = null) + { + try + { + T item = await query.SingleOrDefaultAsync(cancellationToken); - //List entities = context.Calendar.Where(c => c.Date >= startOfYear && c.Date < DateTime.Now.Date.AddDays(-1)).OrderByDescending(d => d.Date).ToList(); + if (item == null) + return Result.NotFound(contextMessage); + + return Result.Success(item); + } + catch (Exception ex) + { + string msg = contextMessage == null ? $"Error executing query: {ex.Message}" : $"{contextMessage}: {ex.Message}"; + return Result.Failure(msg); + } + } + public async Task>> GetCalendarComparisonDates(CalendarQueries.GetComparisonDatesQuery request, + CancellationToken cancellationToken) { + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; + DateTime today = DateTime.Today; DateTime startDate = today.AddYears(-1); DateTime endDate = today.AddDays(-1); // yesterday - List entities = - context.Calendar - .Where(c => c.Date >= startDate && - c.Date < endDate) - .OrderByDescending(c => c.Date) - .ToList(); + var result = await ExecuteQuerySafeToList( + context.Calendar.Where(c => c.Date >= startDate && c.Date < endDate) + .OrderByDescending(c => c.Date), cancellationToken, "Error retrieving calendar comparison dates"); + + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + var entities = result.Data; - List result = new(); + if (entities.Any() == false) + return Result.NotFound("No calendar dates found"); + + List response = new(); foreach (TransactionProcessor.Database.Entities.Calendar calendar in entities) - result.Add(new Calendar { + response.Add(new Calendar { Date = calendar.Date, DayOfWeek = calendar.DayOfWeek, Year = calendar.Year, @@ -97,19 +133,26 @@ public async Task> GetCalendarComparisonDates(CalendarQueries.Get YearWeekNumber = calendar.YearWeekNumber }); - return result; + return Result.Success(response); } - public async Task> GetCalendarDates(CalendarQueries.GetAllDatesQuery request, - CancellationToken cancellationToken) { + public async Task>> GetCalendarDates(CalendarQueries.GetAllDatesQuery request, + CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - List entities = context.Calendar.Where(c => c.Date <= DateTime.Now.Date).ToList(); - List result = new(); + var result = await ExecuteQuerySafeToList( + context.Calendar.Where(c => c.Date <= DateTime.Now.Date), cancellationToken, "Error retrieving calendar dates"); + + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + var entities = result.Data; + + List response = new(); foreach (TransactionProcessor.Database.Entities.Calendar calendar in entities) - result.Add(new Calendar { + response.Add(new Calendar { Date = calendar.Date, DayOfWeek = calendar.DayOfWeek, Year = calendar.Year, @@ -123,47 +166,56 @@ public async Task> GetCalendarDates(CalendarQueries.GetAllDatesQu YearWeekNumber = calendar.YearWeekNumber }); - return result; + return Result.Success(response); } - public async Task> GetCalendarYears(CalendarQueries.GetYearsQuery request, + public async Task>> GetCalendarYears(CalendarQueries.GetYearsQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - List years = context.Calendar.Where(c => c.Date <= DateTime.Now.Date).GroupBy(c => c.Year).Select(y => y.Key).ToList(); + var result = await ExecuteQuerySafeToList( + context.Calendar.Where(c => c.Date <= DateTime.Now.Date).GroupBy(c => c.Year).Select(y => y.Key), + cancellationToken, "Error retrieving calendar years"); - return years; + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + return result; } - public async Task> GetContracts(ContractQueries.GetContractsQuery request, + public async Task>> GetContracts(ContractQueries.GetContractsQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; // Step 1: load contracts with operator name via a left-join (translatable) - var baseContracts = await (from c in context.Contracts - join o in context.Operators on c.OperatorId equals o.OperatorId into ops - from o in ops.DefaultIfEmpty() - select new - { - c.ContractId, - c.ContractReportingId, - c.Description, - c.EstateId, - c.OperatorId, - OperatorName = o != null ? o.Name : null - }) - .OrderByDescending(x => x.Description) - .ToListAsync(cancellationToken); - - if (!baseContracts.Any()) + var baseContractsQuery = (from c in context.Contracts + join o in context.Operators on c.OperatorId equals o.OperatorId into ops + from o in ops.DefaultIfEmpty() + select new { + c.ContractId, + c.ContractReportingId, + c.Description, + c.EstateId, + c.OperatorId, + OperatorName = o != null ? o.Name : null + }).OrderByDescending(x => x.Description); + + var baseContractsQueryResult = await ExecuteQuerySafeToList(baseContractsQuery, cancellationToken, "Error retrieving contracts - Step 1"); + + if (baseContractsQueryResult.IsFailed) + return ResultHelpers.CreateFailure(baseContractsQueryResult); + + var baseContractEntities = baseContractsQueryResult.Data; + + if (baseContractEntities.Any() == false) return new List(); - var contractIds = baseContracts.Select(b => b.ContractId).ToList(); + var contractIds = baseContractEntities.Select(b => b.ContractId).ToList(); // Step 2: load related products for all contracts in one query - var products = await context.ContractProducts + var productsQuery = context.ContractProducts .Where(cp => contractIds.Contains(cp.ContractId)) .Select(cp => new { @@ -173,13 +225,19 @@ from o in ops.DefaultIfEmpty() cp.ProductName, cp.ProductType, cp.Value - }) - .ToListAsync(cancellationToken); + }); - var productIds = products.Select(p => p.ContractProductId).ToList(); + var productsQueryResult = await ExecuteQuerySafeToList(productsQuery, cancellationToken, "Error retrieving contracts - Step 2"); + + if (productsQueryResult.IsFailed) + return ResultHelpers.CreateFailure(productsQueryResult); + + var productEntities = productsQueryResult.Data; + + var productIds = productEntities.Select(p => p.ContractProductId).ToList(); // Step 3: load fees for those products in one query - var fees = await context.ContractProductTransactionFees + var feesQuery = context.ContractProductTransactionFees .Where(tf => productIds.Contains(tf.ContractProductId)) .Select(tf => new { @@ -190,11 +248,17 @@ from o in ops.DefaultIfEmpty() tf.ContractProductId, tf.Description, tf.IsEnabled - }) - .ToListAsync(cancellationToken); + }); + + var feesQueryResult = await ExecuteQuerySafeToList(feesQuery, cancellationToken, "Error retrieving contracts - Step 3"); + + if (feesQueryResult.IsFailed) + return ResultHelpers.CreateFailure(feesQueryResult); + + var feesEntities = feesQueryResult.Data; // Assemble the model in memory - List result = baseContracts.Select(b => new Contract + List result = baseContractEntities.Select(b => new Contract { ContractId = b.ContractId, ContractReportingId = b.ContractReportingId, @@ -202,7 +266,7 @@ from o in ops.DefaultIfEmpty() EstateId = b.EstateId, OperatorName = b.OperatorName, OperatorId = b.OperatorId, - Products = products + Products = productEntities .Where(p => p.ContractId == b.ContractId) .Select(p => new Models.ContractProduct { @@ -212,7 +276,7 @@ from o in ops.DefaultIfEmpty() ProductName = p.ProductName, ProductType = p.ProductType, Value = p.Value, - TransactionFees = fees + TransactionFees = feesEntities .Where(f => f.ContractProductId == p.ContractProductId && f.IsEnabled) .Select(f => new ContractProductTransactionFee { Description = f.Description,Value = f.Value, CalculationType = f.CalculationType, FeeType = f.FeeType, TransactionFeeId = f.ContractProductTransactionFeeId}) .ToList() @@ -220,17 +284,17 @@ from o in ops.DefaultIfEmpty() .ToList() }).ToList(); - return result; + return Result.Success(result); } - public async Task GetContract(ContractQueries.GetContractQuery request, + public async Task> GetContract(ContractQueries.GetContractQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; // Step 1: load contracts with operator name via a left-join (translatable) - var baseContract = await (from c in context.Contracts + var baseContractQuery = (from c in context.Contracts join o in context.Operators on c.OperatorId equals o.OperatorId into ops from o in ops.DefaultIfEmpty() where c.ContractId == request.ContractId @@ -243,14 +307,18 @@ from o in ops.DefaultIfEmpty() c.OperatorId, OperatorName = o != null ? o.Name : null }) - .OrderByDescending(x => x.Description) - .SingleOrDefaultAsync(cancellationToken); + .OrderByDescending(x => x.Description); - if (baseContract == null) - return null; + var baseContractQueryResult = await ExecuteQuerySafeSingleOrDefault(baseContractQuery, cancellationToken, "Error retrieving contract - Step 1"); + + if (baseContractQueryResult.IsFailed) + return ResultHelpers.CreateFailure(baseContractQueryResult); + + var baseContract = baseContractQueryResult.Data; + // Step 2: load related products for all contracts in one query - var products = await context.ContractProducts + var productsQuery = context.ContractProducts .Where(cp => cp.ContractId == baseContract.ContractId) .Select(cp => new { @@ -260,13 +328,18 @@ from o in ops.DefaultIfEmpty() cp.ProductName, cp.ProductType, cp.Value - }) - .ToListAsync(cancellationToken); + }); + + var productsQueryResult = await ExecuteQuerySafeToList(productsQuery, cancellationToken, "Error retrieving contract - Step 2"); + if (productsQueryResult.IsFailed) + return ResultHelpers.CreateFailure(productsQueryResult); + + var products = productsQueryResult.Data; var productIds = products.Select(p => p.ContractProductId).ToList(); // Step 3: load fees for those products in one query - var fees = await context.ContractProductTransactionFees + var feesQuery = context.ContractProductTransactionFees .Where(tf => productIds.Contains(tf.ContractProductId)) .Select(tf => new { @@ -276,8 +349,14 @@ from o in ops.DefaultIfEmpty() tf.Value, tf.ContractProductId, tf.Description - }) - .ToListAsync(cancellationToken); + }); + + var feesQueryResult = await ExecuteQuerySafeToList(feesQuery, cancellationToken, "Error retrieving contract - Step 3"); + + if (feesQueryResult.IsFailed) + return ResultHelpers.CreateFailure(feesQueryResult); + + var fees = feesQueryResult.Data; // Assemble the model in memory Contract result = new Contract @@ -306,15 +385,15 @@ from o in ops.DefaultIfEmpty() .ToList() }; - return result; + return Result.Success(result); } - public async Task> GetRecentContracts(ContractQueries.GetRecentContractsQuery request, + public async Task>> GetRecentContracts(ContractQueries.GetRecentContractsQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - var contracts = context.Contracts.Select(c => new Contract(){ + IQueryable contractsQuery = context.Contracts.Select(c => new Contract(){ ContractId = c.ContractId, ContractReportingId = c.ContractReportingId, Description = c.Description, @@ -323,19 +402,32 @@ public async Task> GetRecentContracts(ContractQueries.GetRecentCo OperatorId = c.OperatorId, }).OrderByDescending(c => c.Description).Take(3); - return await contracts.ToListAsync(cancellationToken); + Result> result = await ExecuteQuerySafeToList(contractsQuery, cancellationToken, "Error retrieving recent contracts"); + + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + return result; } - public async Task GetTodaysFailedSales(TransactionQueries.TodaysFailedSales request, + public async Task> GetTodaysFailedSales(TransactionQueries.TodaysFailedSales request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - List todaysSales = await (from t in context.TodayTransactions where t.IsAuthorised == false && t.TransactionType == "Sale" && t.ResponseCode == request.ResponseCode select t.TransactionAmount).ToListAsync(cancellationToken); - - List comparisonSales = await (from t in context.TransactionHistory where t.IsAuthorised == false && t.TransactionType == "Sale" && t.TransactionDate == request.ComparisonDate && t.TransactionTime <= DateTime.Now.TimeOfDay && t.ResponseCode == request.ResponseCode select t.TransactionAmount).ToListAsync(cancellationToken); + var todaysSalesQuery = (from t in context.TodayTransactions where t.IsAuthorised == false && t.TransactionType == "Sale" && t.ResponseCode == request.ResponseCode select t.TransactionAmount); + var comparisonSalesQuery = (from t in context.TransactionHistory where t.IsAuthorised == false && t.TransactionType == "Sale" && t.TransactionDate == request.ComparisonDate && t.TransactionTime <= DateTime.Now.TimeOfDay && t.ResponseCode == request.ResponseCode select t.TransactionAmount); + + var todaysSalesQueryResult = await ExecuteQuerySafeToList(todaysSalesQuery, cancellationToken, "Error retrieving todays failed sales"); + if (todaysSalesQueryResult.IsFailed) + return ResultHelpers.CreateFailure(todaysSalesQueryResult); + var comparisonSalesQueryResult = await ExecuteQuerySafeToList(comparisonSalesQuery, cancellationToken, "Error retrieving comparison failed sales"); + if (comparisonSalesQueryResult.IsFailed) + return ResultHelpers.CreateFailure(comparisonSalesQueryResult); + var todaysSales = todaysSalesQueryResult.Data; + var comparisonSales = comparisonSalesQueryResult.Data; TodaysSales response = new() { ComparisonSalesCount = comparisonSales.Count, @@ -345,10 +437,10 @@ public async Task GetTodaysFailedSales(TransactionQueries.TodaysFai TodaysSalesValue = todaysSales.Sum(), TodaysAverageSalesValue = this.SafeDivide(todaysSales.Sum(), todaysSales.Count) }; - return response; + return Result.Success(response); } - public async Task GetTodaysSales(TransactionQueries.TodaysSalesQuery request, + public async Task> GetTodaysSales(TransactionQueries.TodaysSalesQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; @@ -359,6 +451,14 @@ public async Task GetTodaysSales(TransactionQueries.TodaysSalesQuer todaysSales = todaysSales.ApplyMerchantFilter(request.MerchantReportingId).ApplyOperatorFilter(request.OperatorReportingId); comparisonSales = comparisonSales.ApplyMerchantFilter(request.MerchantReportingId).ApplyOperatorFilter(request.OperatorReportingId); + var todaysSalesQueryResult = await ExecuteQuerySafeToList(todaysSales, cancellationToken, "Error retrieving todays failed sales"); + if (todaysSalesQueryResult.IsFailed) + return ResultHelpers.CreateFailure(todaysSalesQueryResult); + var comparisonSalesQueryResult = await ExecuteQuerySafeToList(comparisonSales, cancellationToken, "Error retrieving comparison failed sales"); + if (comparisonSalesQueryResult.IsFailed) + return ResultHelpers.CreateFailure(comparisonSalesQueryResult); + + Decimal todaysSalesValue = await todaysSales.SumAsync(t => t.TransactionAmount, cancellationToken); Int32 todaysSalesCount = await todaysSales.CountAsync(cancellationToken); Decimal comparisonSalesValue = await comparisonSales.SumAsync(t => t.TransactionAmount, cancellationToken); @@ -372,17 +472,17 @@ public async Task GetTodaysSales(TransactionQueries.TodaysSalesQuer TodaysAverageSalesValue = SafeDivide(todaysSalesValue, todaysSalesCount), ComparisonAverageSalesValue = SafeDivide(comparisonSalesValue,comparisonSalesCount) }; - return response; + return Result.Success(response); } - public async Task> GetEstateOperators(EstateQueries.GetEstateOperatorsQuery request, + public async Task>> GetEstateOperators(EstateQueries.GetEstateOperatorsQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - //var operatorEntities = context.EstateOperators.Where(e => e.EstateId == estateId).AsQueryable(); - //var x = operatorEntities.Join() - var operatorEntities = await context.EstateOperators + + + var operatorQuery = context.EstateOperators .Join( context.Operators, eo => new { eo.OperatorId, eo.EstateId }, @@ -392,9 +492,13 @@ public async Task> GetEstateOperators(EstateQueries.GetEsta EstateOperator = eo, Operator = op }) - .Where(e => e.EstateOperator.EstateId == request.EstateId && (e.EstateOperator.IsDeleted ?? false) == false) - .ToListAsync(cancellationToken); + .Where(e => e.EstateOperator.EstateId == request.EstateId && (e.EstateOperator.IsDeleted ?? false) == false); + + var operatorQueryResult = await ExecuteQuerySafeToList(operatorQuery, cancellationToken, "Error retrieving estate operators"); + if (operatorQueryResult.IsFailed) + return ResultHelpers.CreateFailure(operatorQueryResult); + var operatorEntities = operatorQueryResult.Data; List operators = new(); foreach (var operatorEntity in operatorEntities) { @@ -404,24 +508,43 @@ public async Task> GetEstateOperators(EstateQueries.GetEsta }); } - return operators; + return Result.Success(operators); } - public async Task GetEstate(EstateQueries.GetEstateQuery request, - CancellationToken cancellationToken) { + public async Task> GetEstate(EstateQueries.GetEstateQuery request, + CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - var estate = await context.Estates.Where(e => e.EstateId == request.EstateId).SingleOrDefaultAsync(cancellationToken); + var estateQueryResult = await ExecuteQuerySafeSingleOrDefault(context.Estates.Where(e => e.EstateId == request.EstateId), cancellationToken, "Error retrieving estate"); + + if (estateQueryResult.IsFailed) + return ResultHelpers.CreateFailure(estateQueryResult); + var estate = estateQueryResult.Data; // Operators - var operators = await context.Operators.Where(e => e.EstateId == request.EstateId).ToListAsync(cancellationToken); + var operatorsListQueryResult = await ExecuteQuerySafeToList(context.Operators.Where(e => e.EstateId == request.EstateId), cancellationToken, "Error retrieving estate operators"); + if (operatorsListQueryResult.IsFailed) + return ResultHelpers.CreateFailure(operatorsListQueryResult); + var operators = operatorsListQueryResult.Data; + // Users - var users = await context.EstateSecurityUsers.Where(e => e.EstateId == request.EstateId).ToListAsync(cancellationToken); + var usersListQueryResult = await ExecuteQuerySafeToList(context.EstateSecurityUsers.Where(e => e.EstateId == request.EstateId), cancellationToken, "Error retrieving estate users"); + if (usersListQueryResult.IsFailed) + return ResultHelpers.CreateFailure(usersListQueryResult); + var users = usersListQueryResult.Data; + // Merchants - var merchants = await context.Merchants.Where(e => e.EstateId == request.EstateId).ToListAsync(cancellationToken); + var merchantsListQueryResult = await ExecuteQuerySafeToList(context.Merchants.Where(e => e.EstateId == request.EstateId), cancellationToken, "Error retrieving merchants"); + if (merchantsListQueryResult.IsFailed) + return ResultHelpers.CreateFailure(merchantsListQueryResult); + var merchants = merchantsListQueryResult.Data; + // Contracts - var contracts = await context.Contracts.Where(e => e.EstateId == request.EstateId).ToListAsync(cancellationToken); + var contractsListQueryResult = await ExecuteQuerySafeToList(context.Contracts.Where(e => e.EstateId == request.EstateId), cancellationToken, "Error retrieving contracts"); + if (contractsListQueryResult.IsFailed) + return ResultHelpers.CreateFailure(contractsListQueryResult); + var contracts = contractsListQueryResult.Data; Estate result = new() { @@ -472,13 +595,13 @@ private Decimal SafeDivide(Decimal number, - public async Task> GetRecentMerchants(MerchantQueries.GetRecentMerchantsQuery request, + public async Task>> GetRecentMerchants(MerchantQueries.GetRecentMerchantsQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - var merchants = context.Merchants.Select(m => new { + var merchantsQuery = context.Merchants.Select(m => new { MerchantReportingId = m.MerchantReportingId, Name = m.Name, LastSaleDateTime = m.LastSaleDateTime, @@ -504,64 +627,77 @@ public async Task> GetRecentMerchants(MerchantQueries.GetRecentMe EstateReportingId = context.Estates.Single(e => e.EstateId == m.EstateId).EstateReportingId }).OrderByDescending(m => m.CreatedDateTime).Take(3); + var recentMerchantsResult = await ExecuteQuerySafeToList(merchantsQuery, cancellationToken, "Error retrieving recent merchants"); + if (recentMerchantsResult.IsFailed) + return ResultHelpers.CreateFailure(recentMerchantsResult); + + var recentMerchants = recentMerchantsResult.Data; + List merchantList = new(); - foreach (var result in merchants) + foreach (var merchant in recentMerchants) { Merchant model = new() { - MerchantId = result.MerchantId, - Name = result.Name, - Reference = result.Reference, - MerchantReportingId = result.MerchantReportingId, - CreatedDateTime = result.CreatedDateTime, + MerchantId = merchant.MerchantId, + Name = merchant.Name, + Reference = merchant.Reference, + MerchantReportingId = merchant.MerchantReportingId, + CreatedDateTime = merchant.CreatedDateTime, }; - if (result.AddressInfo != null) { - model.AddressLine1 = result.AddressInfo.AddressLine1; - model.AddressLine2 = result.AddressInfo.AddressLine2; - model.Country = result.AddressInfo.Country; - model.PostCode = result.AddressInfo.PostalCode; - model.Town = result.AddressInfo.Town; - model.Region = result.AddressInfo.Region; + if (merchant.AddressInfo != null) { + model.AddressLine1 = merchant.AddressInfo.AddressLine1; + model.AddressLine2 = merchant.AddressInfo.AddressLine2; + model.Country = merchant.AddressInfo.Country; + model.PostCode = merchant.AddressInfo.PostalCode; + model.Town = merchant.AddressInfo.Town; + model.Region = merchant.AddressInfo.Region; } - if (result.ContactInfo != null) { - model.ContactName = result.ContactInfo.Name; - model.ContactEmail = result.ContactInfo.EmailAddress; - model.ContactPhone = result.ContactInfo.PhoneNumber; + if (merchant.ContactInfo != null) { + model.ContactName = merchant.ContactInfo.Name; + model.ContactEmail = merchant.ContactInfo.EmailAddress; + model.ContactPhone = merchant.ContactInfo.PhoneNumber; } merchantList.Add(model); } - return merchantList; + return Result.Success(merchantList); } - public async Task GetMerchantsTransactionKpis(MerchantQueries.GetTransactionKpisQuery request, + public async Task> GetMerchantsTransactionKpis(MerchantQueries.GetTransactionKpisQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - var merchants = await context.Merchants.Select(m => new { m.Name, m.LastSaleDate, m.LastSaleDateTime }).ToListAsync(); - Int32 merchantsWithSaleInLastHour = (from m in context.Merchants where m.LastSaleDate == DateTime.Now.Date && m.LastSaleDateTime >= DateTime.Now.AddHours(-1) select m.MerchantReportingId).Count(); + + var merchantsQuery = context.Merchants.Select(m => new { m.Name, m.LastSaleDate, m.LastSaleDateTime }); + var merchantsQueryResult = await ExecuteQuerySafeToList(merchantsQuery, cancellationToken, "Error retrieving merchants for KPI's"); + if (merchantsQueryResult.IsFailed) + return ResultHelpers.CreateFailure(merchantsQueryResult); + + var merchants = merchantsQueryResult.Data; + + Int32 merchantsWithSaleInLastHour = (from m in merchants where m.LastSaleDate == DateTime.Now.Date && m.LastSaleDateTime >= DateTime.Now.AddHours(-1) select m).Count(); - Int32 merchantsWithNoSaleToday = (from m in context.Merchants where m.LastSaleDate >= DateTime.Now.Date.AddDays(-7) && m.LastSaleDate <= DateTime.Now.Date.AddDays(-1) select m.MerchantReportingId).Count(); + Int32 merchantsWithNoSaleToday = (from m in merchants where m.LastSaleDate >= DateTime.Now.Date.AddDays(-7) && m.LastSaleDate <= DateTime.Now.Date.AddDays(-1) select m).Count(); - Int32 merchantsWithNoSaleInLast7Days = (from m in context.Merchants where m.LastSaleDate <= DateTime.Now.Date.AddDays(-7) select m.MerchantReportingId).Count(); + Int32 merchantsWithNoSaleInLast7Days = (from m in merchants where m.LastSaleDate <= DateTime.Now.Date.AddDays(-7) select m).Count(); MerchantKpi response = new() { MerchantsWithSaleInLastHour = merchantsWithSaleInLastHour, MerchantsWithNoSaleToday = merchantsWithNoSaleToday, MerchantsWithNoSaleInLast7Days = merchantsWithNoSaleInLast7Days }; - return response; + return Result.Success(response); } - public async Task> GetOperators(OperatorQueries.GetOperatorsQuery request, + public async Task>> GetOperators(OperatorQueries.GetOperatorsQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - List operators = await (from o in context.Operators - select new Operator + var operatorQuery = (from o in context.Operators + select new { Name = o.Name, EstateReportingId = context.Estates.Single(e => e.EstateId == o.EstateId).EstateReportingId, @@ -569,32 +705,65 @@ public async Task> GetOperators(OperatorQueries.GetOperatorsQuery OperatorReportingId = o.OperatorReportingId, RequireCustomMerchantNumber = o.RequireCustomMerchantNumber, RequireCustomTerminalNumber = o.RequireCustomTerminalNumber - }).ToListAsync(cancellationToken); + }); + + var operatorResult = await ExecuteQuerySafeToList(operatorQuery, cancellationToken, "Error retrieving operator"); - return operators; + if (operatorResult.IsFailed) + return ResultHelpers.CreateFailure(operatorResult); + + List operators = new List(); + foreach (var op in operatorResult.Data) { + operators.Add(new Operator + { + Name = op.Name, + EstateReportingId = op.EstateReportingId, + OperatorId = op.OperatorId, + OperatorReportingId = op.OperatorReportingId, + RequireCustomMerchantNumber = op.RequireCustomMerchantNumber, + RequireCustomTerminalNumber = op.RequireCustomTerminalNumber + }); + } + + return Result.Success(operators); } - public async Task GetOperator(OperatorQueries.GetOperatorQuery request, + public async Task> GetOperator(OperatorQueries.GetOperatorQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - Operator @operator = await (from o in context.Operators + var operatorQuery = (from o in context.Operators where o.OperatorId == request.OperatorId - select new Operator { - Name = o.Name, - EstateReportingId = context.Estates.Single(e => e.EstateId == o.EstateId).EstateReportingId, - OperatorId = o.OperatorId, + select new { + Name = o.Name, + EstateReportingId = context.Estates.Single(e => e.EstateId == o.EstateId).EstateReportingId, + OperatorId = o.OperatorId, OperatorReportingId = o.OperatorReportingId, RequireCustomMerchantNumber = o.RequireCustomMerchantNumber, RequireCustomTerminalNumber = o.RequireCustomTerminalNumber - }).SingleOrDefaultAsync(cancellationToken); + }); + + var operatorResult = await ExecuteQuerySafeSingleOrDefault(operatorQuery, cancellationToken, "Error retrieving operator"); - return @operator; + if (operatorResult.IsFailed) + return ResultHelpers.CreateFailure(operatorResult); + + var @operator = new Operator + { + Name = operatorResult.Data.Name, + EstateReportingId = operatorResult.Data.EstateReportingId, + OperatorId = operatorResult.Data.OperatorId, + OperatorReportingId = operatorResult.Data.OperatorReportingId, + RequireCustomMerchantNumber = operatorResult.Data.RequireCustomMerchantNumber, + RequireCustomTerminalNumber = operatorResult.Data.RequireCustomTerminalNumber + }; + + return Result.Success(@operator); } - public async Task GetTransactionDetailReport(TransactionQueries.TransactionDetailReportQuery request, + public async Task> GetTransactionDetailReport(TransactionQueries.TransactionDetailReportQuery request, CancellationToken cancellationToken) { TransactionDetailReportResponse response = null; @@ -648,8 +817,14 @@ from s in sJoin.DefaultIfEmpty() query = query.Where(q => request.Request.Operators.Contains(q.OperatorReportingId)); } + var queryResult = await ExecuteQuerySafeToList(query, cancellationToken, "Error retrieving transaction details resport"); + + if (queryResult.IsFailed) + return ResultHelpers.CreateFailure(queryResult); + // Ok now enumerate the results - var queryResults = await query.ToListAsync(cancellationToken); + var queryResults = queryResult.Data; + if (queryResults.Any() == false) return new TransactionDetailReportResponse { @@ -687,8 +862,8 @@ from s in sJoin.DefaultIfEmpty() return response; } - public async Task> GetMerchants(MerchantQueries.GetMerchantsQuery request, - CancellationToken cancellationToken) { + public async Task>> GetMerchants(MerchantQueries.GetMerchantsQuery request, + CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; @@ -731,11 +906,17 @@ public async Task> GetMerchants(MerchantQueries.GetMerchantsQuery merchantWithAddresses = merchantWithAddresses.Where(m => m.Address.PostalCode == request.QueryOptions.PostCode).AsQueryable(); } + var queryResults = await ExecuteQuerySafeToList(merchantWithAddresses, cancellationToken, "Error retrieving merchants"); + + if (queryResults.IsFailed) + return ResultHelpers.CreateFailure(queryResults); + + var merchants = queryResults.Data; + // Ok now enumerate the results - var queryResults = await merchantWithAddresses.ToListAsync(cancellationToken); - List merchants = new(); - foreach (var queryResult in queryResults) { - merchants.Add(new Merchant { + List response = new(); + foreach (var queryResult in merchants) { + response.Add(new Merchant { Balance = 0, CreatedDateTime = queryResult.Merchant.CreatedDateTime, Name = queryResult.Merchant.Name, @@ -752,16 +933,16 @@ public async Task> GetMerchants(MerchantQueries.GetMerchantsQuery }); } - return merchants; + return Result.Success(response); } - public async Task GetMerchant(MerchantQueries.GetMerchantQuery request, + public async Task> GetMerchant(MerchantQueries.GetMerchantQuery request, CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - var merchant = await context.Merchants.Select(m => new { + var merchantQuery = context.Merchants.Select(m => new { MerchantReportingId = m.MerchantReportingId, Name = m.Name, LastSaleDateTime = m.LastSaleDateTime, @@ -781,17 +962,16 @@ public async Task GetMerchant(MerchantQueries.GetMerchantQuery request ma.Town // Add more properties as needed }).FirstOrDefault(), // Get the first matching MerchantAddress or null - ContactInfo = context.MerchantContacts.Where(mc => mc.MerchantId == m.MerchantId).OrderByDescending(mc => mc.CreatedDateTime).Select(mc => new { - mc.ContactId, - mc.Name, - mc.EmailAddress, - mc.PhoneNumber - }).FirstOrDefault(), // Get the first matching MerchantContact or null + ContactInfo = context.MerchantContacts.Where(mc => mc.MerchantId == m.MerchantId).OrderByDescending(mc => mc.CreatedDateTime).Select(mc => new { mc.ContactId, mc.Name, mc.EmailAddress, mc.PhoneNumber }).FirstOrDefault(), // Get the first matching MerchantContact or null EstateReportingId = context.Estates.Single(e => e.EstateId == m.EstateId).EstateReportingId - }).Where(m => m.MerchantId == request.MerchantId).SingleOrDefaultAsync(cancellationToken); + }).Where(m => m.MerchantId == request.MerchantId); + + var merchantQueryResult = await ExecuteQuerySafeSingleOrDefault(merchantQuery, cancellationToken, "Error getting merchant"); + + if (merchantQueryResult.IsFailed) + return ResultHelpers.CreateFailure(merchantQueryResult); - if (merchant == null) - return null; + var merchant = merchantQueryResult.Data; // Ok now enumerate the results Merchant result = new Merchant @@ -815,17 +995,23 @@ public async Task GetMerchant(MerchantQueries.GetMerchantQuery request ContactEmail = merchant.ContactInfo.EmailAddress, ContactPhone = merchant.ContactInfo.PhoneNumber }; - - return result; + + return Result.Success(result); } - public async Task> GetMerchantOperators(MerchantQueries.GetMerchantOperatorsQuery request, - CancellationToken cancellationToken) { + public async Task>> GetMerchantOperators(MerchantQueries.GetMerchantOperatorsQuery request, + CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - List merchantOperators = await context.MerchantOperators.Where(mo => mo.MerchantId == request.MerchantId && mo.IsDeleted == false) - .ToListAsync(cancellationToken); + var merchantOperatorsQuery = context.MerchantOperators.Where(mo => mo.MerchantId == request.MerchantId && mo.IsDeleted == false); + + var merchantOperatorsQueryResult = await ExecuteQuerySafeToList(merchantOperatorsQuery, cancellationToken, "Error getting merchant devices"); + + if (merchantOperatorsQueryResult.IsFailed) + return ResultHelpers.CreateFailure(merchantOperatorsQueryResult); + + var merchantOperators = merchantOperatorsQueryResult.Data; List result = new(); foreach (TransactionProcessor.Database.Entities.MerchantOperator merchantOperator in merchantOperators) { @@ -839,15 +1025,15 @@ public async Task> GetMerchantOperators(MerchantQueries.G }); } - return result; + return Result.Success(result); } - public async Task> GetMerchantContracts(MerchantQueries.GetMerchantContractsQuery request, - CancellationToken cancellationToken) { + public async Task>> GetMerchantContracts(MerchantQueries.GetMerchantContractsQuery request, + CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - var merchantContracts = await context.MerchantContracts.Where(mo => mo.MerchantId == request.MerchantId && mo.IsDeleted == false) + var merchantContractsQuery = context.MerchantContracts.Where(mo => mo.MerchantId == request.MerchantId && mo.IsDeleted == false) .Select(mc => new { mc.ContractId, mc.IsDeleted, @@ -864,8 +1050,14 @@ public async Task> GetMerchantContracts(MerchantQueries.G }).ToList() // Add more properties as needed }).SingleOrDefault() - }) - .ToListAsync(cancellationToken); + }); + + var merchantContractsQueryResult = await ExecuteQuerySafeToList(merchantContractsQuery, cancellationToken, "Error getting merchant devices"); + + if (merchantContractsQueryResult.IsFailed) + return ResultHelpers.CreateFailure(merchantContractsQueryResult); + + var merchantContracts = merchantContractsQueryResult.Data; List result = new(); foreach (var merchantContract in merchantContracts) @@ -895,15 +1087,21 @@ public async Task> GetMerchantContracts(MerchantQueries.G result.Add(c); } - return result; + return Result.Success(result); } - public async Task> GetMerchantDevices(MerchantQueries.GetMerchantDevicesQuery request, - CancellationToken cancellationToken) { + public async Task>> GetMerchantDevices(MerchantQueries.GetMerchantDevicesQuery request, + CancellationToken cancellationToken) { using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, request.EstateId.ToString()); await using EstateManagementContext context = resolvedContext.Context; - List merchantDevices = await context.MerchantDevices.Where(mo => mo.MerchantId == request.MerchantId).ToListAsync(cancellationToken); + var merchantDevicesQuery = context.MerchantDevices.Where(mo => mo.MerchantId == request.MerchantId); + var merchantDevicesQueryResult = await ExecuteQuerySafeToList(merchantDevicesQuery, cancellationToken, "Error getting merchant devices"); + + if (merchantDevicesQueryResult.IsFailed) + return ResultHelpers.CreateFailure(merchantDevicesQueryResult); + + var merchantDevices = merchantDevicesQueryResult.Data; List result = new(); foreach (TransactionProcessor.Database.Entities.MerchantDevice merchantDevice in merchantDevices) @@ -917,7 +1115,7 @@ public async Task> GetMerchantDevices(MerchantQueries.GetMe }); } - return result; + return Result.Success(result); } private IQueryable BuildTodaySalesQuery(EstateManagementContext context) { diff --git a/EstateReportingAPI.BusinessLogic/RequestHandlers/CalendarRequestHandler.cs b/EstateReportingAPI.BusinessLogic/RequestHandlers/CalendarRequestHandler.cs index 2ffa65a..ba2b226 100644 --- a/EstateReportingAPI.BusinessLogic/RequestHandlers/CalendarRequestHandler.cs +++ b/EstateReportingAPI.BusinessLogic/RequestHandlers/CalendarRequestHandler.cs @@ -1,6 +1,7 @@ using EstateReportingAPI.BusinessLogic.Queries; using EstateReportingAPI.Models; using MediatR; +using Shared.Results; using SimpleResults; namespace EstateReportingAPI.BusinessLogic.RequestHandlers; @@ -13,35 +14,21 @@ public CalendarRequestHandler(IReportingManager manager) { } public async Task>> Handle(CalendarQueries.GetAllDatesQuery request, CancellationToken cancellationToken) { - List result = await this.Manager.GetCalendarDates(request, cancellationToken); - - if (result.Any() == false) { - return Result.NotFound("No calendar dates found"); - } - - return Result.Success(result); - + return await this.Manager.GetCalendarDates(request, cancellationToken); } public async Task>> Handle(CalendarQueries.GetComparisonDatesQuery request, CancellationToken cancellationToken) { - List result = await this.Manager.GetCalendarComparisonDates(request, cancellationToken); - if (result.Any() == false) - { - return Result.NotFound("No calendar comparison dates found"); - } + Result> result = await this.Manager.GetCalendarComparisonDates(request, cancellationToken); - return Result.Success(result); + if (result.IsFailed) + return ResultHelpers.CreateFailure(result); + + return Result.Success(result.Data); } public async Task>> Handle(CalendarQueries.GetYearsQuery request, CancellationToken cancellationToken) { - List result = await this.Manager.GetCalendarYears(request, cancellationToken); - if (result.Any() == false) - { - return Result.NotFound("No calendar years found"); - } - - return Result.Success(result); + return await this.Manager.GetCalendarYears(request, cancellationToken); } } \ No newline at end of file diff --git a/EstateReportingAPI.BusinessLogic/RequestHandlers/ContractRequestHandler.cs b/EstateReportingAPI.BusinessLogic/RequestHandlers/ContractRequestHandler.cs index a56373e..d763de1 100644 --- a/EstateReportingAPI.BusinessLogic/RequestHandlers/ContractRequestHandler.cs +++ b/EstateReportingAPI.BusinessLogic/RequestHandlers/ContractRequestHandler.cs @@ -18,21 +18,19 @@ public ContractRequestHandler(IReportingManager manager) } public async Task>> Handle(ContractQueries.GetRecentContractsQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetRecentContracts(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetRecentContracts(request, cancellationToken); } public async Task>> Handle(ContractQueries.GetContractsQuery request, CancellationToken cancellationToken) { var result = await this.Manager.GetContracts(request, cancellationToken); - return Result.Success(result); + return result; } public async Task> Handle(ContractQueries.GetContractQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetContract(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetContract(request, cancellationToken); } } \ No newline at end of file diff --git a/EstateReportingAPI.BusinessLogic/RequestHandlers/EstateRequestHandler.cs b/EstateReportingAPI.BusinessLogic/RequestHandlers/EstateRequestHandler.cs index e07c589..44437c1 100644 --- a/EstateReportingAPI.BusinessLogic/RequestHandlers/EstateRequestHandler.cs +++ b/EstateReportingAPI.BusinessLogic/RequestHandlers/EstateRequestHandler.cs @@ -18,13 +18,11 @@ public EstateRequestHandler(IReportingManager manager) public async Task> Handle(EstateQueries.GetEstateQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetEstate(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetEstate(request, cancellationToken); } public async Task>> Handle(EstateQueries.GetEstateOperatorsQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetEstateOperators(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetEstateOperators(request, cancellationToken); } } \ No newline at end of file diff --git a/EstateReportingAPI.BusinessLogic/RequestHandlers/MerchantRequestHandler.cs b/EstateReportingAPI.BusinessLogic/RequestHandlers/MerchantRequestHandler.cs index e642e6c..bd46bd6 100644 --- a/EstateReportingAPI.BusinessLogic/RequestHandlers/MerchantRequestHandler.cs +++ b/EstateReportingAPI.BusinessLogic/RequestHandlers/MerchantRequestHandler.cs @@ -21,47 +21,36 @@ public MerchantRequestHandler(IReportingManager manager) public async Task>> Handle(MerchantQueries.GetRecentMerchantsQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetRecentMerchants(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetRecentMerchants(request, cancellationToken); } public async Task> Handle(MerchantQueries.GetTransactionKpisQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetMerchantsTransactionKpis(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetMerchantsTransactionKpis(request, cancellationToken); } public async Task>> Handle(MerchantQueries.GetMerchantsQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetMerchants(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetMerchants(request, cancellationToken); } public async Task> Handle(MerchantQueries.GetMerchantQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetMerchant(request, cancellationToken); - - if (result == null) - return Result.NotFound(); - - return Result.Success(result); + return await this.Manager.GetMerchant(request, cancellationToken); } public async Task>> Handle(MerchantQueries.GetMerchantContractsQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetMerchantContracts(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetMerchantContracts(request, cancellationToken); } public async Task>> Handle(MerchantQueries.GetMerchantOperatorsQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetMerchantOperators(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetMerchantOperators(request, cancellationToken); } public async Task>> Handle(MerchantQueries.GetMerchantDevicesQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetMerchantDevices(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetMerchantDevices(request, cancellationToken); } } \ No newline at end of file diff --git a/EstateReportingAPI.BusinessLogic/RequestHandlers/OperatorRequestHandler.cs b/EstateReportingAPI.BusinessLogic/RequestHandlers/OperatorRequestHandler.cs index e6c7c0f..41384c7 100644 --- a/EstateReportingAPI.BusinessLogic/RequestHandlers/OperatorRequestHandler.cs +++ b/EstateReportingAPI.BusinessLogic/RequestHandlers/OperatorRequestHandler.cs @@ -17,13 +17,11 @@ public OperatorRequestHandler(IReportingManager manager) { public async Task>> Handle(OperatorQueries.GetOperatorsQuery request, CancellationToken cancellationToken) { - List result = await this.Manager.GetOperators(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetOperators(request, cancellationToken); } public async Task> Handle(OperatorQueries.GetOperatorQuery request, CancellationToken cancellationToken) { - Operator result = await this.Manager.GetOperator(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetOperator(request, cancellationToken); } } \ No newline at end of file diff --git a/EstateReportingAPI.BusinessLogic/RequestHandlers/TransactionRequestHandler.cs b/EstateReportingAPI.BusinessLogic/RequestHandlers/TransactionRequestHandler.cs index 694e98b..82fa12d 100644 --- a/EstateReportingAPI.BusinessLogic/RequestHandlers/TransactionRequestHandler.cs +++ b/EstateReportingAPI.BusinessLogic/RequestHandlers/TransactionRequestHandler.cs @@ -16,19 +16,16 @@ public TransactionRequestHandler(IReportingManager manager) { public async Task> Handle(TransactionQueries.TodaysFailedSales request, CancellationToken cancellationToken) { - var result = await this.Manager.GetTodaysFailedSales(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetTodaysFailedSales(request, cancellationToken); } public async Task> Handle(TransactionQueries.TodaysSalesQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetTodaysSales(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetTodaysSales(request, cancellationToken); } public async Task> Handle(TransactionQueries.TransactionDetailReportQuery request, CancellationToken cancellationToken) { - var result = await this.Manager.GetTransactionDetailReport(request, cancellationToken); - return Result.Success(result); + return await this.Manager.GetTransactionDetailReport(request, cancellationToken); } } \ No newline at end of file diff --git a/EstateReportingAPI.Client/EstateReportingAPI.Client.csproj b/EstateReportingAPI.Client/EstateReportingAPI.Client.csproj index dc35b67..26e9874 100644 --- a/EstateReportingAPI.Client/EstateReportingAPI.Client.csproj +++ b/EstateReportingAPI.Client/EstateReportingAPI.Client.csproj @@ -7,9 +7,9 @@ - + - + diff --git a/EstateReportingAPI.IntegrationTests/EstateReportingAPI.IntegrationTests.csproj b/EstateReportingAPI.IntegrationTests/EstateReportingAPI.IntegrationTests.csproj index fb50b6e..da9c3c4 100644 --- a/EstateReportingAPI.IntegrationTests/EstateReportingAPI.IntegrationTests.csproj +++ b/EstateReportingAPI.IntegrationTests/EstateReportingAPI.IntegrationTests.csproj @@ -22,9 +22,9 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + diff --git a/EstateReportingAPI/EstateReportingAPI.csproj b/EstateReportingAPI/EstateReportingAPI.csproj index 12832ee..090108b 100644 --- a/EstateReportingAPI/EstateReportingAPI.csproj +++ b/EstateReportingAPI/EstateReportingAPI.csproj @@ -12,8 +12,8 @@ - - + + @@ -21,7 +21,7 @@ - +