1- using System . Net . Http . Headers ;
2- using System . Text ;
31using MerchantPos . EF . Models ;
42using Newtonsoft . Json ;
3+ using Newtonsoft . Json . Linq ;
54using SecurityService . Client ;
65using SecurityService . DataTransferObjects . Responses ;
76using Shared . Logger ;
87using SimpleResults ;
8+ using System . Diagnostics . CodeAnalysis ;
9+ using System . Net . Http . Headers ;
10+ using System . Text ;
911using TransactionProcessor . Client ;
1012using TransactionProcessor . DataTransferObjects ;
1113using TransactionProcessor . DataTransferObjects . Requests . Merchant ;
@@ -18,6 +20,9 @@ namespace TransactionProcessing.MerchantPos.Runtime;
1820public interface IApiClient
1921{
2022 Task < Result < TokenResponse > > GetToken ( String clientId , String clientSecret , MerchantConfig cfg , CancellationToken cancellationToken ) ;
23+
24+ Task < Result < MerchantResponse > > GetMerchant ( MerchantConfig cfg , TokenResponse token , CancellationToken cancellationToken ) ;
25+
2126 Task SendLogon ( MerchantConfig cfg , TokenResponse token ,
2227 Int32 transactionNumber , CancellationToken cancellationToken ) ;
2328 Task < List < Product > > GetProductList ( MerchantConfig cfg , TokenResponse token , CancellationToken cancellationToken ) ;
@@ -49,6 +54,40 @@ public async Task<Result<TokenResponse>> GetToken(String clientId,
4954 return await this . SecurityClient . GetToken ( cfg . Username , cfg . Password , clientId , clientSecret , cancellationToken ) ;
5055 }
5156
57+ public async Task < Result < MerchantResponse > > GetMerchant ( MerchantConfig cfg ,
58+ TokenResponse token ,
59+ CancellationToken cancellationToken ) {
60+
61+ Guid estateId = cfg . EstateId ;
62+ Guid merchantId = cfg . MerchantId ;
63+
64+ String requestUri = this . BuildRequestUrl ( $ "api/merchants?applicationVersion={ cfg . ApplicationVersion } ") ;
65+
66+ Logger . LogInformation ( "About to request merchant details" ) ;
67+ Logger . LogDebug ( $ "Merchant Request details: Estate Id { estateId } Merchant Id { merchantId } Access Token { token . AccessToken } ") ;
68+
69+ HttpRequestMessage request = new ( HttpMethod . Get , requestUri ) ;
70+ request . Headers . Authorization = new AuthenticationHeaderValue ( "Bearer" , token . AccessToken ) ;
71+ var httpResponse = await this . HttpClient . SendAsync ( request , cancellationToken ) ;
72+
73+ // Process the response
74+ Result < String > content = await this . HandleResponseX ( httpResponse , cancellationToken ) ;
75+
76+ if ( content . IsFailed )
77+ {
78+ Logger . LogInformation ( $ "GetMerchant failed { content . Status } ") ;
79+ }
80+
81+ Logger . LogDebug ( $ "Merchant Response details: Status { httpResponse . StatusCode } Payload { content . Data } ") ;
82+ //MerchantResponse
83+
84+ MerchantResponse responseData = JsonConvert . DeserializeObject < MerchantResponse > ( content . Data ) ;
85+
86+ Logger . LogDebug ( $ "Merchant Response: [{ JsonConvert . SerializeObject ( responseData ) } ]") ;
87+
88+ return responseData ;
89+ }
90+
5291 public async Task SendLogon ( MerchantConfig cfg ,
5392 TokenResponse token ,
5493 Int32 transactionNumber ,
@@ -92,7 +131,7 @@ public async Task<List<Product>> GetProductList(MerchantConfig cfg,
92131 Logger . LogInformation ( $ "GetMerchantContracts failed { content . Status } ") ;
93132 }
94133
95- Logger . LogDebug ( $ "Transaction Response details: Status { httpResponse . StatusCode } Payload { content . Data } ") ;
134+ Logger . LogDebug ( $ "Merchant Contract Response details: Status { httpResponse . StatusCode } Payload { content . Data } ") ;
96135
97136 List < ContractResponseX > ? responseData = JsonConvert . DeserializeObject < List < ContractResponseX > > ( content . Data ) ;
98137
@@ -499,4 +538,29 @@ public enum ProductSubType
499538 BillPaymentPostPay ,
500539 BillPaymentPrePay ,
501540 Voucher
502- }
541+ }
542+
543+ [ ExcludeFromCodeCoverage ]
544+ public class MerchantResponse
545+ {
546+ [ JsonProperty ( "estate_id" ) ]
547+ public Guid EstateId { get ; set ; }
548+
549+ [ JsonProperty ( "merchant_id" ) ]
550+ public Guid MerchantId { get ; set ; }
551+
552+ [ JsonProperty ( "merchant_name" ) ]
553+ public string MerchantName { get ; set ; }
554+
555+ [ JsonProperty ( "opening_hours" ) ]
556+ public Dictionary < DayOfWeek , OpeningHoursResponse > OpeningHours { get ; set ; }
557+ }
558+
559+ public class OpeningHoursResponse
560+ {
561+ [ JsonProperty ( "opening" ) ]
562+ public string Opening { get ; set ; }
563+
564+ [ JsonProperty ( "closing" ) ]
565+ public string Closing { get ; set ; }
566+ }
0 commit comments