1- namespace TransactionProcessing . SchedulerService . Jobs
1+ using System . Collections . Generic ;
2+ using Newtonsoft . Json ;
3+
4+ namespace TransactionProcessing . SchedulerService . Jobs
25{
36 using System ;
7+ using System . Text . Json . Nodes ;
8+ using System . Text . Json ;
49 using System . Threading . Tasks ;
510 using DataGeneration ;
611 using Quartz ;
712 using Shared . Logger ;
13+ using System . Linq ;
814
915 /// <summary>
1016 ///
@@ -14,20 +20,116 @@ public class GenerateTransactionsJob : BaseJob{
1420
1521 #region Methods
1622
17- public override async Task ExecuteJob ( IJobExecutionContext context ) {
18-
19- Guid estateId = context . MergedJobDataMap . GetGuidValueFromString ( "EstateId" ) ;
20- Guid merchantId = context . MergedJobDataMap . GetGuidValueFromString ( "MerchantId" ) ;
21- Boolean requireLogon = context . MergedJobDataMap . GetBooleanValueFromString ( "requireLogon" ) ;
23+ public override async Task ExecuteJob ( IJobExecutionContext context )
24+ {
25+ TransactionJobConfig configuration = Helpers . LoadJobConfig < TransactionJobConfig > ( context . MergedJobDataMap ) ;
2226
23- Logger . LogInformation ( $ "Estate Id: [{ estateId } ]") ;
24- Logger . LogInformation ( $ "Merchant Id: [{ merchantId } ]") ;
25- Logger . LogInformation ( $ "Require Logon: [{ requireLogon } ]") ;
26-
27- ITransactionDataGenerator t = CreateTransactionDataGenerator ( this . ClientId , this . ClientSecret , RunningMode . Live ) ;
27+ ITransactionDataGenerator t = CreateTransactionDataGenerator ( configuration . ClientId , configuration . ClientSecret , RunningMode . Live ) ;
2828 t . TraceGenerated += TraceGenerated ;
29- await Jobs . GenerateTransactions ( t , estateId , merchantId , requireLogon , context . CancellationToken ) ;
29+
30+ await Jobs . GenerateTransactions ( t , configuration , context . CancellationToken ) ;
3031 }
3132 #endregion
3233 }
34+
35+ public record BaseConfiguration (
36+ String ClientId ,
37+ String ClientSecret ,
38+ String EstateManagementApi ,
39+ String FileProcessorApi ,
40+ String SecurityService ,
41+ String TestHostApi ,
42+ String TransactionProcessorApi ) ;
43+
44+ public record MerchantStatementJobConfig ( String ClientId ,
45+ String ClientSecret ,
46+ String EstateManagementApi ,
47+ String FileProcessorApi ,
48+ String SecurityService ,
49+ String TestHostApi ,
50+ String TransactionProcessorApi , Guid EstateId ) : BaseConfiguration ( ClientId , ClientSecret , EstateManagementApi , FileProcessorApi , SecurityService , TestHostApi , TransactionProcessorApi ) ;
51+
52+ public record SettlementJobConfig ( String ClientId ,
53+ String ClientSecret ,
54+ String EstateManagementApi ,
55+ String FileProcessorApi ,
56+ String SecurityService ,
57+ String TestHostApi ,
58+ String TransactionProcessorApi , Guid EstateId ) : BaseConfiguration ( ClientId , ClientSecret , EstateManagementApi , FileProcessorApi , SecurityService , TestHostApi , TransactionProcessorApi ) ;
59+
60+ public record TransactionJobConfig ( String ClientId ,
61+ String ClientSecret ,
62+ String EstateManagementApi ,
63+ String FileProcessorApi ,
64+ String SecurityService ,
65+ String TestHostApi ,
66+ String TransactionProcessorApi , Guid EstateId , Guid MerchantId , Boolean IsLogon , List < String > ContractNames ) : BaseConfiguration ( ClientId , ClientSecret , EstateManagementApi , FileProcessorApi , SecurityService , TestHostApi , TransactionProcessorApi ) ;
67+
68+ public record FileUploadJobConfig ( String ClientId ,
69+ String ClientSecret ,
70+ String EstateManagementApi ,
71+ String FileProcessorApi ,
72+ String SecurityService ,
73+ String TestHostApi ,
74+ String TransactionProcessorApi , Guid EstateId , Guid MerchantId , List < String > ContractNames , Guid UserId ) : BaseConfiguration ( ClientId , ClientSecret , EstateManagementApi , FileProcessorApi , SecurityService , TestHostApi , TransactionProcessorApi ) ;
75+
76+ public record ReplayParkedQueueJobConfig ( String ClientId ,
77+ String ClientSecret ,
78+ String EstateManagementApi ,
79+ String FileProcessorApi ,
80+ String SecurityService ,
81+ String TestHostApi ,
82+ String TransactionProcessorApi , String EventStoreAddress ) : BaseConfiguration ( ClientId , ClientSecret , EstateManagementApi , FileProcessorApi , SecurityService , TestHostApi , TransactionProcessorApi ) ;
83+
84+ public static class Helpers
85+ {
86+ public static T LoadJobConfig < T > ( JobDataMap jobDataMap )
87+ {
88+ String standardConfiguration = jobDataMap . GetString ( "Standard Configuration" ) ;
89+ String jobConfiguration = jobDataMap . GetString ( "Job Configuration" ) ;
90+ string fullConfig = Helpers . MergeJsonConfig ( standardConfiguration , jobConfiguration ) ;
91+ T configuration = JsonConvert . DeserializeObject < T > ( fullConfig ) ;
92+
93+ return configuration ;
94+ }
95+
96+ public static String MergeJsonConfig ( String jsonDocument1 , String jsonDocument2 )
97+ {
98+ using ( JsonDocument doc1 = JsonDocument . Parse ( jsonDocument1 ) )
99+ using ( JsonDocument doc2 = JsonDocument . Parse ( jsonDocument2 ) )
100+ {
101+ JsonObject mergedObject = new JsonObject ( ) ;
102+
103+ foreach ( var property in doc1 . RootElement . EnumerateObject ( ) )
104+ {
105+ mergedObject . Add ( property . Name , property . Value . Clone ( ) ) ;
106+ }
107+
108+ foreach ( var property in doc2 . RootElement . EnumerateObject ( ) )
109+ {
110+ if ( mergedObject . ContainsKey ( property . Name ) && property . Value . ValueKind == JsonValueKind . Array )
111+ {
112+ JsonElement existingArray = mergedObject [ property . Name ] ;
113+ JsonElement newArray = property . Value ;
114+
115+ List < JsonElement > mergedArray = existingArray . EnumerateArray ( ) . ToList ( ) ;
116+ mergedArray . AddRange ( newArray . EnumerateArray ( ) ) ;
117+
118+ mergedObject [ property . Name ] = JsonDocument . Parse ( JsonSerializer . Serialize ( mergedArray ) ) . RootElement ;
119+ }
120+ else
121+ {
122+ mergedObject . Add ( property . Name , property . Value . Clone ( ) ) ;
123+ }
124+ }
125+
126+ string mergedJson = JsonSerializer . Serialize ( mergedObject ) ;
127+ return mergedJson ;
128+ }
129+ }
130+
131+ internal class JsonObject : Dictionary < string , JsonElement >
132+ {
133+ }
134+ }
33135}
0 commit comments