@@ -254,14 +254,67 @@ class OrganizationRepository {
254254 FROM "memberOrganizations" mo
255255 WHERE mo."organizationId" = o.id
256256 AND mo."deletedAt" IS NULL
257- AND (mo.title IS NOT NULL AND mo.title != '')
257+ AND (mo.title IS NOT NULL OR mo.title != '')
258258 AND (mo.source IS NOT NULL AND mo.source NOT IN ('email-domain'))
259259 )
260260 LIMIT $(batchSize);
261261 ` ,
262262 { batchSize } ,
263263 )
264264 }
265+
266+ public async getMemberOrganizationsToPrune (
267+ batchSize : number ,
268+ ) : Promise < { id : string ; memberId : string } [ ] > {
269+ return this . connection . query (
270+ `
271+ WITH email_providers AS (
272+ SELECT unnest(ARRAY[
273+ 'gmail.com', 'gmail.co.uk', 'gmail.com.au', 'gmail.com.tr',
274+ 'yahoo.com', 'yahoo.co.uk', 'yahoo.com.br', 'yahoo.co.in', 'yahoo.fr', 'yahoo.es', 'yahoo.it', 'yahoo.de', 'yahoo.ca', 'yahoo.com.au', 'yahoo.in', 'yahoo.co.jp', 'yahoo.com.ar', 'yahoo.com.mx', 'yahoo.co.id', 'yahoo.com.sg', 'yahoo.co.za', 'yahoo.com.ph', 'yahoo.com.tw', 'yahoo.com.hk', 'yahoo.com.vn',
275+ 'hotmail.com', 'hotmail.co.uk', 'hotmail.fr', 'hotmail.ca', 'hotmail.it', 'hotmail.es', 'hotmail.de', 'hotmail.com.au', 'hotmail.com.mx',
276+ 'icloud.com', 'icloud.com.cn',
277+ 'fastmail.com', 'tutanota.com', 'tuta.io',
278+ 'gmx.com', 'gmx.de', 'gmx.net', 'gmx.at', 'gmx.ch', 'gmx.fr', 'gmx.co.uk',
279+ 'aol.com', 'aol.co.uk', 'aol.fr', 'aol.de',
280+ 'msn.com', 'wanadoo.fr', 'orange.fr', 'comcast.net',
281+ 'live.com', 'live.co.uk', 'live.fr', 'live.nl', 'live.it', 'live.com.au', 'live.ca', 'live.cn',
282+ 'rediffmail.com', 'sify.com', 'indiatimes.com', 'free.fr', 'web.de',
283+ 'yandex.ru', 'yandex.com', 'yandex.com.tr', 'ya.ru',
284+ 'ymail.com', 'libero.it',
285+ 'outlook.com', 'outlook.fr', 'outlook.co.uk', 'outlook.de', 'outlook.es', 'outlook.it', 'outlook.com.au', 'outlook.com.br', 'outlook.com.mx', 'outlook.co.jp', 'outlook.in', 'outlook.com.sg', 'outlook.co.za', 'outlook.co.in',
286+ 'uol.com.br', 'bol.com.br',
287+ 'mail.ru', 'inbox.ru', 'list.ru', 'bk.ru',
288+ 'mail.com', 'mail.de', 'mail.co.uk',
289+ 'cox.net', 'sbcglobal.net', 'sfr.fr', 'verizon.net', 'googlemail.com', 'ig.com.br', 'bigpond.com', 'bigpond.net.au', 'terra.com.br', 'neuf.fr', 'alice.it', 'rocketmail.com', 'att.net', 'laposte.net', 'bellsouth.net', 'charter.net', 'rambler.ru', 'tiscali.it', 'tiscali.co.uk', 'shaw.ca', 'sky.com', 'earthlink.net', 'optonline.net', 'freenet.de', 't-online.de', 'aliceadsl.fr', 'virgilio.it', 'home.nl', 'qq.com', 'vip.qq.com', 'telenet.be', 'pandora.be', 'me.com', 'voila.fr', 'planet.nl', 'tin.it', 'ntlworld.com', 'arcor.de', 'frontiernet.net', 'hetnet.nl', 'zonnet.nl', 'club-internet.fr', 'juno.com', 'optusnet.com.au', 'blueyonder.co.uk', 'bluewin.ch', 'skynet.be', 'sympatico.ca', 'windstream.net', 'mac.com', 'centurytel.net', 'chello.nl', 'aim.com',
290+ 'protonmail.com', 'protonmail.ch', 'proton.me', 'pm.me', 'duck.com',
291+ 'zoho.com', 'zohomail.com',
292+ 'users.noreply.github.com',
293+ '126.com', '139.com', '163.com', '188.com', 'foxmail.com', 'tom.com', '21cn.com', 'yeah.net',
294+ 'naver.com', 'daum.net', 'hanmail.net',
295+ 'hey.com', 'inbox.com', 'lycos.com', 'excite.com', 'hushmail.com', 'mailfence.com', 'mailbox.org', 'posteo.de', 'startmail.com', 'runbox.com', 'countermail.com', 'mynet.com',
296+ 'wp.pl', 'onet.pl', 'interia.pl', 'o2.pl',
297+ 'seznam.cz', 'centrum.cz',
298+ 'mailinator.com', 'guerrillamail.com', '10minutemail.com', 'tempmail.com'
299+ ]) AS provider
300+ ),
301+ orgs_with_email_provider AS (
302+ SELECT DISTINCT o.id
303+ FROM organizations o
304+ INNER JOIN "organizationIdentities" oi ON o.id = oi."organizationId"
305+ INNER JOIN email_providers ep ON LOWER(oi.value) = ep.provider
306+ WHERE o."deletedAt" IS NULL
307+ AND oi.type = 'primary-domain'
308+ )
309+ SELECT DISTINCT mo.id, mo."memberId"
310+ FROM "memberOrganizations" mo
311+ INNER JOIN orgs_with_email_provider oep ON mo."organizationId" = oep.id
312+ WHERE mo.source = 'email-domain' AND (mo.title IS NULL OR mo.title = '')
313+ LIMIT $(batchSize);
314+ ` ,
315+ { batchSize } ,
316+ )
317+ }
265318}
266319
267320export default OrganizationRepository
0 commit comments