Skip to content

Commit e4b49cc

Browse files
Merge pull request #108 from TransactionProcessing/task/job_refactoring
New Jobs and updated Config added
2 parents 5e695a2 + 35b5603 commit e4b49cc

13 files changed

Lines changed: 232 additions & 292 deletions
Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
namespace JobTestDriver
1+
using Quartz;
2+
using Quartz.Core;
3+
using Quartz.Impl;
4+
5+
namespace JobTestDriver
26
{
37
using EstateManagement.Client;
48
using MessagingService.Client;
@@ -10,6 +14,7 @@
1014

1115
internal class Program{
1216
static async Task Main(string[] args){
17+
1318
//List<(String groupName, String streamName, Int64 parkedMessageCount)>? info = await Jobs.GetParkedQueueInformation("esdb://admin:changeit@192.168.0.133:2113?tls=false&tlsVerifyCert=false", CancellationToken.None);
1419
//foreach ((String groupName, String streamName, Int64 parkedMessageCount) infoItem in info){
1520
// Console.WriteLine($"Group: {infoItem.groupName} Stream: {infoItem.streamName} Parked Count: {infoItem.parkedMessageCount}");
@@ -32,39 +37,39 @@ static async Task Main(string[] args){
3237
// messagingServiceClient,
3338
// CancellationToken.None);
3439

35-
HttpClientHandler handler = new HttpClientHandler
36-
{
37-
ServerCertificateCustomValidationCallback = (message,
38-
cert,
39-
chain,
40-
errors) => {
41-
return true;
42-
}
43-
};
44-
HttpClient client = new HttpClient(handler);
45-
ISecurityServiceClient securityServiceClient = new SecurityServiceClient(delegate(String s){ return "https://192.168.1.167:5001"; },client); IEstateClient estateClient = new EstateClient(delegate (String s) { return "http://192.168.1.167:5000"; }, client);
46-
ITransactionProcessorClient transactionProcessorClient = new TransactionProcessorClient(delegate (String s) { return "https://eojrtqfzvyheu0l.m.pipedream.net"; }, client);
47-
String estateManagementApi = "http://192.168.1.167:5000";
48-
String fileProcessorApi = "http://192.168.1.167:5009";
49-
String testHostApi = "http://192.168.1.167:9000";
50-
String clientId = "serviceClient";
51-
String clientSecret = "d192cbc46d834d0da90e8a9d50ded543";
40+
//HttpClientHandler handler = new HttpClientHandler
41+
// {
42+
// ServerCertificateCustomValidationCallback = (message,
43+
// cert,
44+
// chain,
45+
// errors) => {
46+
// return true;
47+
// }
48+
// };
49+
//HttpClient client = new HttpClient(handler);
50+
//ISecurityServiceClient securityServiceClient = new SecurityServiceClient(delegate(String s){ return "https://192.168.1.167:5001"; },client); IEstateClient estateClient = new EstateClient(delegate (String s) { return "http://192.168.1.167:5000"; }, client);
51+
//ITransactionProcessorClient transactionProcessorClient = new TransactionProcessorClient(delegate (String s) { return "https://eojrtqfzvyheu0l.m.pipedream.net"; }, client);
52+
//String estateManagementApi = "http://192.168.1.167:5000";
53+
//String fileProcessorApi = "http://192.168.1.167:5009";
54+
//String testHostApi = "http://192.168.1.167:9000";
55+
//String clientId = "serviceClient";
56+
//String clientSecret = "d192cbc46d834d0da90e8a9d50ded543";
5257

53-
ITransactionDataGenerator t = new TransactionDataGenerator(securityServiceClient,
54-
estateClient,
55-
transactionProcessorClient,
56-
estateManagementApi,
57-
fileProcessorApi,
58-
testHostApi,
59-
clientId,
60-
clientSecret,
61-
RunningMode.Live);
62-
Guid estateId = Guid.Parse("435613ac-a468-47a3-ac4f-649d89764c22");
63-
Guid merchantId = Guid.Parse("ab1c99fb-1c6c-4694-9a32-b71be5d1da33");
64-
await Jobs.GenerateTransactions(t, estateId, merchantId, false, CancellationToken.None);
65-
//var d = TransactionDataGenerator.GetTransactionDateTime(new Random(), DateTime.Now);
66-
//Console.WriteLine(d);
67-
await Jobs.PerformSettlement(t, DateTime.Now,estateId, CancellationToken.None);
58+
//ITransactionDataGenerator t = new TransactionDataGenerator(securityServiceClient,
59+
// estateClient,
60+
// transactionProcessorClient,
61+
// estateManagementApi,
62+
// fileProcessorApi,
63+
// testHostApi,
64+
// clientId,
65+
// clientSecret,
66+
// RunningMode.Live);
67+
//Guid estateId = Guid.Parse("435613ac-a468-47a3-ac4f-649d89764c22");
68+
//Guid merchantId = Guid.Parse("ab1c99fb-1c6c-4694-9a32-b71be5d1da33");
69+
//await Jobs.GenerateTransactions(t, estateId, merchantId, false, CancellationToken.None);
70+
////var d = TransactionDataGenerator.GetTransactionDateTime(new Random(), DateTime.Now);
71+
////Console.WriteLine(d);
72+
//await Jobs.PerformSettlement(t, DateTime.Now,estateId, CancellationToken.None);
6873
}
6974
}
7075
}

TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs/BaseJob.cs

Lines changed: 13 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,7 @@ public abstract class BaseJob : IJob{
1616

1717
public String JobGroup{ get; private set; }
1818

19-
public String ClientSecret{ get; private set; }
20-
21-
public String ClientId{ get; private set; }
22-
23-
public String SecurityService { get; private set; }
24-
25-
public String EstateManagementApi { get; private set; }
26-
public String FileProcessorApi { get; private set; }
27-
public String TransactionProcessorApi { get; private set; }
28-
public String TestHostApi { get; private set; }
19+
public BaseConfiguration BaseConfiguration;
2920

3021
protected ITransactionDataGenerator CreateTransactionDataGenerator(String clientId, String clientSecret, RunningMode runningMode){
3122
ISecurityServiceClient securityServiceClient = Bootstrapper.GetService<ISecurityServiceClient>();
@@ -72,7 +63,7 @@ public async Task Execute(IJobExecutionContext context){
7263

7364
this.CacheConfiguration(context);
7465
Logger.LogInformation($"Running Job Group: [{this.JobGroup}] Name: [{this.JobName}]");
75-
this.LogConfiguration();
66+
//this.LogConfiguration();
7667

7768
Bootstrapper.ConfigureServices(context);
7869

@@ -81,39 +72,20 @@ public async Task Execute(IJobExecutionContext context){
8172
Logger.LogInformation($"Job Group: [{this.JobGroup}] Name: [{this.JobName}] completed");
8273
}
8374

84-
private void LogConfiguration(){
85-
Logger.LogInformation($"Client Id: [{this.ClientId}]");
86-
Logger.LogInformation($"EstateManagementApi is: [{this.EstateManagementApi}]");
87-
Logger.LogInformation($"FileProcessorApi is: [{this.FileProcessorApi}]");
88-
Logger.LogInformation($"SecurityService is: [{this.SecurityService}]");
89-
Logger.LogInformation($"TestHostApi is: [{this.TestHostApi}]");
90-
Logger.LogInformation($"TransactionProcessorApi is: [{this.TransactionProcessorApi}]");
91-
}
75+
//private void LogConfiguration(){
76+
// Logger.LogInformation($"Client Id: [{this.ClientId}]");
77+
// Logger.LogInformation($"EstateManagementApi is: [{this.EstateManagementApi}]");
78+
// Logger.LogInformation($"FileProcessorApi is: [{this.FileProcessorApi}]");
79+
// Logger.LogInformation($"SecurityService is: [{this.SecurityService}]");
80+
// Logger.LogInformation($"TestHostApi is: [{this.TestHostApi}]");
81+
// Logger.LogInformation($"TransactionProcessorApi is: [{this.TransactionProcessorApi}]");
82+
//}
9283

9384
private void CacheConfiguration(IJobExecutionContext context){
9485
this.JobName = context.JobDetail.Key.Name;
9586
this.JobGroup = context.JobDetail.Key.Group;
96-
this.ClientId = context.MergedJobDataMap.GetString("ClientId");
97-
this.ClientSecret = context.MergedJobDataMap.GetString("ClientSecret");
98-
99-
if (context.MergedJobDataMap.ContainsKey("EstateManagementApi")){
100-
this.EstateManagementApi = context.MergedJobDataMap.GetString("EstateManagementApi");
101-
}
102-
103-
if (context.MergedJobDataMap.ContainsKey("FileProcessorApi")){
104-
this.FileProcessorApi = context.MergedJobDataMap.GetString("FileProcessorApi");
105-
}
106-
107-
if (context.MergedJobDataMap.ContainsKey("SecurityService")){
108-
this.SecurityService = context.MergedJobDataMap.GetString("SecurityService");
109-
}
110-
111-
if (context.MergedJobDataMap.ContainsKey("TestHostApi")){
112-
this.TestHostApi = context.MergedJobDataMap.GetString("TestHostApi");
113-
}
114-
115-
if (context.MergedJobDataMap.ContainsKey("TransactionProcessorApi")){
116-
this.TransactionProcessorApi = context.MergedJobDataMap.GetString("TransactionProcessorApi");
117-
}
87+
88+
BaseConfiguration configuration = Helpers.LoadJobConfig<BaseConfiguration>(context.MergedJobDataMap);
89+
this.BaseConfiguration = configuration;
11890
}
11991
}

TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs/GenerateFileUploadsJob.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,11 @@ public class GenerateFileUploadsJob : BaseJob
1212
#region Methods
1313
public override async Task ExecuteJob(IJobExecutionContext context)
1414
{
15-
Guid estateId = context.MergedJobDataMap.GetGuidValueFromString("EstateId");
16-
Guid merchantId = context.MergedJobDataMap.GetGuidValueFromString("MerchantId");
17-
Guid userId = context.MergedJobDataMap.GetGuidValueFromString("UserId");
15+
FileUploadJobConfig configuration = Helpers.LoadJobConfig<FileUploadJobConfig>(context.MergedJobDataMap);
1816

19-
Logger.LogInformation($"Estate Id: [{estateId}]");
20-
Logger.LogInformation($"Merchant Id: [{merchantId}]");
21-
Logger.LogInformation($"User Id: [{userId}]");
22-
23-
ITransactionDataGenerator t = CreateTransactionDataGenerator(this.ClientId, this.ClientSecret, RunningMode.Live);
17+
ITransactionDataGenerator t = CreateTransactionDataGenerator(configuration.ClientId, configuration.ClientSecret, RunningMode.Live);
2418
t.TraceGenerated += TraceGenerated;
25-
await Jobs.GenerateFileUploads(t, estateId, merchantId, userId, context.CancellationToken);
19+
await Jobs.GenerateFileUploads(t, configuration, context.CancellationToken);
2620
}
2721
#endregion
2822
}

TransactionProcessing.SchedulerService/TransactionProcessing.SchedulerService.Jobs/GenerateMerchantStatementJob.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@ public class GenerateMerchantStatementJob : BaseJob
1010
{
1111
public override async Task ExecuteJob(IJobExecutionContext context)
1212
{
13-
Guid estateId = context.MergedJobDataMap.GetGuidValueFromString("EstateId");
13+
MerchantStatementJobConfig configuration = Helpers.LoadJobConfig<MerchantStatementJobConfig>(context.MergedJobDataMap);
1414

15-
Logger.LogInformation($"Estate Id: [{estateId}]");
16-
17-
ITransactionDataGenerator t = this.CreateTransactionDataGenerator(this.ClientId, this.ClientSecret, RunningMode.Live);
15+
ITransactionDataGenerator t = this.CreateTransactionDataGenerator(configuration.ClientId, configuration.ClientSecret, RunningMode.Live);
1816
t.TraceGenerated += TraceGenerated;
19-
await Jobs.GenerateMerchantStatements(t, estateId, context.CancellationToken);
17+
await Jobs.GenerateMerchantStatements(t, configuration, context.CancellationToken);
2018
}
2119
}
Lines changed: 114 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
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

Comments
 (0)