diff --git a/src/config/env.config.ts b/src/config/env.config.ts index 5d08cb34..6b48a0a0 100644 --- a/src/config/env.config.ts +++ b/src/config/env.config.ts @@ -61,6 +61,7 @@ export type Database = { CONNECTION: DBConnection; ENABLED: boolean; SAVE_DATA: SaveData; + CLEANING_DB_INTERVAL: number; }; export type Redis = { @@ -226,6 +227,7 @@ export class ConfigService { URI: process.env.DATABASE_CONNECTION_URI || '', DB_PREFIX_NAME: process.env.DATABASE_CONNECTION_DB_PREFIX_NAME || 'evolution', }, + CLEANING_DB_INTERVAL: Number(process.env?.DATABASE_CLEANING_INTERVAL), ENABLED: process.env?.DATABASE_ENABLED === 'true', SAVE_DATA: { INSTANCE: process.env?.DATABASE_SAVE_DATA_INSTANCE === 'true', diff --git a/src/whatsapp/repository/message.repository.ts b/src/whatsapp/repository/message.repository.ts index d7675977..cd102f08 100644 --- a/src/whatsapp/repository/message.repository.ts +++ b/src/whatsapp/repository/message.repository.ts @@ -197,4 +197,18 @@ export class MessageRepository extends Repository { this.logger.error(error); } } + + public async delete(query: any) { + try { + this.logger.verbose('deleting messages'); + if (this.dbSettings.ENABLED) { + this.logger.verbose('deleting messages in db'); + return await this.messageModel.deleteMany(query); + } + + return { deleted: { chatId: query.where.messageTimestamp } }; + } catch (error) { + return { error: error?.toString() }; + } + } } diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index f222d5b7..3eeb8fbb 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -145,6 +145,7 @@ export class WAStartupService { ) { this.logger.verbose('WAStartupService initialized'); this.cleanStore(); + this.cleanDB(); this.instance.qrcode = { count: 0 }; } @@ -1323,6 +1324,23 @@ export class WAStartupService { } } + private cleanDB() { + this.logger.verbose('Cronjob to clean db initialized'); + const database = this.configService.get('DATABASE'); + if (database?.CLEANING_DB_INTERVAL && database.ENABLED) { + this.logger.verbose('Cronjob to clean db enabled'); + let data = new Date() + data.setDate(data.getDate() - database.CLEANING_DB_INTERVAL); + let timestamp = Math.floor(data.getTime() / 1000) as number | Long.Long; + this.repository.message.delete({ + where: { + owner: this.instance.name, + messageTimestamp: { $lte: timestamp } + } + }) + } + } + private async defineAuthState() { this.logger.verbose('Defining auth state'); const db = this.configService.get('DATABASE');