Skip to content

Commit b9416f1

Browse files
committed
Updated webhook module, refoctored code
1 parent 4bffadf commit b9416f1

19 files changed

+1493
-1264
lines changed

packages/apps/reputation-oracle/server/src/app.module.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { DatabaseModule } from './database/database.module';
77
import { HttpValidationPipe } from './common/pipes';
88
import { HealthModule } from './modules/health/health.module';
99
import { ReputationModule } from './modules/reputation/reputation.module';
10-
import { WebhookModule } from './modules/webhook/webhook.module';
1110
import { Web3Module } from './modules/web3/web3.module';
1211
import { envValidator } from './common/config';
1312
import { AuthModule } from './modules/auth/auth.module';
@@ -22,6 +21,8 @@ import { HCaptchaModule } from './integrations/hcaptcha/hcaptcha.module';
2221
import { ExceptionFilter } from './common/exceptions/exception.filter';
2322
import { QualificationModule } from './modules/qualification/qualification.module';
2423
import { EscrowCompletionTrackingModule } from './modules/escrow-completion-tracking/escrow-completion-tracking.module';
24+
import { WebhookIncomingModule } from './modules/webhook/webhook-incoming.module';
25+
import { WebhookOutgoingModule } from './modules/webhook/webhook-outgoing.module';
2526

2627
@Module({
2728
providers: [
@@ -49,7 +50,8 @@ import { EscrowCompletionTrackingModule } from './modules/escrow-completion-trac
4950
DatabaseModule,
5051
HealthModule,
5152
ReputationModule,
52-
WebhookModule,
53+
WebhookIncomingModule,
54+
WebhookOutgoingModule,
5355
Web3Module,
5456
AuthModule,
5557
KycModule,

packages/apps/reputation-oracle/server/src/common/constants/errors.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export enum ErrorWebhook {
1717
export enum ErrorEscrowCompletionTracking {
1818
NotFound = 'Escrow completion tracking not found',
1919
NotCreated = 'Escrow completion tracking has not been created',
20+
PendingProcessingFailed = 'Failed to process pending escrow completion tracking',
21+
PaidProcessingFailed = 'Failed to process paid escrow completion tracking',
2022
}
2123

2224
/**

packages/apps/reputation-oracle/server/src/database/database.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { QualificationEntity } from '../modules/qualification/qualification.enti
2121
import { UserQualificationEntity } from '../modules/qualification/user-qualification.entity';
2222
import { WebhookIncomingEntity } from '../modules/webhook/webhook-incoming.entity';
2323
import { WebhookOutgoingEntity } from '../modules/webhook/webhook-outgoing.entity';
24-
import { EscrowCompletionTrackingEntity } from 'src/modules/escrow-completion-tracking/escrow-completion-tracking.entity';
24+
import { EscrowCompletionTrackingEntity } from '../modules/escrow-completion-tracking/escrow-completion-tracking.entity';
2525

2626
@Module({
2727
imports: [

packages/apps/reputation-oracle/server/src/modules/cron-job/cron-job.module.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,19 @@ import { CronJobService } from './cron-job.service';
44
import { CronJobRepository } from './cron-job.repository';
55
import { TypeOrmModule } from '@nestjs/typeorm';
66
import { CronJobEntity } from './cron-job.entity';
7-
import { WebhookModule } from '../webhook/webhook.module';
87
import { ConfigModule } from '@nestjs/config';
8+
import { EscrowCompletionTrackingModule } from '../escrow-completion-tracking/escrow-completion-tracking.module';
9+
import { WebhookIncomingModule } from '../webhook/webhook-incoming.module';
10+
import { WebhookOutgoingModule } from '../webhook/webhook-outgoing.module';
911

1012
@Global()
1113
@Module({
1214
imports: [
1315
TypeOrmModule.forFeature([CronJobEntity]),
1416
ConfigModule,
15-
WebhookModule,
17+
WebhookIncomingModule,
18+
WebhookOutgoingModule,
19+
EscrowCompletionTrackingModule,
1620
],
1721
providers: [CronJobService, CronJobRepository],
1822
exports: [CronJobService],

packages/apps/reputation-oracle/server/src/modules/cron-job/cron-job.service.spec.ts

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@ import { Test, TestingModule } from '@nestjs/testing';
22
import { CronJobService } from './cron-job.service';
33
import { HttpStatus, Logger } from '@nestjs/common';
44
import { CronJobRepository } from './cron-job.repository';
5-
import { WebhookService } from '../webhook/webhook.service';
65
import { CronJobEntity } from './cron-job.entity';
76
import { CronJobType } from '../../common/enums/cron-job';
87
import { ErrorCronJob } from '../../common/constants/errors';
98
import { ControlledError } from '../../common/errors/controlled';
9+
import { WebhookOutgoingService } from '../webhook/webhook-outgoing.service';
10+
import { WebhookIncomingService } from '../webhook/webhook-incoming.service';
11+
import { EscrowCompletionTrackingService } from '../escrow-completion-tracking/escrow-completion-tracking.service';
1012

1113
describe('CronJobService', () => {
1214
let service: CronJobService;
1315
let cronJobRepository: jest.Mocked<CronJobRepository>;
14-
let webhookService: jest.Mocked<WebhookService>;
16+
let webhookIncomingService: jest.Mocked<WebhookIncomingService>;
17+
let webhookOutgoingService: jest.Mocked<WebhookOutgoingService>;
18+
let escrowCompletionTrackingService: jest.Mocked<EscrowCompletionTrackingService>;
1519

1620
beforeEach(async () => {
1721
const module: TestingModule = await Test.createTestingModule({
@@ -26,12 +30,22 @@ describe('CronJobService', () => {
2630
},
2731
},
2832
{
29-
provide: WebhookService,
33+
provide: WebhookIncomingService,
3034
useValue: {
3135
processPendingIncomingWebhooks: jest.fn(),
36+
},
37+
},
38+
{
39+
provide: WebhookOutgoingService,
40+
useValue: {
41+
processPendingOutgoingWebhooks: jest.fn(),
42+
},
43+
},
44+
{
45+
provide: EscrowCompletionTrackingService,
46+
useValue: {
3247
processPendingEscrowCompletion: jest.fn(),
3348
processPaidEscrowCompletion: jest.fn(),
34-
processPendingOutgoingWebhooks: jest.fn(),
3549
},
3650
},
3751
{
@@ -46,7 +60,11 @@ describe('CronJobService', () => {
4660

4761
service = module.get<CronJobService>(CronJobService);
4862
cronJobRepository = module.get(CronJobRepository);
49-
webhookService = module.get(WebhookService);
63+
webhookIncomingService = module.get(WebhookIncomingService);
64+
webhookOutgoingService = module.get(WebhookOutgoingService);
65+
escrowCompletionTrackingService = module.get(
66+
EscrowCompletionTrackingService,
67+
);
5068
});
5169

5270
describe('startCronJob', () => {
@@ -164,7 +182,7 @@ describe('CronJobService', () => {
164182
await service.processPendingIncomingWebhooks();
165183

166184
expect(
167-
webhookService.processPendingIncomingWebhooks,
185+
webhookIncomingService.processPendingIncomingWebhooks,
168186
).not.toHaveBeenCalled();
169187
});
170188

@@ -179,7 +197,9 @@ describe('CronJobService', () => {
179197

180198
await service.processPendingIncomingWebhooks();
181199

182-
expect(webhookService.processPendingIncomingWebhooks).toHaveBeenCalled();
200+
expect(
201+
webhookIncomingService.processPendingIncomingWebhooks,
202+
).toHaveBeenCalled();
183203
expect(service.startCronJob).toHaveBeenCalled();
184204
expect(service.completeCronJob).toHaveBeenCalled();
185205
});
@@ -193,7 +213,7 @@ describe('CronJobService', () => {
193213
.spyOn(service, 'completeCronJob')
194214
.mockResolvedValue(new CronJobEntity());
195215

196-
webhookService.processPendingIncomingWebhooks.mockRejectedValue(
216+
webhookIncomingService.processPendingIncomingWebhooks.mockRejectedValue(
197217
new Error('Processing error'),
198218
);
199219

@@ -210,7 +230,7 @@ describe('CronJobService', () => {
210230
await service.processPendingEscrowCompletion();
211231

212232
expect(
213-
webhookService.processPendingEscrowCompletion,
233+
escrowCompletionTrackingService.processPendingEscrowCompletion,
214234
).not.toHaveBeenCalled();
215235
});
216236

@@ -225,7 +245,9 @@ describe('CronJobService', () => {
225245

226246
await service.processPendingEscrowCompletion();
227247

228-
expect(webhookService.processPendingEscrowCompletion).toHaveBeenCalled();
248+
expect(
249+
escrowCompletionTrackingService.processPendingEscrowCompletion,
250+
).toHaveBeenCalled();
229251
expect(service.startCronJob).toHaveBeenCalled();
230252
expect(service.completeCronJob).toHaveBeenCalled();
231253
});
@@ -239,7 +261,7 @@ describe('CronJobService', () => {
239261
.spyOn(service, 'completeCronJob')
240262
.mockResolvedValue(new CronJobEntity());
241263

242-
webhookService.processPendingEscrowCompletion.mockRejectedValue(
264+
escrowCompletionTrackingService.processPendingEscrowCompletion.mockRejectedValue(
243265
new Error('Processing error'),
244266
);
245267

@@ -255,7 +277,9 @@ describe('CronJobService', () => {
255277

256278
await service.processPaidEscrowCompletion();
257279

258-
expect(webhookService.processPaidEscrowCompletion).not.toHaveBeenCalled();
280+
expect(
281+
escrowCompletionTrackingService.processPaidEscrowCompletion,
282+
).not.toHaveBeenCalled();
259283
});
260284

261285
it('should process paid escrow completion and complete the cron job', async () => {
@@ -269,7 +293,9 @@ describe('CronJobService', () => {
269293

270294
await service.processPaidEscrowCompletion();
271295

272-
expect(webhookService.processPaidEscrowCompletion).toHaveBeenCalled();
296+
expect(
297+
escrowCompletionTrackingService.processPaidEscrowCompletion,
298+
).toHaveBeenCalled();
273299
expect(service.startCronJob).toHaveBeenCalled();
274300
expect(service.completeCronJob).toHaveBeenCalled();
275301
});
@@ -283,7 +309,7 @@ describe('CronJobService', () => {
283309
.spyOn(service, 'completeCronJob')
284310
.mockResolvedValue(new CronJobEntity());
285311

286-
webhookService.processPaidEscrowCompletion.mockRejectedValue(
312+
escrowCompletionTrackingService.processPaidEscrowCompletion.mockRejectedValue(
287313
new Error('Processing error'),
288314
);
289315

@@ -300,7 +326,7 @@ describe('CronJobService', () => {
300326
await service.processPendingOutgoingWebhooks();
301327

302328
expect(
303-
webhookService.processPendingOutgoingWebhooks,
329+
webhookOutgoingService.processPendingOutgoingWebhooks,
304330
).not.toHaveBeenCalled();
305331
});
306332

@@ -315,7 +341,9 @@ describe('CronJobService', () => {
315341

316342
await service.processPendingOutgoingWebhooks();
317343

318-
expect(webhookService.processPendingOutgoingWebhooks).toHaveBeenCalled();
344+
expect(
345+
webhookOutgoingService.processPendingOutgoingWebhooks,
346+
).toHaveBeenCalled();
319347
expect(service.startCronJob).toHaveBeenCalled();
320348
expect(service.completeCronJob).toHaveBeenCalled();
321349
});
@@ -329,7 +357,7 @@ describe('CronJobService', () => {
329357
.spyOn(service, 'completeCronJob')
330358
.mockResolvedValue(new CronJobEntity());
331359

332-
webhookService.processPendingOutgoingWebhooks.mockRejectedValue(
360+
webhookOutgoingService.processPendingOutgoingWebhooks.mockRejectedValue(
333361
new Error('Processing error'),
334362
);
335363

packages/apps/reputation-oracle/server/src/modules/cron-job/cron-job.service.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,21 @@ import { ErrorCronJob } from '../../common/constants/errors';
55

66
import { CronJobEntity } from './cron-job.entity';
77
import { CronJobRepository } from './cron-job.repository';
8-
import { WebhookService } from '../webhook/webhook.service';
98
import { ControlledError } from '../../common/errors/controlled';
109
import { Cron } from '@nestjs/schedule';
10+
import { WebhookIncomingService } from '../webhook/webhook-incoming.service';
11+
import { WebhookOutgoingService } from '../webhook/webhook-outgoing.service';
12+
import { EscrowCompletionTrackingService } from '../escrow-completion-tracking/escrow-completion-tracking.service';
1113

1214
@Injectable()
1315
export class CronJobService {
1416
private readonly logger = new Logger(CronJobService.name);
1517

1618
constructor(
1719
private readonly cronJobRepository: CronJobRepository,
18-
private readonly webhookService: WebhookService,
20+
private readonly webhookIncomingService: WebhookIncomingService,
21+
private readonly webhookOutgoingService: WebhookOutgoingService,
22+
private readonly escrowCompletionTrackingService: EscrowCompletionTrackingService,
1923
) {}
2024

2125
/**
@@ -93,7 +97,7 @@ export class CronJobService {
9397
);
9498

9599
try {
96-
await this.webhookService.processPendingIncomingWebhooks();
100+
await this.webhookIncomingService.processPendingIncomingWebhooks();
97101
} catch (e) {
98102
this.logger.error(e);
99103
}
@@ -124,7 +128,7 @@ export class CronJobService {
124128
);
125129

126130
try {
127-
await this.webhookService.processPendingEscrowCompletion();
131+
await this.escrowCompletionTrackingService.processPendingEscrowCompletion();
128132
} catch (e) {
129133
this.logger.error(e);
130134
}
@@ -154,7 +158,7 @@ export class CronJobService {
154158
);
155159

156160
try {
157-
await this.webhookService.processPaidEscrowCompletion();
161+
await this.escrowCompletionTrackingService.processPaidEscrowCompletion();
158162
} catch (e) {
159163
this.logger.error(e);
160164
}
@@ -179,7 +183,7 @@ export class CronJobService {
179183
);
180184

181185
try {
182-
await this.webhookService.processPendingOutgoingWebhooks();
186+
await this.webhookOutgoingService.processPendingOutgoingWebhooks();
183187
} catch (err) {
184188
this.logger.error(err);
185189
}

packages/apps/reputation-oracle/server/src/modules/escrow-completion-tracking/escrow-completion-tracking.module.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@ import { TypeOrmModule } from '@nestjs/typeorm';
55
import { EscrowCompletionTrackingEntity } from './escrow-completion-tracking.entity';
66
import { EscrowCompletionTrackingRepository } from './escrow-completion-tracking.repository';
77
import { EscrowCompletionTrackingService } from './escrow-completion-tracking.service';
8+
import { PayoutModule } from '../payout/payout.module';
9+
import { ReputationModule } from '../reputation/reputation.module';
10+
import { Web3Module } from '../web3/web3.module';
11+
import { WebhookOutgoingModule } from '../webhook/webhook-outgoing.module';
812

913
@Module({
1014
imports: [
1115
TypeOrmModule.forFeature([EscrowCompletionTrackingEntity]),
1216
ConfigModule,
17+
Web3Module,
18+
PayoutModule,
19+
ReputationModule,
20+
WebhookOutgoingModule,
1321
],
1422
providers: [
1523
Logger,

0 commit comments

Comments
 (0)