delete-works-for-account.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { initDatabase, AppDataSource, Work, PlatformAccount } from '../models/index.js';
  2. import { logger } from '../utils/logger.js';
  3. import { workService } from '../services/WorkService.js';
  4. async function main() {
  5. const arg = process.argv[2];
  6. if (!arg) {
  7. logger.error('请提供账号ID(platform_accounts 主键)');
  8. logger.info('用法: tsx src/scripts/delete-works-for-account.ts <accountId>');
  9. process.exit(1);
  10. }
  11. const accountId = Number(arg);
  12. if (!Number.isInteger(accountId) || accountId <= 0) {
  13. logger.error(`无效的账号ID: ${arg}`);
  14. process.exit(1);
  15. }
  16. try {
  17. await initDatabase();
  18. const accountRepo = AppDataSource.getRepository(PlatformAccount);
  19. const workRepo = AppDataSource.getRepository(Work);
  20. const account = await accountRepo.findOne({ where: { id: accountId } });
  21. if (!account) {
  22. logger.error(`未找到账号 ID=${accountId}`);
  23. process.exit(1);
  24. }
  25. logger.info(
  26. `准备删除账号下作品: ID=${account.id}, platform=${account.platform}, accountId=${account.accountId}, name=${account.accountName}`
  27. );
  28. const works = await workRepo.find({
  29. where: { accountId: account.id },
  30. order: { publishTime: 'DESC' },
  31. });
  32. if (!works.length) {
  33. logger.info(`账号 ${account.id} 下没有作品记录,无需删除`);
  34. process.exit(0);
  35. }
  36. logger.info(`共找到 ${works.length} 条作品记录,将逐条删除(含关联的每日统计和评论)`);
  37. for (const work of works) {
  38. try {
  39. await workService.deleteWork(work.userId, work.id);
  40. logger.info(
  41. `已删除 work.id=${work.id}, platformVideoId=${work.platformVideoId}, title=${work.title}`
  42. );
  43. } catch (e) {
  44. logger.error(`删除 work.id=${work.id} 失败`, e);
  45. }
  46. }
  47. logger.info(`账号 ${account.id} 下的作品删除流程结束`);
  48. process.exit(0);
  49. } catch (e) {
  50. logger.error('执行失败:', e);
  51. process.exit(1);
  52. }
  53. }
  54. void main();