import { createRequire } from 'node:module'; import { PrismaPg } from '../../api/node_modules/@prisma/adapter-pg/dist/index.js'; import { PrismaClient } from '../../api/node_modules/@prisma/client/index.js'; const require = createRequire(import.meta.url); const { SignatureRetirementService } = require('../../api/dist/signature-retirement/signature-retirement.service.js'); const prisma = new PrismaClient({ adapter: new PrismaPg(process.env.DATABASE_URL ?? 'postgresql://cmpp:cmpp_password@localhost:5432/cmpp_platform?schema=public'), }); const service = new SignatureRetirementService(prisma); const todayKey = dateKey(new Date()); const results = []; try { for (let offset = 30; offset >= 0; offset -= 1) { const detectionDate = dateKey(new Date(Date.now() - offset * 86_400_000)); results.push(await service.runDetection(detectionDate)); } const notifications = []; for (let offset = 4; offset >= 0; offset -= 1) { const notificationDate = dateKey(new Date(Date.now() - offset * 86_400_000)); const notification = await service.publishNotifications(notificationDate); const detections = await prisma.signatureRetirementDetection.findMany({ where: { detectionDate: new Date(`${notificationDate}T00:00:00.000Z`), signatureId: { startsWith: 'qa-retirement-' } }, select: { id: true }, }); await prisma.signatureRetirementMessage.updateMany({ where: { detectionId: { in: detections.map((item) => item.id) } }, data: { createdAt: new Date(`${notificationDate}T08:00:00+08:00`) }, }); notifications.push({ notificationDate, ...notification }); } const unreported = await service.unreportedSignatures({ date: todayKey, page: 1, pageSize: 10 }); const todayMessages = await service.listMessages({ dateFrom: todayKey, dateTo: todayKey, page: 1, pageSize: 10 }); const filteredHistory = await service.listMessages({ dateFrom: dateKey(new Date(Date.now() - 4 * 86_400_000)), dateTo: todayKey, tenantId: 'qa-retirement-tenant-b', signatureKeyword: '跨通道', page: 1, pageSize: 10 }); console.log(JSON.stringify({ todayKey, detectionDays: results.length, detectionRows: results.reduce((sum, item) => sum + item.alerted + item.healthy, 0), today: results.at(-1), notifications, unreported, todayMessages: { total: todayMessages.total, page: todayMessages.page, pageSize: todayMessages.pageSize, items: todayMessages.items.length }, filteredHistory: { total: filteredHistory.total, items: filteredHistory.items.length, applicationNames: [...new Set(filteredHistory.items.map((item) => item.applicationName))] }, })); } finally { await prisma.$disconnect(); } function dateKey(value) { return new Intl.DateTimeFormat('en-CA', { timeZone: 'Asia/Shanghai', year: 'numeric', month: '2-digit', day: '2-digit', }).format(value); }