almeira-web/scripts/clean_unwanted_supplier_products.js

115 lines
4.1 KiB
JavaScript

const sdk = require('node-appwrite');
const client = new sdk.Client()
.setEndpoint('https://appwrite.almeira.com.co/v1')
.setProject('69b84df5003bd8957c5c')
.setKey('standard_cce3cdb866ea6433888d40cedd24dc45987372308fdc3dd0697de08648c0e5c7e04b02c3bcee271403fd656b00a5820f04c08b51631284a6e8a3582d8aed2aa33234f3c29cc777e9b162eb54810b789251b0d006a9a3b081ebc2da53b9baa94614b124b3508ad849fd9a4187cc6094f506d4b57f409b69d9562a74df594f3ec3');
const dbs = new sdk.Databases(client);
const DB_ID = 'sneakers_multistore_db';
async function main() {
console.log('=== [1] ELIMINANDO PRODUCTOS BASURA DE LOS GRUPOS IGNORADOS ===');
let offset = 0;
const limit = 100;
const toDelete = [];
while (true) {
const res = await dbs.listDocuments(DB_ID, 'products', [
sdk.Query.limit(limit),
sdk.Query.offset(offset)
]);
if (!res.documents || res.documents.length === 0) break;
for (const doc of res.documents) {
const sup = (doc.supplierName || '').toLowerCase();
const name = (doc.name || '').toLowerCase();
const raw = JSON.stringify(doc).toLowerCase();
if (
sup.includes('emporio') ||
sup.includes('black diamonds') ||
raw.includes('120363400148850031') ||
raw.includes('120363420942364759') ||
name.includes('hoy 🚨') ||
name.includes('liderea con')
) {
// Asegurar que no borramos productos legítimos de Jovic o CC Mío
if (sup.includes('jovic') || sup.includes('cc mío') || sup.includes('exclusive')) {
continue;
}
toDelete.push({ id: doc['$id'], name: doc.name, supplier: doc.supplierName });
}
}
offset += limit;
if (offset >= res.total) break;
}
console.log(`Encontrados ${toDelete.length} productos para eliminar:`);
for (const p of toDelete) {
try {
await dbs.deleteDocument(DB_ID, 'products', p.id);
console.log(` ✓ Eliminado producto: ${p.id} - ${p.name} (${p.supplier})`);
} catch (e) {
console.error(` ✗ Error eliminando ${p.id}:`, e.message);
}
}
console.log('\n=== [2] SANITIZANDO COLECCIÓN MONITORED_GROUPS EN APPWRITE ===');
const groupsRes = await dbs.listDocuments(DB_ID, 'monitored_groups', [sdk.Query.limit(100)]);
console.log(`Total grupos en Appwrite: ${groupsRes.total}`);
const blacklistedJids = [
'120363400148850031@g.us', // SOMOS BLACK DIAMONDS
'120363420942364759@g.us', // TEAM EMPORIO
];
// Agrupar por JID para eliminar duplicados
const groupsByJid = new Map();
for (const doc of groupsRes.documents) {
const jid = doc.jid;
if (!groupsByJid.has(jid)) {
groupsByJid.set(jid, []);
}
groupsByJid.get(jid).push(doc);
}
for (const [jid, docs] of groupsByJid.entries()) {
const isBlacklisted = blacklistedJids.includes(jid) ||
docs.some(d => /black diamonds|team emporio|emporio/i.test(d.name || ''));
// Mantener 1 documento canónico y eliminar duplicados
const canonicalDoc = docs[0];
const duplicates = docs.slice(1);
for (const dup of duplicates) {
try {
await dbs.deleteDocument(DB_ID, 'monitored_groups', dup['$id']);
console.log(` ✓ Eliminado documento duplicado: ${dup['$id']} (${jid})`);
} catch (e) {
console.error(` ✗ Error eliminando duplicado ${dup['$id']}:`, e.message);
}
}
if (isBlacklisted) {
try {
await dbs.updateDocument(DB_ID, 'monitored_groups', canonicalDoc['$id'], {
isMonitored: 0,
autoPublish: 0,
notes: 'IGNORADO EXPLICITAMENTE - NO PUBLICAR NI MONITOREAR',
});
console.log(` 🛑 Grupo marcado como IGNORADO permanentemente: ${canonicalDoc.name} (${jid})`);
} catch (e) {
console.error(` ✗ Error actualizando grupo ${canonicalDoc['$id']}:`, e.message);
}
}
}
console.log('\n=== [3] VERIFICACIÓN FINAL DE GRUPOS EN APPWRITE ===');
const finalRes = await dbs.listDocuments(DB_ID, 'monitored_groups', [sdk.Query.limit(100)]);
finalRes.documents.forEach((d) => {
console.log(`ID: ${d['$id']} | JID: ${d.jid} | isMonitored: ${d.isMonitored} | Name: ${d.name}`);
});
}
main().catch(console.error);