diff --git a/redisinsight/api/src/modules/settings/repositories/agreements.repository.ts b/redisinsight/api/src/modules/settings/repositories/agreements.repository.ts index ce06e64ced..469a424799 100644 --- a/redisinsight/api/src/modules/settings/repositories/agreements.repository.ts +++ b/redisinsight/api/src/modules/settings/repositories/agreements.repository.ts @@ -2,11 +2,15 @@ import { Agreements } from 'src/modules/settings/models/agreements'; import { SessionMetadata } from 'src/common/models'; export interface DefaultAgreementsOptions { + version?: string; data?: Record; } export abstract class AgreementsRepository { - abstract getOrCreate(defaultOptions?: DefaultAgreementsOptions): Promise; + abstract getOrCreate( + sessionMetadata: SessionMetadata, + defaultOptions?: DefaultAgreementsOptions, + ): Promise; abstract update( sessionMetadata: SessionMetadata, agreements: Agreements, diff --git a/redisinsight/api/src/modules/settings/repositories/local.agreements.repository.ts b/redisinsight/api/src/modules/settings/repositories/local.agreements.repository.ts index 24a7361d68..679286bf2c 100644 --- a/redisinsight/api/src/modules/settings/repositories/local.agreements.repository.ts +++ b/redisinsight/api/src/modules/settings/repositories/local.agreements.repository.ts @@ -5,6 +5,7 @@ import { AgreementsRepository, DefaultAgreementsOptions } from 'src/modules/sett import { AgreementsEntity } from 'src/modules/settings/entities/agreements.entity'; import { Agreements } from 'src/modules/settings/models/agreements'; import { SessionMetadata } from 'src/common/models'; +import { plainToInstance } from 'class-transformer'; export class LocalAgreementsRepository extends AgreementsRepository { constructor( @@ -15,24 +16,21 @@ export class LocalAgreementsRepository extends AgreementsRepository { } async getOrCreate( - defaultOptions?: DefaultAgreementsOptions + sessionMetadata: SessionMetadata, + defaultOptions: DefaultAgreementsOptions = {}, ): Promise { let entity = await this.repository.findOneBy({}); if (!entity) { try { - if (defaultOptions?.data) { - entity = await this.repository.save( - this.repository.create({ - id: 1, - data: JSON.stringify(defaultOptions.data), - }) - ); - } else { - entity = await this.repository.save(this.repository.create({ id: 1 })); - } + entity = await this.repository.save( + classToClass(AgreementsEntity, plainToInstance(Agreements, { + ...defaultOptions, + id: 1, + })), + ); } catch (e) { if (e.code === 'SQLITE_CONSTRAINT') { - return this.getOrCreate(); + return this.getOrCreate(sessionMetadata); } throw e; @@ -43,13 +41,13 @@ export class LocalAgreementsRepository extends AgreementsRepository { } async update( - _: SessionMetadata, + sessionMetadata: SessionMetadata, agreements: Agreements, ): Promise { const entity = classToClass(AgreementsEntity, agreements); await this.repository.save(entity); - return this.getOrCreate(); + return this.getOrCreate(sessionMetadata); } } diff --git a/redisinsight/api/src/modules/settings/settings.service.ts b/redisinsight/api/src/modules/settings/settings.service.ts index 9e79955570..e66ebd5c2b 100644 --- a/redisinsight/api/src/modules/settings/settings.service.ts +++ b/redisinsight/api/src/modules/settings/settings.service.ts @@ -59,28 +59,25 @@ export class SettingsService { const settings = await this.settingsRepository.getOrCreate(sessionMetadata); - let agreements; + let defaultOptions: object; if (SERVER_CONFIG.acceptTermsAndConditions) { const isEncryptionAvailable = (await this.keyEncryptionStrategy.isAvailable()) || (await this.keytarEncryptionStrategy.isAvailable()); - const defaultOptions = { + defaultOptions = { data: { analytics: false, encryption: isEncryptionAvailable, eula: true, notifications: false, - } + }, + version: (await this.getAgreementsSpec()).version, }; - - agreements = await this.agreementRepository.getOrCreate( - defaultOptions - ); - } else { - agreements = await this.agreementRepository.getOrCreate(); } + const agreements = await this.agreementRepository.getOrCreate(sessionMetadata, defaultOptions); + this.logger.debug( 'Succeed to get application settings.', sessionMetadata,