fixDuplicateLists.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { Meteor } from 'meteor/meteor';
  2. /**
  3. * Client-side interface for fixing duplicate lists
  4. */
  5. export const fixDuplicateLists = {
  6. /**
  7. * Get a report of all boards with duplicate lists/swimlanes
  8. */
  9. async getReport() {
  10. try {
  11. const result = await Meteor.callAsync('fixDuplicateLists.getReport');
  12. return result;
  13. } catch (error) {
  14. console.error('Error getting duplicate lists report:', error);
  15. throw error;
  16. }
  17. },
  18. /**
  19. * Fix duplicate lists for a specific board
  20. */
  21. async fixBoard(boardId) {
  22. try {
  23. const result = await Meteor.callAsync('fixDuplicateLists.fixBoard', boardId);
  24. console.log(`Fixed duplicate lists for board ${boardId}:`, result);
  25. return result;
  26. } catch (error) {
  27. console.error(`Error fixing board ${boardId}:`, error);
  28. throw error;
  29. }
  30. },
  31. /**
  32. * Fix duplicate lists for all boards
  33. */
  34. async fixAllBoards() {
  35. try {
  36. console.log('Starting fix for all boards...');
  37. const result = await Meteor.callAsync('fixDuplicateLists.fixAllBoards');
  38. console.log('Fix completed:', result);
  39. return result;
  40. } catch (error) {
  41. console.error('Error fixing all boards:', error);
  42. throw error;
  43. }
  44. },
  45. /**
  46. * Interactive fix with user confirmation
  47. */
  48. async interactiveFix() {
  49. try {
  50. // Get report first
  51. console.log('Getting duplicate lists report...');
  52. const report = await this.getReport();
  53. if (report.boardsWithDuplicates === 0) {
  54. console.log('No duplicate lists found!');
  55. return { message: 'No duplicate lists found!' };
  56. }
  57. console.log(`Found ${report.boardsWithDuplicates} boards with duplicate lists:`);
  58. report.report.forEach(board => {
  59. console.log(`- Board "${board.boardTitle}" (${board.boardId}): ${board.duplicateSwimlanes} duplicate swimlanes, ${board.duplicateLists} duplicate lists`);
  60. });
  61. // Ask for confirmation
  62. const confirmed = confirm(
  63. `Found ${report.boardsWithDuplicates} boards with duplicate lists. ` +
  64. `This will fix ${report.report.reduce((sum, board) => sum + board.duplicateSwimlanes + board.duplicateLists, 0)} duplicates. ` +
  65. 'Continue?'
  66. );
  67. if (!confirmed) {
  68. return { message: 'Fix cancelled by user' };
  69. }
  70. // Perform the fix
  71. const result = await this.fixAllBoards();
  72. return result;
  73. } catch (error) {
  74. console.error('Error in interactive fix:', error);
  75. throw error;
  76. }
  77. }
  78. };
  79. // Make it available globally for console access
  80. if (typeof window !== 'undefined') {
  81. window.fixDuplicateLists = fixDuplicateLists;
  82. }