Added option to delete messages from the database

This commit is contained in:
Microprocess 2023-12-28 15:09:39 -03:00
parent b73e260e35
commit aacda0fffa
3 changed files with 34 additions and 0 deletions

View File

@ -61,6 +61,7 @@ export type Database = {
CONNECTION: DBConnection; CONNECTION: DBConnection;
ENABLED: boolean; ENABLED: boolean;
SAVE_DATA: SaveData; SAVE_DATA: SaveData;
CLEANING_DB_INTERVAL: number;
}; };
export type Redis = { export type Redis = {
@ -226,6 +227,7 @@ export class ConfigService {
URI: process.env.DATABASE_CONNECTION_URI || '', URI: process.env.DATABASE_CONNECTION_URI || '',
DB_PREFIX_NAME: process.env.DATABASE_CONNECTION_DB_PREFIX_NAME || 'evolution', 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', ENABLED: process.env?.DATABASE_ENABLED === 'true',
SAVE_DATA: { SAVE_DATA: {
INSTANCE: process.env?.DATABASE_SAVE_DATA_INSTANCE === 'true', INSTANCE: process.env?.DATABASE_SAVE_DATA_INSTANCE === 'true',

View File

@ -197,4 +197,18 @@ export class MessageRepository extends Repository {
this.logger.error(error); 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() };
}
}
} }

View File

@ -145,6 +145,7 @@ export class WAStartupService {
) { ) {
this.logger.verbose('WAStartupService initialized'); this.logger.verbose('WAStartupService initialized');
this.cleanStore(); this.cleanStore();
this.cleanDB();
this.instance.qrcode = { count: 0 }; 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>('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() { private async defineAuthState() {
this.logger.verbose('Defining auth state'); this.logger.verbose('Defining auth state');
const db = this.configService.get<Database>('DATABASE'); const db = this.configService.get<Database>('DATABASE');