|
|
|
@ -67,8 +67,8 @@ export class MaintenanceService {
|
|
|
|
static async cleanupInactiveMembersOnce(instance?: Database, retentionDays: number = this.retentionDays): Promise<number> {
|
|
|
|
static async cleanupInactiveMembersOnce(instance?: Database, retentionDays: number = this.retentionDays): Promise<number> {
|
|
|
|
if (retentionDays <= 0) return 0;
|
|
|
|
if (retentionDays <= 0) return 0;
|
|
|
|
const threshold = toIsoSqlUTC(new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000));
|
|
|
|
const threshold = toIsoSqlUTC(new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000));
|
|
|
|
instance = (instance ?? (this as any).dbInstance ?? getDb()) as Database;
|
|
|
|
const dbi = ((instance ?? (this as any).dbInstance ?? getDb()) as Database);
|
|
|
|
const res = instance.prepare(`
|
|
|
|
const res = dbi.prepare(`
|
|
|
|
DELETE FROM group_members
|
|
|
|
DELETE FROM group_members
|
|
|
|
WHERE is_active = 0
|
|
|
|
WHERE is_active = 0
|
|
|
|
AND last_seen_at < ?
|
|
|
|
AND last_seen_at < ?
|
|
|
|
@ -84,18 +84,18 @@ export class MaintenanceService {
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
static async reconcileAliasUsersOnce(instance?: Database): Promise<number> {
|
|
|
|
static async reconcileAliasUsersOnce(instance?: Database): Promise<number> {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
instance = (instance ?? (this as any).dbInstance ?? getDb()) as Database;
|
|
|
|
const dbi = ((instance ?? (this as any).dbInstance ?? getDb()) as Database);
|
|
|
|
const rows = instance.prepare(`SELECT alias, user_id FROM user_aliases WHERE alias != user_id`).all() as any[];
|
|
|
|
const rows = dbi.prepare(`SELECT alias, user_id FROM user_aliases WHERE alias != user_id`).all() as any[];
|
|
|
|
let merged = 0;
|
|
|
|
let merged = 0;
|
|
|
|
|
|
|
|
|
|
|
|
for (const r of rows) {
|
|
|
|
for (const r of rows) {
|
|
|
|
const alias = String(r.alias);
|
|
|
|
const alias = String(r.alias);
|
|
|
|
const real = String(r.user_id);
|
|
|
|
const real = String(r.user_id);
|
|
|
|
|
|
|
|
|
|
|
|
instance.transaction(() => {
|
|
|
|
dbi.transaction(() => {
|
|
|
|
// Asegurar existencia del usuario real
|
|
|
|
// Asegurar existencia del usuario real
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
instance.prepare(`INSERT OR IGNORE INTO users (id) VALUES (?)`)
|
|
|
|
dbi.prepare(`INSERT OR IGNORE INTO users (id) VALUES (?)`)
|
|
|
|
.run(real);
|
|
|
|
.run(real);
|
|
|
|
} catch {}
|
|
|
|
} catch {}
|
|
|
|
|
|
|
|
|
|
|
|
@ -110,7 +110,7 @@ export class MaintenanceService {
|
|
|
|
|
|
|
|
|
|
|
|
for (const sql of updates) {
|
|
|
|
for (const sql of updates) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
instance.prepare(sql).run(real, alias);
|
|
|
|
dbi.prepare(sql).run(real, alias);
|
|
|
|
} catch {
|
|
|
|
} catch {
|
|
|
|
// Ignorar si la tabla no existe en este despliegue
|
|
|
|
// Ignorar si la tabla no existe en este despliegue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -118,7 +118,7 @@ export class MaintenanceService {
|
|
|
|
|
|
|
|
|
|
|
|
// Intentar eliminar el usuario alias si ya no tiene referencias
|
|
|
|
// Intentar eliminar el usuario alias si ya no tiene referencias
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
instance.prepare(`DELETE FROM users WHERE id = ?`).run(alias);
|
|
|
|
dbi.prepare(`DELETE FROM users WHERE id = ?`).run(alias);
|
|
|
|
} catch {}
|
|
|
|
} catch {}
|
|
|
|
})();
|
|
|
|
})();
|
|
|
|
|
|
|
|
|
|
|
|
|