Skip to content

Commit 9223acd

Browse files
authored
Fix cross-module dependency between MonitoringModule and UserModule (#148)
MonitoringModule was directly importing LightningWalletEntity and LightningWalletRepository from the user subdomain, bypassing module boundaries. Use forwardRef to properly declare the circular dependency between MonitoringModule and UserModule. Access balance data through LightningWalletService instead of the repository directly, keeping database access encapsulated in the service layer.
1 parent e478df2 commit 9223acd

File tree

4 files changed

+20
-12
lines changed

4 files changed

+20
-12
lines changed

src/subdomains/monitoring/monitoring.module.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Module } from '@nestjs/common';
1+
import { forwardRef, Module } from '@nestjs/common';
22
import { TypeOrmModule } from '@nestjs/typeorm';
33
import { BlockchainModule } from 'src/integration/blockchain/blockchain.module';
44
import { EvmRegistryModule } from 'src/integration/blockchain/shared/evm/registry/evm-registry.module';
@@ -8,8 +8,7 @@ import { AlchemyWebhookModule } from '../alchemy/alchemy-webhook.module';
88
import { BoltzModule } from '../boltz/boltz.module';
99
import { AssetModule } from '../master-data/asset/asset.module';
1010
import { PricingModule } from '../pricing/pricing.module';
11-
import { LightningWalletEntity } from '../user/domain/entities/lightning-wallet.entity';
12-
import { LightningWalletRepository } from '../user/application/repositories/lightning-wallet.repository';
11+
import { UserModule } from '../user/user.module';
1312
import { MonitoringController } from './controllers/monitoring.controller';
1413
import { MonitoringBalanceEntity } from './entities/monitoring-balance.entity';
1514
import { MonitoringEvmBalanceEntity } from './entities/monitoring-evm-balance.entity';
@@ -23,7 +22,8 @@ import { MonitoringService } from './services/monitoring.service';
2322

2423
@Module({
2524
imports: [
26-
TypeOrmModule.forFeature([MonitoringEntity, MonitoringBalanceEntity, MonitoringEvmBalanceEntity, LightningWalletEntity]),
25+
TypeOrmModule.forFeature([MonitoringEntity, MonitoringBalanceEntity, MonitoringEvmBalanceEntity]),
26+
forwardRef(() => UserModule),
2727
SharedModule,
2828
PricingModule,
2929
AssetModule,
@@ -38,7 +38,6 @@ import { MonitoringService } from './services/monitoring.service';
3838
MonitoringRepository,
3939
MonitoringBalanceRepository,
4040
MonitoringEvmBalanceRepository,
41-
LightningWalletRepository,
4241
MonitoringService,
4342
MonitoringEvmService,
4443
BalanceAlertService,

src/subdomains/monitoring/services/monitoring.service.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Injectable, InternalServerErrorException, OnModuleInit } from '@nestjs/common';
1+
import { forwardRef, Inject, Injectable, InternalServerErrorException, OnModuleInit } from '@nestjs/common';
22
import { Cron, CronExpression } from '@nestjs/schedule';
33
import { Config, Process } from 'src/config/config';
44
import { BitcoinClient } from 'src/integration/blockchain/bitcoin/bitcoin-client';
@@ -15,7 +15,7 @@ import { QueueHandler } from 'src/shared/utils/queue-handler';
1515
import { AssetService } from 'src/subdomains/master-data/asset/services/asset.service';
1616
import { CoinGeckoService } from 'src/subdomains/pricing/services/coingecko.service';
1717
import { LightningWalletTotalBalanceDto } from 'src/subdomains/user/application/dto/lightning-wallet.dto';
18-
import { LightningWalletRepository } from 'src/subdomains/user/application/repositories/lightning-wallet.repository';
18+
import { LightningWalletService } from 'src/subdomains/user/application/services/lightning-wallet.service';
1919
import { MonitoringBlockchainBalance } from '../dto/monitoring.dto';
2020
import { MonitoringBalanceEntity } from '../entities/monitoring-balance.entity';
2121
import { MonitoringBalanceRepository } from '../repositories/monitoring-balance.repository';
@@ -39,7 +39,8 @@ export class MonitoringService implements OnModuleInit {
3939
private readonly evmRegistryService: EvmRegistryService,
4040
private readonly monitoringRepository: MonitoringRepository,
4141
private readonly monitoringBalanceRepository: MonitoringBalanceRepository,
42-
private readonly lightningWalletRepository: LightningWalletRepository,
42+
@Inject(forwardRef(() => LightningWalletService))
43+
private readonly lightningWalletService: LightningWalletService,
4344
) {
4445
this.bitcoinClient = bitcoinservice.getDefaultClient();
4546
this.lightningClient = lightningService.getDefaultClient();
@@ -76,8 +77,8 @@ export class MonitoringService implements OnModuleInit {
7677

7778
try {
7879
const internalWalletIds = Config.blockchain.lightning.lnbits.internalWalletIds;
79-
const internalBalances = await this.lightningWalletRepository.getInternalBalances(internalWalletIds);
80-
const customerBalances = await this.lightningWalletRepository.getCustomerBalances(internalWalletIds);
80+
const internalBalances = await this.lightningWalletService.getInternalBalances(internalWalletIds);
81+
const customerBalances = await this.lightningWalletService.getCustomerBalances(internalWalletIds);
8182

8283
await this.processBalanceMonitoring(internalBalances, customerBalances);
8384
} catch (e) {

src/subdomains/user/application/services/lightning-wallet.service.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ export class LightningWalletService {
6767
return this.lightningWalletRepository.getByWalletId(walletId);
6868
}
6969

70+
async getInternalBalances(internalWalletIds: string[]) {
71+
return this.lightningWalletRepository.getInternalBalances(internalWalletIds);
72+
}
73+
74+
async getCustomerBalances(excludeWalletIds: string[]) {
75+
return this.lightningWalletRepository.getCustomerBalances(excludeWalletIds);
76+
}
77+
7078
async updateLightningWalletBalances(): Promise<void> {
7179
const userTransactionBalances = await this.userTransactionRepository.getBalances();
7280

src/subdomains/user/user.module.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Module } from '@nestjs/common';
1+
import { forwardRef, Module } from '@nestjs/common';
22
import { TypeOrmModule } from '@nestjs/typeorm';
33
import { LnbitsWebhookModule } from 'src/integration/blockchain/lightning/lnbits-webhook.module';
44
import { IntegrationModule } from 'src/integration/integration.module';
@@ -43,7 +43,7 @@ import { WalletEntity } from './domain/entities/wallet.entity';
4343
]),
4444
SharedModule,
4545
IntegrationModule,
46-
MonitoringModule,
46+
forwardRef(() => MonitoringModule),
4747
BoltzModule,
4848
AssetModule,
4949
LnbitsWebhookModule,

0 commit comments

Comments
 (0)