This commit is contained in:
Executable
+107
@@ -0,0 +1,107 @@
|
||||
/**
|
||||
* Live Matches Cleanup Script
|
||||
*
|
||||
* Bitmiş maçları live_matches tablosundan siler.
|
||||
* Kullanım: npx ts-node -r tsconfig-paths/register src/scripts/cleanup-live-matches.ts
|
||||
*/
|
||||
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
|
||||
const FINISHED_STATUSES = ['Finished', 'Played', 'FT', 'AET', 'PEN', 'Ended'];
|
||||
const FINISHED_STATES = ['Finished', 'post', 'FT', 'postGame'];
|
||||
const LIVE_STATUSES = [
|
||||
'LIVE',
|
||||
'1H',
|
||||
'2H',
|
||||
'HT',
|
||||
'1Q',
|
||||
'2Q',
|
||||
'3Q',
|
||||
'4Q',
|
||||
'Playing',
|
||||
'Half Time',
|
||||
];
|
||||
const LIVE_STATES = ['live', 'firsthalf', 'secondhalf'];
|
||||
|
||||
async function cleanupLiveMatches() {
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
try {
|
||||
console.log('🧹 Live matches temizliği başlıyor...');
|
||||
|
||||
const now = Date.now();
|
||||
const finishedGraceMs = 6 * 60 * 60 * 1000;
|
||||
const staleGraceMs = 24 * 60 * 60 * 1000;
|
||||
const finishedBefore = BigInt(now - finishedGraceMs);
|
||||
const staleBefore = BigInt(now - staleGraceMs);
|
||||
|
||||
const totalBefore = await prisma.liveMatch.count();
|
||||
const outdatedCount = await prisma.liveMatch.count({
|
||||
where: {
|
||||
mstUtc: { lt: BigInt(now) },
|
||||
},
|
||||
});
|
||||
const finishedPastCount = await prisma.liveMatch.count({
|
||||
where: {
|
||||
mstUtc: { lt: finishedBefore },
|
||||
OR: [
|
||||
{ status: { in: FINISHED_STATUSES } },
|
||||
{ state: { in: FINISHED_STATES } },
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
console.log('📊 Mevcut durum:');
|
||||
console.log(` Toplam live_matches: ${totalBefore}`);
|
||||
console.log(` Geçmiş zamanlı kayıt: ${outdatedCount}`);
|
||||
console.log(
|
||||
` Bitmiş ve grace süresini aşmış kayıt: ${finishedPastCount}`,
|
||||
);
|
||||
|
||||
const deleted = await prisma.liveMatch.deleteMany({
|
||||
where: {
|
||||
OR: [
|
||||
{
|
||||
mstUtc: { lt: finishedBefore },
|
||||
OR: [
|
||||
{ status: { in: FINISHED_STATUSES } },
|
||||
{ state: { in: FINISHED_STATES } },
|
||||
],
|
||||
},
|
||||
{
|
||||
mstUtc: { lt: staleBefore },
|
||||
NOT: {
|
||||
OR: [
|
||||
{ status: { in: LIVE_STATUSES } },
|
||||
{ state: { in: LIVE_STATES } },
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
const totalAfter = await prisma.liveMatch.count();
|
||||
|
||||
console.log('\n✅ Temizlik tamamlandı!');
|
||||
console.log(` Silinen maç: ${deleted.count}`);
|
||||
console.log(` Kalan maç: ${totalAfter}`);
|
||||
|
||||
const states = await prisma.$queryRaw`
|
||||
SELECT state, COUNT(*)::int as count
|
||||
FROM live_matches
|
||||
GROUP BY state
|
||||
`;
|
||||
|
||||
console.log('\n📋 Kalan maçların durumları:');
|
||||
(states as any).forEach((s: any) => {
|
||||
console.log(` ${s.state || 'null'}: ${s.count}`);
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('❌ Hata:', error);
|
||||
} finally {
|
||||
await prisma.$disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
void cleanupLiveMatches();
|
||||
Reference in New Issue
Block a user