45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
/**
|
||
* 一次性脚本:为「当前已在已启用运营位里的课程」批量设置水印为 globe.americas.fill
|
||
* 使用:npx ts-node scripts/backfill-banner-watermark.ts
|
||
*/
|
||
|
||
import { PrismaClient } from '@prisma/client';
|
||
|
||
const prisma = new PrismaClient();
|
||
|
||
const WATERMARK_ICON = 'globe.americas.fill';
|
||
|
||
async function main() {
|
||
// 1. 已启用、未删的运营位中的 courseId(去重)
|
||
const rows = await prisma.operationalBannerCourse.findMany({
|
||
where: {
|
||
banner: { deletedAt: null, isEnabled: true },
|
||
},
|
||
select: { courseId: true },
|
||
distinct: ['courseId'],
|
||
});
|
||
const courseIds = rows.map((r) => r.courseId);
|
||
|
||
if (courseIds.length === 0) {
|
||
console.log('[BackfillBannerWatermark] 当前没有运营位关联的课程,跳过');
|
||
return;
|
||
}
|
||
|
||
console.log(`[BackfillBannerWatermark] 运营位课程数: ${courseIds.length}, courseIds:`, courseIds);
|
||
|
||
// 2. 批量更新 watermark_icon
|
||
const result = await prisma.course.updateMany({
|
||
where: { id: { in: courseIds } },
|
||
data: { watermarkIcon: WATERMARK_ICON },
|
||
});
|
||
|
||
console.log(`[BackfillBannerWatermark] 已更新 ${result.count} 门课程的水印为 ${WATERMARK_ICON}`);
|
||
}
|
||
|
||
main()
|
||
.catch((e) => {
|
||
console.error(e);
|
||
process.exit(1);
|
||
})
|
||
.finally(() => prisma.$disconnect());
|