Skip to content

Commit eabd63d

Browse files
Merge pull request #3913 from RedisInsight/be/bugfix/RI-6141-rdi-last-connection-is-not-updated
RI-6141 update rdi last connection on each connect
2 parents 99c923c + bc1f40e commit eabd63d

File tree

3 files changed

+31
-4
lines changed

3 files changed

+31
-4
lines changed

redisinsight/api/src/modules/rdi/providers/rdi.client.provider.spec.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,13 @@ describe('RdiClientProvider', () => {
4646
const metadata: RdiClientMetadata = { id: '123', sessionMetadata: undefined };
4747
const client: RdiClient = generateMockRdiClient(metadata);
4848
rdiClientStorage.getByMetadata.mockResolvedValue(client);
49+
repository.update.mockResolvedValue(mockRdi);
4950

5051
const result = await provider.getOrCreate(metadata);
5152

5253
expect(rdiClientStorage.getByMetadata).toHaveBeenCalledWith(metadata);
5354
expect(client.ensureAuth).toHaveBeenCalled();
55+
expect(repository.update).toHaveBeenCalled();
5456
expect(result).toEqual(client);
5557
});
5658

@@ -84,11 +86,13 @@ describe('RdiClientProvider', () => {
8486
const client: RdiClient = generateMockRdiClient(metadata);
8587
repository.get.mockResolvedValue(mockRdi);
8688
rdiClientFactory.createClient.mockResolvedValue(client);
89+
repository.update.mockResolvedValue(mockRdi);
8790

8891
const result = await provider.create(metadata);
8992

9093
expect(repository.get).toHaveBeenCalledWith(metadata.id);
9194
expect(rdiClientFactory.createClient).toHaveBeenCalledWith(metadata, mockRdi);
95+
expect(repository.update).toHaveBeenCalled();
9296
expect(result).toEqual(client);
9397
});
9498
});
@@ -128,4 +132,15 @@ describe('RdiClientProvider', () => {
128132
expect(result).toEqual(2);
129133
});
130134
});
135+
136+
describe('updateLastConnection', () => {
137+
it('should update rdi lastConnection', async () => {
138+
const metadata: RdiClientMetadata = { id: '123', sessionMetadata: undefined };
139+
repository.update.mockResolvedValue(mockRdi);
140+
141+
await provider['updateLastConnection'](metadata);
142+
143+
expect(repository.update).toHaveBeenCalled();
144+
});
145+
});
131146
});

redisinsight/api/src/modules/rdi/providers/rdi.client.provider.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { RdiClient } from 'src/modules/rdi/client/rdi.client';
22
import { Injectable, Logger, NotFoundException } from '@nestjs/common';
3-
import { RdiClientMetadata } from 'src/modules/rdi/models';
3+
import { Rdi, RdiClientMetadata } from 'src/modules/rdi/models';
44
import { RdiClientStorage } from 'src/modules/rdi/providers/rdi.client.storage';
55
import { RdiClientFactory } from 'src/modules/rdi/providers/rdi.client.factory';
66
import { RdiRepository } from 'src/modules/rdi/repository/rdi.repository';
@@ -20,6 +20,7 @@ export class RdiClientProvider {
2020
let client = await this.rdiClientStorage.getByMetadata(rdiClientMetadata);
2121
if (client) {
2222
await client.ensureAuth();
23+
this.updateLastConnection(rdiClientMetadata);
2324
return client;
2425
}
2526

@@ -35,7 +36,11 @@ export class RdiClientProvider {
3536
this.logger.error(`RDI with ${clientMetadata.id} was not Found`);
3637
throw new NotFoundException(ERROR_MESSAGES.INVALID_RDI_INSTANCE_ID);
3738
}
38-
return this.rdiClientFactory.createClient(clientMetadata, rdi);
39+
const rdiClient = await this.rdiClientFactory.createClient(clientMetadata, rdi);
40+
if (rdiClient) {
41+
this.updateLastConnection(clientMetadata);
42+
}
43+
return rdiClient;
3944
}
4045

4146
async delete(rdiClientMetadata: RdiClientMetadata): Promise<number> {
@@ -49,4 +54,12 @@ export class RdiClientProvider {
4954
async deleteManyByRdiId(id: string): Promise<number> {
5055
return this.rdiClientStorage.deleteManyByRdiId(id);
5156
}
57+
58+
private async updateLastConnection(rdiClientMetadata: RdiClientMetadata): Promise<void> {
59+
try {
60+
await this.repository.update(rdiClientMetadata.id, { lastConnection: new Date() });
61+
} catch (e) {
62+
// ignore the error
63+
}
64+
}
5265
}

redisinsight/api/src/modules/rdi/repository/local.rdi.repository.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,8 @@ export class LocalRdiRepository extends RdiRepository {
7575
const newEntity = classToClass(RdiEntity, rdi);
7676

7777
const encrypted = await this.modelEncryptor.encryptEntity(this.repository.merge(oldEntity, newEntity));
78-
await this.repository.save(encrypted);
7978

80-
return this.get(id);
79+
return classToClass(Rdi, await this.modelEncryptor.decryptEntity(await this.repository.save(encrypted)));
8180
}
8281

8382
/**

0 commit comments

Comments
 (0)