Files
iddaai-be/src/scripts/cleanup-live-matches.ts
T
2026-04-16 17:21:48 +03:00

108 lines
2.8 KiB
TypeScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 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();