Skip to content

Commit

Permalink
refactor(ImportData): refactors the notification of the Import Data P…
Browse files Browse the repository at this point in the history
…rogress to the sockets.
  • Loading branch information
KevSanchez committed Feb 21, 2025
1 parent 9fe5f12 commit a3e25a2
Show file tree
Hide file tree
Showing 24 changed files with 250 additions and 327 deletions.
20 changes: 4 additions & 16 deletions api/src/modules/events/app-events.module.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
import { Global, Module } from '@nestjs/common';
import { CqrsModule } from '@nestjs/cqrs';
import { ImportProgressHandler } from 'modules/events/import-data-progress/import-progress.handler';
import { ImportProgressEmitter } from 'modules/events/import-data-progress/import-progress.emitter';
import { WebSocketsModule } from 'modules/notifications/websockets/websockets.module';
import { ImportProgressSocket } from 'modules/events/import-data-progress/import-progress.socket';
import { ImportProgressTrackerFactory } from 'modules/events/import-data-progress/import-progress.tracker.factory';
import { CacheModule } from '@nestjs/cache-manager';

@Global()
@Module({
imports: [CqrsModule, WebSocketsModule],
providers: [
ImportProgressHandler,
ImportProgressEmitter,
ImportProgressSocket,
ImportProgressTrackerFactory,
],
exports: [
ImportProgressEmitter,
ImportProgressTrackerFactory,
ImportProgressSocket,
CqrsModule,
],
imports: [CqrsModule, WebSocketsModule, CacheModule.register()], /// Might be problematic
providers: [ImportProgressSocket],
exports: [ImportProgressSocket, CqrsModule],
})
export class AppEventsModule {}

This file was deleted.

This file was deleted.

This file was deleted.

4 changes: 3 additions & 1 deletion api/src/modules/geo-coding/geo-coding.module.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Module } from '@nestjs/common';
import { forwardRef, Module } from '@nestjs/common';
import { CacheModule } from '@nestjs/cache-manager';
import { AdminRegionsModule } from 'modules/admin-regions/admin-regions.module';
import { GeoRegionsModule } from 'modules/geo-regions/geo-regions.module';
Expand All @@ -18,6 +18,7 @@ import {
import { GoogleMapsGeocoder } from 'modules/geo-coding/geocoders/google-maps.geocoder';
import * as redisStore from 'cache-manager-redis-store';
import * as config from 'config';
import { ImportDataModule } from 'modules/import-data/import-data.module';

const geocodingCacheConfig: any = config.get('geocodingCache');

Expand All @@ -40,6 +41,7 @@ const geocodingCacheEnabled: boolean =
db: geocodingCacheConfig.database,
ttl: geocodingCacheTTL,
}),
forwardRef(() => ImportDataModule),
],
providers: [
{
Expand Down
20 changes: 13 additions & 7 deletions api/src/modules/geo-coding/geo-coding.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ import {
} from 'modules/sourcing-locations/sourcing-location.entity';
import { GeoCodingAbstractClass } from 'modules/geo-coding/geo-coding-abstract-class';
import { AdminRegionOfProductionService } from 'modules/geo-coding/strategies/admin-region-of-production.service';
import { GeoCodingProgressTracker } from 'modules/geo-coding/progress-tracker/geo-coding.progress-tracker';
import { ImportProgressTrackerFactory } from '../events/import-data-progress/import-progress.tracker.factory';
import { ImportDataProgressEmitter } from 'modules/import-data/cqrs/import-data-progress.emitter';

interface locationInfo {
locationAddressInput?: string;
Expand All @@ -32,7 +31,7 @@ export class GeoCodingService extends GeoCodingAbstractClass {
protected readonly countryOfProductionService: CountryOfProductionGeoCodingStrategy,
protected readonly unknownLocationService: UnknownLocationGeoCodingStrategy,
protected readonly adminRegionOfProductionService: AdminRegionOfProductionService,
protected readonly progressTrackerFactory: ImportProgressTrackerFactory,
protected readonly importDataProgressEmitter: ImportDataProgressEmitter,
) {
super();
}
Expand All @@ -46,8 +45,7 @@ export class GeoCodingService extends GeoCodingAbstractClass {
const geoCodedSourcingData: SourcingData[] = [];
const errors: any[] = [];
const totalLocations: number = sourcingData.length;
const progressTracker: GeoCodingProgressTracker =
this.progressTrackerFactory.createGeoCodingTracker({ totalLocations });
let locationsSoFar: number = 0;
for (let i: number = 0; i < totalLocations; i++) {
const location: SourcingData = sourcingData[i];
this.logger.debug(
Expand Down Expand Up @@ -90,7 +88,11 @@ export class GeoCodingService extends GeoCodingAbstractClass {
await this.geoCodeAdminRegionOfProductionLocationType(location),
);
}
progressTracker.trackProgress();

locationsSoFar++;
this.importDataProgressEmitter.emitGeocodingProgress(
(locationsSoFar / totalLocations) * 100,
);
} catch (e: any) {
errors.push({
row: i + 5,
Expand All @@ -99,7 +101,11 @@ export class GeoCodingService extends GeoCodingAbstractClass {
sheet: 'sourcingData',
column: null,
});
progressTracker.trackProgress();

locationsSoFar++;
this.importDataProgressEmitter.emitGeocodingProgress(
(locationsSoFar / totalLocations) * 100,
);
}
}

Expand Down

This file was deleted.

6 changes: 3 additions & 3 deletions api/src/modules/h3-data/h3-data.module.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Module } from '@nestjs/common';
import { forwardRef, Module } from '@nestjs/common';
import { H3DataController } from 'modules/h3-data/h3-data.controller';
import { H3DataService } from 'modules/h3-data/h3-data.service';
import { TypeOrmModule } from '@nestjs/typeorm';
Expand All @@ -24,10 +24,10 @@ import { AuthorizationModule } from 'modules/authorization/authorization.module'
IndicatorsModule,
UnitConversionsModule,
SourcingRecordsModule,
AdminRegionsModule,
forwardRef(() => AdminRegionsModule),
SuppliersModule,
BusinessUnitsModule,
SourcingLocationsModule,
forwardRef(() => SourcingLocationsModule),
AuthorizationModule,
],
controllers: [H3DataController],
Expand Down
8 changes: 5 additions & 3 deletions api/src/modules/impact/impact.module.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Module } from '@nestjs/common';
import { forwardRef, Module } from '@nestjs/common';
import { ImpactService } from 'modules/impact/impact.service';
import { ImpactController } from 'modules/impact/impact.controller';
import { IndicatorsModule } from 'modules/indicators/indicators.module';
Expand All @@ -17,18 +17,20 @@ import { BaseImpactService } from 'modules/impact/base-impact.service';
import { ImpactRepository } from 'modules/impact/impact.repository';
import { ImpactReportController } from 'modules/impact/impact-report.controller';
import { ImpactReportsModule } from 'modules/impact/reports/impact-reports.module';
import { ImportDataModule } from 'modules/import-data/import-data.module';

@Module({
imports: [
IndicatorsModule,
SourcingRecordsModule,
BusinessUnitsModule,
AdminRegionsModule,
forwardRef(() => AdminRegionsModule),
SuppliersModule,
MaterialsModule,
SourcingLocationsModule,
forwardRef(() => SourcingLocationsModule),
AuthorizationModule,
ImpactReportsModule,
forwardRef(() => ImportDataModule),
],
providers: [
ImpactRepository,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ImportProgressEmitter } from 'modules/events/import-data-progress/import-progress.emitter';
import { ImportDataProgressEmitter } from 'modules/import-data/cqrs/import-data-progress.emitter';

export class ImpactCalculationProgressTracker {
totalRecords: number;
Expand All @@ -7,15 +7,14 @@ export class ImpactCalculationProgressTracker {
private interval: NodeJS.Timer | null = null;

constructor(
private readonly importProgressEmitter: ImportProgressEmitter,
private readonly importDataProgressEmitter: ImportDataProgressEmitter,
private readonly importTrackInfo: {
totalRecords: number;
totalChunks: number;
startingPercentage?: number;
estimatedTime?: number;
},
) {
this.importProgressEmitter = importProgressEmitter;
this.totalRecords = importTrackInfo.totalRecords;
const startingPercentage: number = importTrackInfo.startingPercentage ?? 0;
this.progress = startingPercentage;
Expand All @@ -26,9 +25,7 @@ export class ImpactCalculationProgressTracker {
trackProgress(): void {
this.progress += this.progressPerChunk;

this.importProgressEmitter.emitImpactCalculationProgress({
progress: this.getProgress(),
});
this.importDataProgressEmitter.emitImpactCalculationProgress(this.progress);
}

private getProgress(): number {
Expand All @@ -43,9 +40,9 @@ export class ImpactCalculationProgressTracker {
this.interval = setInterval(() => {
this.progress += progressIncrement;
this.progress = Math.min(this.progress, maxProgress);
this.importProgressEmitter.emitImpactCalculationProgress({
progress: this.getProgress(),
});
this.importDataProgressEmitter.emitImpactCalculationProgress(
this.progress,
);

if (this.progress >= maxProgress) {
this.stopProgressInterval();
Expand Down
Loading

0 comments on commit a3e25a2

Please sign in to comment.