Skip to content

Commit abccefd

Browse files
authored
Merge pull request #1120 from RedisInsight/feature/RI-3357-nestjs-upgrade
Feature/ri 3357 nestjs upgrade
2 parents 9e0dfb5 + c3ceb7d commit abccefd

32 files changed

+1040
-985
lines changed

redisinsight/api/config/ormconfig.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ const ormConfig: TypeOrmModuleOptions = {
2929
NotificationEntity,
3030
],
3131
migrations,
32-
cli: {
33-
migrationsDir: 'migration',
34-
},
3532
};
3633

3734
export default ormConfig;

redisinsight/api/package.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@
3838
"typeorm:run": "yarn typeorm migration:run"
3939
},
4040
"dependencies": {
41-
"@nestjs/common": "^7.6.15",
42-
"@nestjs/core": "^7.0.0",
43-
"@nestjs/event-emitter": "^1.0.0",
44-
"@nestjs/platform-express": "^7.0.0",
45-
"@nestjs/platform-socket.io": "^8.2.3",
46-
"@nestjs/serve-static": "^2.1.3",
47-
"@nestjs/swagger": "^4.6.1",
48-
"@nestjs/typeorm": "^7.1.5",
49-
"@nestjs/websockets": "^8.2.3",
41+
"@nestjs/common": "^9.0.11",
42+
"@nestjs/core": "^9.0.11",
43+
"@nestjs/event-emitter": "^1.3.1",
44+
"@nestjs/platform-express": "^9.0.11",
45+
"@nestjs/platform-socket.io": "^9.0.11",
46+
"@nestjs/serve-static": "^3.0.0",
47+
"@nestjs/swagger": "^6.1.2",
48+
"@nestjs/typeorm": "^9.0.1",
49+
"@nestjs/websockets": "^9.0.11",
5050
"adm-zip": "^0.5.9",
5151
"analytics-node": "^4.0.1",
5252
"axios": "^0.25.0",
@@ -63,21 +63,21 @@
6363
"nest-router": "^1.0.9",
6464
"nest-winston": "^1.4.0",
6565
"reflect-metadata": "^0.1.13",
66-
"rxjs": "^6.6.7",
66+
"rxjs": "^7.5.6",
6767
"socket.io": "^4.4.0",
6868
"source-map-support": "^0.5.19",
6969
"sqlite3": "^5.0.11",
7070
"swagger-ui-express": "^4.1.4",
71-
"typeorm": "^0.2.29",
71+
"typeorm": "^0.3.9",
7272
"uuid": "^8.3.2",
7373
"winston": "^3.3.3",
7474
"winston-daily-rotate-file": "^4.5.0"
7575
},
7676
"devDependencies": {
7777
"@mochajs/json-file-reporter": "^1.3.0",
78-
"@nestjs/cli": "^7.5.4",
79-
"@nestjs/schematics": "^7.0.0",
80-
"@nestjs/testing": "^7.0.0",
78+
"@nestjs/cli": "^9.1.2",
79+
"@nestjs/schematics": "^9.0.3",
80+
"@nestjs/testing": "^9.0.11",
8181
"@types/axios": "^0.14.0",
8282
"@types/express": "^4.17.3",
8383
"@types/jest": "^26.0.15",

redisinsight/api/src/__mocks__/common.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export const mockCreateQueryBuilder = jest.fn(() => ({
4646

4747
export const mockRepository = jest.fn(() => ({
4848
findOne: jest.fn(),
49+
findOneBy: jest.fn(),
4950
find: jest.fn(),
5051
findByIds: jest.fn(),
5152
create: jest.fn(),

redisinsight/api/src/modules/core/core.module.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import { TypeOrmModule } from '@nestjs/typeorm';
33
import { CaCertificateEntity } from 'src/modules/core/models/ca-certificate.entity';
44
import { ClientCertificateEntity } from 'src/modules/core/models/client-certificate.entity';
55
import { PlainEncryptionStrategy } from 'src/modules/core/encryption/strategies/plain-encryption.strategy';
6-
import { AgreementsRepository } from './repositories/agreements.repository';
7-
import { ServerRepository } from './repositories/server.repository';
8-
import { SettingsRepository } from './repositories/settings.repository';
9-
import settingsOnPremiseFactory from './providers/settings-on-premise';
10-
import serverOnPremiseFactory from './providers/server-on-premise';
116
import { EncryptionService } from 'src/modules/core/encryption/encryption.service';
127
import { KeytarEncryptionStrategy } from 'src/modules/core/encryption/strategies/keytar-encryption.strategy';
8+
import { AgreementsEntity } from 'src/modules/core/models/agreements.entity';
9+
import { ServerEntity } from 'src/modules/core/models/server.entity';
10+
import { SettingsEntity } from 'src/modules/core/models/settings.entity';
11+
import settingsOnPremiseFactory from './providers/settings-on-premise';
12+
import serverOnPremiseFactory from './providers/server-on-premise';
1313
import { CaCertBusinessService } from './services/certificates/ca-cert-business/ca-cert-business.service';
1414
import { ClientCertBusinessService } from './services/certificates/client-cert-business/client-cert-business.service';
1515
import { RedisService } from './services/redis/redis.service';
@@ -32,11 +32,11 @@ export class CoreModule {
3232
module: CoreModule,
3333
imports: [
3434
TypeOrmModule.forFeature([
35+
ServerEntity,
36+
SettingsEntity,
37+
AgreementsEntity,
3538
CaCertificateEntity,
3639
ClientCertificateEntity,
37-
AgreementsRepository,
38-
ServerRepository,
39-
SettingsRepository,
4040
]),
4141
],
4242
providers: [
Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
1-
import { ServerRepository } from 'src/modules/core/repositories/server.repository';
2-
import { EventEmitter2 } from '@nestjs/event-emitter';
3-
import { EncryptionService } from 'src/modules/core/encryption/encryption.service';
41
import { ServerOnPremiseService } from './server-on-premise.service';
52

63
export default {
74
provide: 'SERVER_PROVIDER',
8-
useFactory: (
9-
repository: ServerRepository,
10-
eventEmitter: EventEmitter2,
11-
encryptionService: EncryptionService,
12-
) => new ServerOnPremiseService(repository, eventEmitter, encryptionService),
13-
inject: [ServerRepository, EventEmitter2, EncryptionService],
5+
useClass: ServerOnPremiseService,
146
};

redisinsight/api/src/modules/core/providers/server-on-premise/server-on-premise.service.spec.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ describe('ServerOnPremiseService', () => {
4545
const module: TestingModule = await Test.createTestingModule({
4646
providers: [
4747
EventEmitter2,
48+
ServerOnPremiseService,
4849
{
4950
provide: getRepositoryToken(ServerEntity),
5051
useFactory: mockRepository,
@@ -59,34 +60,34 @@ describe('ServerOnPremiseService', () => {
5960
serverRepository = await module.get(getRepositoryToken(ServerEntity));
6061
eventEmitter = await module.get<EventEmitter2>(EventEmitter2);
6162
encryptionService = module.get(EncryptionService);
62-
service = new ServerOnPremiseService(serverRepository, eventEmitter, encryptionService);
63+
service = module.get(ServerOnPremiseService);
6364
});
6465

6566
describe('onApplicationBootstrap', () => {
6667
beforeEach(() => {
6768
eventEmitter.emit = jest.fn();
6869
});
6970
it('should create server instance on first application launch', async () => {
70-
serverRepository.findOne.mockResolvedValue(null);
71+
serverRepository.findOneBy.mockResolvedValue(null);
7172
serverRepository.create.mockReturnValue(mockServerEntity);
7273

7374
await service.onApplicationBootstrap();
7475

75-
expect(serverRepository.findOne).toHaveBeenCalled();
76+
expect(serverRepository.findOneBy).toHaveBeenCalled();
7677
expect(serverRepository.create).toHaveBeenCalled();
7778
expect(serverRepository.save).toHaveBeenCalledWith(mockServerEntity);
7879
});
7980
it('should not create server instance on the second application launch', async () => {
80-
serverRepository.findOne.mockResolvedValue(mockServerEntity);
81+
serverRepository.findOneBy.mockResolvedValue(mockServerEntity);
8182

8283
await service.onApplicationBootstrap();
8384

84-
expect(serverRepository.findOne).toHaveBeenCalled();
85+
expect(serverRepository.findOneBy).toHaveBeenCalled();
8586
expect(serverRepository.create).not.toHaveBeenCalled();
8687
expect(serverRepository.save).not.toHaveBeenCalled();
8788
});
8889
it('should emit APPLICATION_FIRST_START on first application launch', async () => {
89-
serverRepository.findOne.mockResolvedValue(null);
90+
serverRepository.findOneBy.mockResolvedValue(null);
9091
serverRepository.create.mockReturnValue(mockServerEntity);
9192

9293
await service.onApplicationBootstrap(sessionId);
@@ -106,7 +107,7 @@ describe('ServerOnPremiseService', () => {
106107
);
107108
});
108109
it('should emit APPLICATION_STARTED on second application launch', async () => {
109-
serverRepository.findOne.mockResolvedValue(mockServerEntity);
110+
serverRepository.findOneBy.mockResolvedValue(mockServerEntity);
110111

111112
await service.onApplicationBootstrap(sessionId);
112113

@@ -128,7 +129,7 @@ describe('ServerOnPremiseService', () => {
128129

129130
describe('getInfo', () => {
130131
it('should return server info', async () => {
131-
serverRepository.findOne.mockResolvedValue(mockServerEntity);
132+
serverRepository.findOneBy.mockResolvedValue(mockServerEntity);
132133
encryptionService.getAvailableEncryptionStrategies.mockResolvedValue([
133134
EncryptionStrategy.PLAIN,
134135
EncryptionStrategy.KEYTAR,
@@ -148,7 +149,7 @@ describe('ServerOnPremiseService', () => {
148149
});
149150
});
150151
it('should throw ServerInfoNotFoundException', async () => {
151-
serverRepository.findOne.mockResolvedValue(null);
152+
serverRepository.findOneBy.mockResolvedValue(null);
152153

153154
try {
154155
await service.getInfo();
@@ -158,7 +159,7 @@ describe('ServerOnPremiseService', () => {
158159
}
159160
});
160161
it('should throw InternalServerError', async () => {
161-
serverRepository.findOne.mockRejectedValue(new Error('some error'));
162+
serverRepository.findOneBy.mockRejectedValue(new Error('some error'));
162163

163164
try {
164165
await service.getInfo();

redisinsight/api/src/modules/core/providers/server-on-premise/server-on-premise.service.ts

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import config from 'src/utils/config';
44
import { AppAnalyticsEvents } from 'src/constants/app-events';
55
import { TelemetryEvents } from 'src/constants/telemetry-events';
66
import { GetServerInfoResponse } from 'src/dto/server.dto';
7-
import { ServerRepository } from 'src/modules/core/repositories/server.repository';
87
import { AppType, BuildType, IServerProvider } from 'src/modules/core/models/server-provider.interface';
98
import { ServerInfoNotFoundException } from 'src/constants/exceptions';
109
import { EncryptionService } from 'src/modules/core/encryption/encryption.service';
10+
import { InjectRepository } from '@nestjs/typeorm';
11+
import { Repository } from 'typeorm';
12+
import { ServerEntity } from 'src/modules/core/models/server.entity';
1113

1214
const SERVER_CONFIG = config.get('server');
1315
const REDIS_STACK_CONFIG = config.get('redisStack');
@@ -17,19 +19,14 @@ export class ServerOnPremiseService
1719
implements OnApplicationBootstrap, IServerProvider {
1820
private logger = new Logger('ServerOnPremiseService');
1921

20-
private repository: ServerRepository;
21-
22-
private eventEmitter: EventEmitter2;
23-
24-
private encryptionService: EncryptionService;
25-
2622
private sessionId: number;
2723

28-
constructor(repository, eventEmitter, encryptionService) {
29-
this.repository = repository;
30-
this.eventEmitter = eventEmitter;
31-
this.encryptionService = encryptionService;
32-
}
24+
constructor(
25+
@InjectRepository(ServerEntity)
26+
private readonly repository: Repository<ServerEntity>,
27+
private readonly eventEmitter: EventEmitter2,
28+
private readonly encryptionService: EncryptionService,
29+
) {}
3330

3431
async onApplicationBootstrap(sessionId: number = new Date().getTime()) {
3532
this.sessionId = sessionId;
@@ -38,7 +35,7 @@ implements OnApplicationBootstrap, IServerProvider {
3835

3936
private async upsertServerInfo() {
4037
this.logger.log('Checking server info.');
41-
let serverInfo = await this.repository.findOne();
38+
let serverInfo = await this.repository.findOneBy({});
4239
if (!serverInfo) {
4340
this.logger.log('First application launch.');
4441
// Create default server info on first application launch
@@ -83,7 +80,7 @@ implements OnApplicationBootstrap, IServerProvider {
8380
public async getInfo(): Promise<GetServerInfoResponse> {
8481
this.logger.log('Getting server info.');
8582
try {
86-
const info = await this.repository.findOne();
83+
const info = await this.repository.findOneBy({});
8784
if (!info) {
8885
return Promise.reject(new ServerInfoNotFoundException());
8986
}
Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,6 @@
1-
import { SettingsRepository } from 'src/modules/core/repositories/settings.repository';
2-
import { SettingsAnalyticsService } from 'src/modules/core/services/settings-analytics/settings-analytics.service';
3-
import { KeytarEncryptionStrategy } from 'src/modules/core/encryption/strategies/keytar-encryption.strategy';
41
import { SettingsOnPremiseService } from './settings-on-premise.service';
5-
import { AgreementsRepository } from '../../repositories/agreements.repository';
62

73
export default {
84
provide: 'SETTINGS_PROVIDER',
9-
useFactory: (
10-
agreementsRepository: AgreementsRepository,
11-
settingsRepository: SettingsRepository,
12-
analyticsService: SettingsAnalyticsService,
13-
keytarEncryptionStrategy: KeytarEncryptionStrategy,
14-
) => new SettingsOnPremiseService(
15-
agreementsRepository,
16-
settingsRepository,
17-
analyticsService,
18-
keytarEncryptionStrategy,
19-
),
20-
inject: [
21-
AgreementsRepository,
22-
SettingsRepository,
23-
SettingsAnalyticsService,
24-
KeytarEncryptionStrategy,
25-
],
5+
useClass: SettingsOnPremiseService,
266
};

0 commit comments

Comments
 (0)