From f109d97c6014db9b085eebc3e9bc7f1f8c45c97b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 18 Mar 2026 07:29:53 +0000 Subject: [PATCH 1/2] Initial plan From 1eca3c3c8f7500bc83abeff83f47819affde5028 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 18 Mar 2026 07:31:49 +0000 Subject: [PATCH 2/2] refactor merchant contract read model assembly Co-authored-by: StuartFerguson <16325469+StuartFerguson@users.noreply.github.com> --- ...TransactionProcessorReadModelRepository.cs | 96 +++++++++---------- 1 file changed, 45 insertions(+), 51 deletions(-) diff --git a/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs b/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs index d26a4323..dec368c8 100644 --- a/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs +++ b/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs @@ -943,61 +943,26 @@ public async Task>> GetMerchantContracts(Guid estateI { EstateManagementContext context = await this.GetContext(estateId); - var x = await (from c in context.Contracts - join cp in context.ContractProducts on c.ContractId equals cp.ContractId - join eo in context.Operators on c.OperatorId equals eo.OperatorId - join m in context.Merchants on c.EstateId equals m.EstateId - join e in context.Estates on c.EstateId equals e.EstateId - join mc in context.MerchantContracts on new { c.ContractId, m.MerchantId } equals new { mc.ContractId, mc.MerchantId } - where m.MerchantId == merchantId && e.EstateId == estateId - select new - { - Contract = c, - Product = cp, - Operator = eo - }).ToListAsync(cancellationToken); + var query = await (from c in context.Contracts + join cp in context.ContractProducts on c.ContractId equals cp.ContractId + join eo in context.Operators on c.OperatorId equals eo.OperatorId + join m in context.Merchants on c.EstateId equals m.EstateId + join e in context.Estates on c.EstateId equals e.EstateId + join mc in context.MerchantContracts on new { c.ContractId, m.MerchantId } equals new { mc.ContractId, mc.MerchantId } + where m.MerchantId == merchantId && e.EstateId == estateId + select new + { + Contract = c, + Product = cp, + Operator = eo + }).ToListAsync(cancellationToken); List contracts = new List(); - foreach (var test in x) + foreach (var contractData in query) { - // attempt to find the contract - ContractModel contract = contracts.SingleOrDefault(c => c.ContractId == test.Contract.ContractId); - - if (contract == null) - { - // create the contract - contract = new ContractModel - { - OperatorId = test.Contract.OperatorId, - OperatorName = test.Operator.Name, - Products = new List(), - Description = test.Contract.Description, - IsCreated = true, - ContractId = test.Contract.ContractId, - ContractReportingId = test.Contract.ContractReportingId, - EstateId = estateId - }; - - contracts.Add(contract); - } - - // Now add the product if not already added - Boolean productFound = contract.Products.Any(p => p.ContractProductId == test.Product.ContractProductId); - - if (productFound == false) - { - // Not already there so need to add it - contract.Products.Add(new Product - { - ContractProductId = test.Product.ContractProductId, - ContractProductReportingId = test.Product.ContractProductReportingId, - TransactionFees = null, - Value = test.Product.Value, - Name = test.Product.ProductName, - DisplayText = test.Product.DisplayText - }); - } + ContractModel contract = this.GetOrCreateMerchantContract(contracts, estateId, contractData.Contract, contractData.Operator); + this.AddProductIfRequired(contract, contractData.Product); } return Result.Success(contracts); @@ -1056,6 +1021,35 @@ private async Task GetContext(Guid estateId) return resolvedContext.Context; } + private ContractModel GetOrCreateMerchantContract(List contracts, + Guid estateId, + Contract contractData, + Operator operatorData) + { + ContractModel contract = contracts.SingleOrDefault(c => c.ContractId == contractData.ContractId); + + if (contract != null) + { + return contract; + } + + contract = new ContractModel + { + OperatorId = contractData.OperatorId, + OperatorName = operatorData.Name, + Products = new List(), + Description = contractData.Description, + IsCreated = true, + ContractId = contractData.ContractId, + ContractReportingId = contractData.ContractReportingId, + EstateId = estateId + }; + + contracts.Add(contract); + + return contract; + } + private ContractModel GetOrCreateContract(List contracts, Estate estate, Contract contractData,