github-issue-tower-defence-management 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/.github/workflows/commit-lint.yml +0 -2
  2. package/.github/workflows/empty-format-test-job.yml +28 -0
  3. package/.github/workflows/test.yml +1 -0
  4. package/CHANGELOG.md +37 -38
  5. package/bin/adapter/entry-points/cli/index.js +2 -1
  6. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  7. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +140 -17
  8. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  9. package/bin/adapter/repositories/BaseGitHubRepository.js +3 -9
  10. package/bin/adapter/repositories/BaseGitHubRepository.js.map +1 -1
  11. package/bin/adapter/repositories/GraphqlProjectRepository.js +30 -0
  12. package/bin/adapter/repositories/GraphqlProjectRepository.js.map +1 -1
  13. package/bin/adapter/repositories/LocalStorageRepository.js +6 -0
  14. package/bin/adapter/repositories/LocalStorageRepository.js.map +1 -1
  15. package/bin/adapter/repositories/SystemDateRepository.js +15 -3
  16. package/bin/adapter/repositories/SystemDateRepository.js.map +1 -1
  17. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +69 -9
  18. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  19. package/bin/adapter/repositories/issue/CheerioIssueRepository.js +28 -2
  20. package/bin/adapter/repositories/issue/CheerioIssueRepository.js.map +1 -1
  21. package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js +7 -0
  22. package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js.map +1 -1
  23. package/bin/adapter/repositories/issue/InternalGraphqlIssueRepository.js +19 -5
  24. package/bin/adapter/repositories/issue/InternalGraphqlIssueRepository.js.map +1 -1
  25. package/bin/adapter/repositories/issue/RestIssueRepository.js +1 -0
  26. package/bin/adapter/repositories/issue/RestIssueRepository.js.map +1 -1
  27. package/bin/adapter/repositories/utils.js +1 -6
  28. package/bin/adapter/repositories/utils.js.map +1 -1
  29. package/bin/domain/usecases/AnalyzeProblemByIssueUseCase.js +98 -65
  30. package/bin/domain/usecases/AnalyzeProblemByIssueUseCase.js.map +1 -1
  31. package/bin/domain/usecases/AnalyzeStoriesUseCase.js +173 -0
  32. package/bin/domain/usecases/AnalyzeStoriesUseCase.js.map +1 -0
  33. package/bin/domain/usecases/ChangeStatusLongInReviewIssueUseCase.js +37 -0
  34. package/bin/domain/usecases/ChangeStatusLongInReviewIssueUseCase.js.map +1 -0
  35. package/bin/domain/usecases/ClearDependedIssueURLUseCase.js +66 -0
  36. package/bin/domain/usecases/ClearDependedIssueURLUseCase.js.map +1 -0
  37. package/bin/domain/usecases/ClearNextActionHourUseCase.js +8 -2
  38. package/bin/domain/usecases/ClearNextActionHourUseCase.js.map +1 -1
  39. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js +63 -0
  40. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js.map +1 -0
  41. package/bin/domain/usecases/CreateEstimationIssueUseCase.js +100 -0
  42. package/bin/domain/usecases/CreateEstimationIssueUseCase.js.map +1 -0
  43. package/bin/domain/usecases/HandleScheduledEventUseCase.js +136 -2
  44. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  45. package/bin/domain/usecases/utils.js +24 -0
  46. package/bin/domain/usecases/utils.js.map +1 -0
  47. package/package.json +2 -2
  48. package/src/adapter/entry-points/cli/index.test.ts +1 -0
  49. package/src/adapter/entry-points/cli/index.ts +3 -1
  50. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +92 -7
  51. package/src/adapter/repositories/AxiosSlackRepository.test.ts +3 -0
  52. package/src/adapter/repositories/BaseGitHubRepository.test.ts +3 -1
  53. package/src/adapter/repositories/BaseGitHubRepository.ts +3 -12
  54. package/src/adapter/repositories/GraphqlProjectRepository.test.ts +30 -1
  55. package/src/adapter/repositories/GraphqlProjectRepository.ts +41 -0
  56. package/src/adapter/repositories/LocalStorageCacheRepository.test.ts +1 -0
  57. package/src/adapter/repositories/LocalStorageRepository.ts +6 -0
  58. package/src/adapter/repositories/SystemDateRepository.ts +17 -3
  59. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +8 -0
  60. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +123 -16
  61. package/src/adapter/repositories/issue/ApiV3IssueRepository.test.ts +3 -0
  62. package/src/adapter/repositories/issue/CheerioIssueRepository.test.ts +10 -0
  63. package/src/adapter/repositories/issue/CheerioIssueRepository.ts +37 -1
  64. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.test.ts +7 -1
  65. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.ts +15 -0
  66. package/src/adapter/repositories/issue/InternalGraphqlIssueRepository.test.ts +7 -1
  67. package/src/adapter/repositories/issue/InternalGraphqlIssueRepository.ts +22 -5
  68. package/src/adapter/repositories/issue/RestIssueRepository.test.ts +3 -0
  69. package/src/adapter/repositories/issue/RestIssueRepository.ts +5 -2
  70. package/src/adapter/repositories/utils.test.ts +16 -1
  71. package/src/adapter/repositories/utils.ts +1 -6
  72. package/src/domain/entities/Issue.ts +4 -0
  73. package/src/domain/entities/Project.ts +21 -4
  74. package/src/domain/usecases/AnalyzeProblemByIssueUseCase.ts +151 -115
  75. package/src/domain/usecases/AnalyzeStoriesUseCase.ts +296 -0
  76. package/src/domain/usecases/CONTRIBUTING_FOR_TEST.md +254 -0
  77. package/src/domain/usecases/ChangeStatusLongInReviewIssueUseCase.test.ts +204 -0
  78. package/src/domain/usecases/ChangeStatusLongInReviewIssueUseCase.ts +57 -0
  79. package/src/domain/usecases/ClearDependedIssueURLUseCase.test.ts +840 -0
  80. package/src/domain/usecases/ClearDependedIssueURLUseCase.ts +107 -0
  81. package/src/domain/usecases/ClearNextActionHourUseCase.ts +12 -2
  82. package/src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.test.ts +490 -0
  83. package/src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.ts +98 -0
  84. package/src/domain/usecases/CreateEstimationIssueUseCase.ts +157 -0
  85. package/src/domain/usecases/GenerateWorkingTimeReportUseCase.test.ts +8 -0
  86. package/src/domain/usecases/HandleScheduledEventUseCase.ts +184 -2
  87. package/src/domain/usecases/adapter-interfaces/DateRepository.ts +2 -0
  88. package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +13 -1
  89. package/src/domain/usecases/utils.ts +28 -0
  90. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts +1 -1
  91. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  92. package/types/adapter/repositories/BaseGitHubRepository.d.ts +3 -1
  93. package/types/adapter/repositories/BaseGitHubRepository.d.ts.map +1 -1
  94. package/types/adapter/repositories/GraphqlProjectRepository.d.ts.map +1 -1
  95. package/types/adapter/repositories/LocalStorageRepository.d.ts +1 -0
  96. package/types/adapter/repositories/LocalStorageRepository.d.ts.map +1 -1
  97. package/types/adapter/repositories/SystemDateRepository.d.ts +2 -0
  98. package/types/adapter/repositories/SystemDateRepository.d.ts.map +1 -1
  99. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +15 -5
  100. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  101. package/types/adapter/repositories/issue/CheerioIssueRepository.d.ts +7 -1
  102. package/types/adapter/repositories/issue/CheerioIssueRepository.d.ts.map +1 -1
  103. package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts +3 -0
  104. package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts.map +1 -1
  105. package/types/adapter/repositories/issue/InternalGraphqlIssueRepository.d.ts.map +1 -1
  106. package/types/adapter/repositories/issue/RestIssueRepository.d.ts +1 -1
  107. package/types/adapter/repositories/issue/RestIssueRepository.d.ts.map +1 -1
  108. package/types/adapter/repositories/utils.d.ts.map +1 -1
  109. package/types/domain/entities/Issue.d.ts +4 -0
  110. package/types/domain/entities/Issue.d.ts.map +1 -1
  111. package/types/domain/entities/Project.d.ts +21 -4
  112. package/types/domain/entities/Project.d.ts.map +1 -1
  113. package/types/domain/usecases/AnalyzeProblemByIssueUseCase.d.ts +13 -8
  114. package/types/domain/usecases/AnalyzeProblemByIssueUseCase.d.ts.map +1 -1
  115. package/types/domain/usecases/AnalyzeStoriesUseCase.d.ts +45 -0
  116. package/types/domain/usecases/AnalyzeStoriesUseCase.d.ts.map +1 -0
  117. package/types/domain/usecases/ChangeStatusLongInReviewIssueUseCase.d.ts +17 -0
  118. package/types/domain/usecases/ChangeStatusLongInReviewIssueUseCase.d.ts.map +1 -0
  119. package/types/domain/usecases/ClearDependedIssueURLUseCase.d.ts +13 -0
  120. package/types/domain/usecases/ClearDependedIssueURLUseCase.d.ts.map +1 -0
  121. package/types/domain/usecases/ClearNextActionHourUseCase.d.ts.map +1 -1
  122. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts +20 -0
  123. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts.map +1 -0
  124. package/types/domain/usecases/CreateEstimationIssueUseCase.d.ts +33 -0
  125. package/types/domain/usecases/CreateEstimationIssueUseCase.d.ts.map +1 -0
  126. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +28 -2
  127. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  128. package/types/domain/usecases/adapter-interfaces/DateRepository.d.ts +2 -0
  129. package/types/domain/usecases/adapter-interfaces/DateRepository.d.ts.map +1 -1
  130. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +4 -1
  131. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
  132. package/types/domain/usecases/utils.d.ts +5 -0
  133. package/types/domain/usecases/utils.d.ts.map +1 -0
  134. package/types/index.d.ts +1 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AnalyzeProblemByIssueUseCase = void 0;
4
+ const utils_1 = require("./utils");
4
5
  class AnalyzeProblemByIssueUseCase {
5
6
  constructor(issueRepository, dateRepository) {
6
7
  this.issueRepository = issueRepository;
@@ -8,71 +9,117 @@ class AnalyzeProblemByIssueUseCase {
8
9
  this.run = async (input) => {
9
10
  const story = input.project.story;
10
11
  if (!story ||
11
- !input.targetDates.find((targetDate) => targetDate.getHours() === 7 && targetDate.getMinutes() === 0)) {
12
+ !input.targetDates.find((targetDate) => targetDate.getHours() === 0 && targetDate.getMinutes() === 0)) {
12
13
  return;
13
14
  }
14
- const isTargetIssue = (issue) => {
15
- return (!issue.isPr &&
16
- (issue.nextActionDate === null ||
17
- issue.nextActionDate.getTime() <= input.targetDates[0].getTime()) &&
18
- issue.nextActionHour === null);
19
- };
20
- const summaryStoryIssue = new Map();
21
- const targetStory = input.project.story?.stories.slice(0, 12) || [];
22
- for (const story of targetStory) {
23
- summaryStoryIssue.set(story.name, new Map());
24
- for (const issue of input.issues) {
25
- if (issue.story !== story.name || !isTargetIssue(issue)) {
15
+ const targetDate = input.targetDates[input.targetDates.length - 1];
16
+ if (!targetDate) {
17
+ return;
18
+ }
19
+ await this.checkInProgress({ ...input, targetDate });
20
+ for (const storyObject of input.storyObjectMap.values()) {
21
+ const storyIssue = storyObject.storyIssue;
22
+ if (!storyIssue) {
23
+ continue;
24
+ }
25
+ await this.issueRepository.createComment(storyIssue, this.createSummaryCommentBody({ ...storyObject, storyIssue }));
26
+ await new Promise((resolve) => setTimeout(resolve, 5000));
27
+ }
28
+ };
29
+ this.checkInProgress = async (input) => {
30
+ const assigneeToNotify = [];
31
+ for (const member of input.members) {
32
+ let topIssue = null;
33
+ for (const story of input.storyObjectMap.values()) {
34
+ const storyIssueObject = input.storyObjectMap.get(story.story.name);
35
+ if (!storyIssueObject) {
26
36
  continue;
27
37
  }
28
- const totalWorkingTimeByAssignee = this.calculateTotalWorkingMinutesByAssignee(issue);
29
- const totalWorkingTime = Math.round(Array.from(totalWorkingTimeByAssignee.values()).reduce((a, b) => a + b, 0));
30
- const issueSummary = {
31
- totalWorkingTime,
32
- totalWorkingTimeByAssignee,
33
- };
34
- summaryStoryIssue.get(story.name)?.set(issue, issueSummary);
35
- // if (totalWorkingTime < 240 || totalWorkingTime > 1440) {
36
- // continue;
37
- // }
38
- // await this.issueRepository.createNewIssue(
39
- // issue.org,
40
- // issue.repo,
41
- // `Please share the situation about #${issue.number} (${issue.title}) / total working time: ${totalWorkingTime} minutes`,
42
- // this.createQuestionIssueBody(
43
- // issue,
44
- // totalWorkingTime,
45
- // totalWorkingTimeByAssignee,
46
- // ),
47
- //
48
- // [input.manager],
49
- // ['story:workflow-management'],
50
- // );
38
+ else if (assigneeToNotify.includes(member)) {
39
+ break;
40
+ }
41
+ for (const issue of storyIssueObject.issues) {
42
+ if (!(0, utils_1.isVisibleIssue)(issue, member, input.targetDate, input.disabledStatus) ||
43
+ issue.status?.toLowerCase().includes('review') ||
44
+ issue.title.toLowerCase().includes('review') ||
45
+ issue.isPr) {
46
+ continue;
47
+ }
48
+ if (topIssue === null) {
49
+ topIssue = issue;
50
+ break;
51
+ }
52
+ if (!issue.isInProgress) {
53
+ continue;
54
+ }
55
+ assigneeToNotify.push(member);
56
+ break;
57
+ }
51
58
  }
52
59
  }
53
- await this.issueRepository.createNewIssue(input.org, input.repo, `Summary of story issues`, this.createSummaryIssueBody(summaryStoryIssue), [input.manager], ['story:workflow-management']);
60
+ if (assigneeToNotify.length === 0) {
61
+ return;
62
+ }
63
+ await this.issueRepository.createNewIssue(input.org, input.repo, 'Check in progress', `${assigneeToNotify.join('\n')}`, [input.manager], ['story:workflow-management']);
54
64
  };
55
- this.createSummaryIssueBody = (summaryStoryIssue) => {
56
- let noMultipleNewLineBody = `${Array.from(summaryStoryIssue)
57
- .map(([story, issues]) => `## ${this.dateRepository.formatDurationToHHMM(Array.from(issues.values()).reduce((a, b) => a + b.totalWorkingTime, 0))} ${story}
58
- ${Array.from(issues)
59
- .map(([issue, { totalWorkingTime, totalWorkingTimeByAssignee }]) => `- ${this.dateRepository.formatDurationToHHMM(totalWorkingTime)} ${totalWorkingTime > 300 ? ':warning: over 300min' : ''} ${issue.url} ${issue.assignees.map((a) => `@${a}`).join(' ')} ${issue.labels
60
- .map((label) => `https://github.com/${issue.nameWithOwner}/labels/${encodeURI(label).replace(/:/g, '%3A')}`)
61
- .join(' ')}
62
- ${issue.workingTimeline.length > 0 ? ` - Total` : ''}
63
- ${Array.from(totalWorkingTimeByAssignee)
64
- .map(([author, workingMinutes]) => ` - ${this.dateRepository.formatDurationToHHMM(workingMinutes)}, @${author}`)
65
+ this.createSummaryCommentBody = (storyObject) => {
66
+ const getFlowchartIdFromUrl = (url) => {
67
+ return url.split('/').slice(-3).join('/');
68
+ };
69
+ const issueTitleForFlowchart = (title) => {
70
+ return title.replace('"', "'");
71
+ };
72
+ const flowChart = `
73
+ \`\`\`mermaid
74
+
75
+ flowchart TD
76
+ ${storyObject.issues
77
+ .map((issue) => ` ${getFlowchartIdFromUrl(issue.url)}["${issue.isClosed ? '🟣' : '🟢'}#${issue.number} ${issue.isClosed ? 'Closed' : 'Open'}<br/>${issue.assignees.map((a) => `${a}`).join('<br/>')}<br/>${issueTitleForFlowchart(issue.title)}"]`)
78
+ .join('\n')}
79
+ ${storyObject.issues
80
+ .map((issue) => Array.from(issue.dependedIssueUrls)
81
+ .map((dependedIssueUrl) => {
82
+ if (issue.isClosed) {
83
+ issue.totalWorkingTimeByAssignee;
84
+ return ` ${getFlowchartIdFromUrl(dependedIssueUrl)} -->|total: ${this.dateRepository.formatDurationToHHMM(issue.totalWorkingTime)}<br/>${Array.from(issue.totalWorkingTimeByAssignee)
85
+ .map(([author, workingMinutes]) => `@${author} ${this.dateRepository.formatDurationToHHMM(workingMinutes)}`)
86
+ .join('<br/>')}| ${getFlowchartIdFromUrl(issue.url)}`;
87
+ }
88
+ return ` ${getFlowchartIdFromUrl(dependedIssueUrl)} -->|${issue.estimationMinutes
89
+ ? `Estimation: ${this.dateRepository.formatDurationToHHMM(issue.estimationMinutes)}<br/>`
90
+ : ''}<br/>by ${issue.completionDate50PercentConfidence
91
+ ? this.dateRepository.formatDateWithDayOfWeek(issue.completionDate50PercentConfidence)
92
+ : 'Unknown'}| ${getFlowchartIdFromUrl(issue.url)}`;
93
+ })
94
+ .join('\n'))
95
+ .join('\n')}
96
+ %% click event
97
+ ${storyObject.issues
98
+ .map((issue) => `click ${getFlowchartIdFromUrl(issue.url)} "${issue.url}"`)
99
+ .join('\n')}
100
+
101
+ \`\`\``;
102
+ let noMultipleNewLineBody = `
103
+ Total: ${this.dateRepository.formatDurationToHHMM(Array.from(storyObject.issues.values()).reduce((a, b) => a + b.totalWorkingTime, 0))}
104
+
105
+ ${storyObject.issues
106
+ .map((issue) => `- ${this.dateRepository.formatDurationToHHMM(issue.totalWorkingTime)} ${issue.url}
107
+ - Total
108
+ ${Array.from(issue.totalWorkingTimeByAssignee)
109
+ .map(([author, workingMinutes]) => ` - ${this.dateRepository.formatDurationToHHMM(workingMinutes)}, ${author}`)
65
110
  .join('\n')}
66
- ${issue.workingTimeline.length > 0 ? ` - Timeline` : ''}
111
+ - Timeline
67
112
  ${issue.workingTimeline
68
- .map(({ startedAt, endedAt, durationMinutes, author }) => ` - ${this.dateRepository.formatDurationToHHMM(startedAt.getMinutes())}, ${this.dateRepository.formatDurationToHHMM(endedAt.getMinutes())}, ${this.dateRepository.formatDurationToHHMM(durationMinutes)}, @${author}`)
69
- .join('\n')}`)
113
+ .map(({ startedAt, endedAt, durationMinutes, author }) => ` - ${this.dateRepository.formatDurationToHHMM(durationMinutes)}, ${this.dateRepository.formatStartEnd(startedAt, endedAt)}}, ${author}`)
70
114
  .join('\n')}`)
71
115
  .join('\n')}`;
72
116
  while (noMultipleNewLineBody.includes('\n\n')) {
73
117
  noMultipleNewLineBody = noMultipleNewLineBody.replace('\n\n', '\n');
74
118
  }
75
- return noMultipleNewLineBody;
119
+ return `${flowChart}
120
+
121
+ ${noMultipleNewLineBody}
122
+ `;
76
123
  };
77
124
  this.createQuestionIssueBody = (issue, totalWorkingTime, totalWorkingTimeByAssignee) => {
78
125
  return `Hi,
@@ -96,20 +143,6 @@ ${issue.workingTimeline
96
143
  .join('\n')}
97
144
  `;
98
145
  };
99
- this.calculateTotalWorkingMinutesByAssignee = (issue) => {
100
- const workingTimeLine = issue.workingTimeline;
101
- const mapWorkingTimeByAssignee = new Map();
102
- for (const workingTime of workingTimeLine) {
103
- const author = workingTime.author;
104
- const workingMinutes = workingTime.durationMinutes;
105
- if (!mapWorkingTimeByAssignee.has(author)) {
106
- mapWorkingTimeByAssignee.set(author, 0);
107
- }
108
- const currentWorkingMinutes = mapWorkingTimeByAssignee.get(author) || 0;
109
- mapWorkingTimeByAssignee.set(author, currentWorkingMinutes + workingMinutes);
110
- }
111
- return mapWorkingTimeByAssignee;
112
- };
113
146
  }
114
147
  }
115
148
  exports.AnalyzeProblemByIssueUseCase = AnalyzeProblemByIssueUseCase;
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyzeProblemByIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeProblemByIssueUseCase.ts"],"names":[],"mappings":";;;AAMA,MAAa,4BAA4B;IACvC,YACW,eAAwD,EACxD,cAA4D;QAD5D,oBAAe,GAAf,eAAe,CAAyC;QACxD,mBAAc,GAAd,cAAc,CAA8C;QAGvE,QAAG,GAAG,KAAK,EAAE,KAQZ,EAAiB,EAAE;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAClC,IACE,CAAC,KAAK;gBACN,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CACrB,CAAC,UAAU,EAAE,EAAE,CACb,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAC/D,EACD,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,aAAa,GAAG,CAAC,KAAY,EAAW,EAAE;gBAC9C,OAAO,CACL,CAAC,KAAK,CAAC,IAAI;oBACX,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI;wBAC5B,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;oBACnE,KAAK,CAAC,cAAc,KAAK,IAAI,CAC9B,CAAC;YACJ,CAAC,CAAC;YACF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAS9B,CAAC;YACJ,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;YACpE,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;gBAChC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC7C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;wBACxD,SAAS;oBACX,CAAC;oBACD,MAAM,0BAA0B,GAC9B,IAAI,CAAC,sCAAsC,CAAC,KAAK,CAAC,CAAC;oBACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CACjC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACpD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EACf,CAAC,CACF,CACF,CAAC;oBACF,MAAM,YAAY,GAGd;wBACF,gBAAgB;wBAChB,0BAA0B;qBAC3B,CAAC;oBACF,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;oBAC5D,2DAA2D;oBAC3D,cAAc;oBACd,IAAI;oBACJ,6CAA6C;oBAC7C,eAAe;oBACf,gBAAgB;oBAChB,4HAA4H;oBAC5H,kCAAkC;oBAClC,aAAa;oBACb,wBAAwB;oBACxB,kCAAkC;oBAClC,OAAO;oBACP,EAAE;oBACF,qBAAqB;oBACrB,mCAAmC;oBACnC,KAAK;gBACP,CAAC;YACH,CAAC;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CACvC,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,IAAI,EACV,yBAAyB,EACzB,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,EAE9C,CAAC,KAAK,CAAC,OAAO,CAAC,EACf,CAAC,2BAA2B,CAAC,CAC9B,CAAC;QACJ,CAAC,CAAC;QACF,2BAAsB,GAAG,CACvB,iBASC,EACO,EAAE;YACV,IAAI,qBAAqB,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;iBACzD,GAAG,CACF,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAClB,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK;EACxI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;iBACjB,GAAG,CACF,CAAC,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,CAAC,EAAE,EAAE,CAC5D,KAAK,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM;iBACnM,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CACR,sBAAsB,KAAK,CAAC,aAAa,WAAW,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAC9F;iBACA,IAAI,CAAC,GAAG,CAAC;EAChB,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;EACnD,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC;iBACrC,GAAG,CACF,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,EAAE,CAC3B,SAAS,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,MAAM,EAAE,CAClF;iBACA,IAAI,CAAC,IAAI,CAAC;EACX,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;EACtD,KAAK,CAAC,eAAe;iBACpB,GAAG,CACF,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,CAClD,SAAS,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAC/C,SAAS,CAAC,UAAU,EAAE,CACvB,KAAK,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAC5C,OAAO,CAAC,UAAU,EAAE,CACrB,KAAK,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,eAAe,CAAC,MAAM,MAAM,EAAE,CAChF;iBACA,IAAI,CAAC,IAAI,CAAC,EAAE,CACZ;iBACA,IAAI,CAAC,IAAI,CAAC,EAAE,CACR;iBACA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChB,OAAO,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9C,qBAAqB,GAAG,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,qBAAqB,CAAC;QAC/B,CAAC,CAAC;QACF,4BAAuB,GAAG,CACxB,KAAY,EACZ,gBAAwB,EACxB,0BAA+C,EACvC,EAAE;YACV,OAAO;kCACuB,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK;;;;EAI5D,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;;;;EAI1D,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC;iBACrC,GAAG,CACF,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,EAAE,CAC3B,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,MAAM,EAAE,CAC3E;iBACA,IAAI,CAAC,IAAI,CAAC;;;;;EAKX,KAAK,CAAC,eAAe;iBACpB,GAAG,CACF,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,CAClD,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CACzC,SAAS,CAAC,UAAU,EAAE,CACvB,KAAK,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAC5C,OAAO,CAAC,UAAU,EAAE,CACrB,KAAK,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,eAAe,CAAC,KAAK,MAAM,EAAE,CAC/E;iBACA,IAAI,CAAC,IAAI,CAAC;CACZ,CAAC;QACA,CAAC,CAAC;QAEF,2CAAsC,GAAG,CACvC,KAAY,EACS,EAAE;YACvB,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;YAC9C,MAAM,wBAAwB,GAAwB,IAAI,GAAG,EAAE,CAAC;YAChE,KAAK,MAAM,WAAW,IAAI,eAAe,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;gBAClC,MAAM,cAAc,GAAG,WAAW,CAAC,eAAe,CAAC;gBACnD,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1C,wBAAwB,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC1C,CAAC;gBACD,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxE,wBAAwB,CAAC,GAAG,CAC1B,MAAM,EACN,qBAAqB,GAAG,cAAc,CACvC,CAAC;YACJ,CAAC;YACD,OAAO,wBAAwB,CAAC;QAClC,CAAC,CAAC;IArMC,CAAC;CAsML;AA1MD,oEA0MC"}
1
+ {"version":3,"file":"AnalyzeProblemByIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeProblemByIssueUseCase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AnalyzeStoriesUseCase = void 0;
4
+ const utils_1 = require("./utils");
5
+ class AnalyzeStoriesUseCase {
6
+ constructor(issueRepository, dateRepository) {
7
+ this.issueRepository = issueRepository;
8
+ this.dateRepository = dateRepository;
9
+ this.run = async (input) => {
10
+ const story = input.project.story;
11
+ if (!story ||
12
+ !input.targetDates.find((targetDate) => targetDate.getHours() === 7 && targetDate.getMinutes() === 0)) {
13
+ return;
14
+ }
15
+ const phases = new Map();
16
+ phases.set('story:phase:requirement:opened', []);
17
+ phases.set('story:phase:requirement:finished-prd', []);
18
+ phases.set('story:phase:requirement:finished-figma', []);
19
+ phases.set('story:phase:requirement:finished-testcase', []);
20
+ phases.set('story:phase:requirement:finished-deviding-task', []);
21
+ phases.set('story:phase:implementation-finished', []);
22
+ phases.set('story:phase:finished-qa', []);
23
+ phases.set('others', []);
24
+ for (const story of input.project.story?.stories || []) {
25
+ const storyIssue = input.issues.find((issue) => story.name.startsWith(issue.title));
26
+ if (story.name.startsWith('regular / ')) {
27
+ continue;
28
+ }
29
+ else if (!storyIssue) {
30
+ throw new Error(`Story issue not found: ${story.name}`);
31
+ }
32
+ const storyIssueObject = {
33
+ ...storyIssue,
34
+ ...story,
35
+ };
36
+ if (storyIssue.status === input.disabledStatus) {
37
+ phases.get('others')?.push(storyIssueObject);
38
+ }
39
+ else if (storyIssue.labels.includes('story:phase:finished-qa')) {
40
+ phases.get('story:phase:finished-qa')?.push(storyIssueObject);
41
+ }
42
+ else if (storyIssue.labels.includes('story:phase:implementation-finished')) {
43
+ phases
44
+ .get('story:phase:implementation-finished')
45
+ ?.push(storyIssueObject);
46
+ }
47
+ else if (storyIssue.labels.includes('story:phase:requirement:finished-deviding-task')) {
48
+ phases
49
+ .get('story:phase:requirement:finished-deviding-task')
50
+ ?.push(storyIssueObject);
51
+ }
52
+ else if (storyIssue.labels.includes('story:phase:requirement:finished-testcase')) {
53
+ phases
54
+ .get('story:phase:requirement:finished-testcase')
55
+ ?.push(storyIssueObject);
56
+ }
57
+ else if (storyIssue.labels.includes('story:phase:requirement:finished-figma')) {
58
+ phases
59
+ .get('story:phase:requirement:finished-figma')
60
+ ?.push(storyIssueObject);
61
+ }
62
+ else if (storyIssue.labels.includes('story:phase:requirement:finished-prd')) {
63
+ phases
64
+ .get('story:phase:requirement:finished-prd')
65
+ ?.push(storyIssueObject);
66
+ }
67
+ else if (storyIssue.labels.includes('story:phase:requirement:opened')) {
68
+ phases.get('story:phase:requirement:opened')?.push(storyIssueObject);
69
+ }
70
+ else {
71
+ phases.get('others')?.push(storyIssueObject);
72
+ }
73
+ }
74
+ await this.issueRepository.createNewIssue(input.org, input.repo, `Story progress`, this.createSummaryIssueBody(input.project, input.issues, phases, input.storyObjectMap, input.urlOfStoryView, input.members), [input.manager], ['story:workflow-management']);
75
+ };
76
+ this.createSummaryIssueBody = (project, issues, summaryStoryIssue, storyObjectMap, urlOfStoryView, members) => {
77
+ return `${this.createSummaryIssueBodyPhase(summaryStoryIssue, urlOfStoryView)}
78
+ ${this.createSummaryIssueBodyAssignedIssueCount(project, issues, storyObjectMap, urlOfStoryView, members)}
79
+ `;
80
+ };
81
+ this.createStoryMark = (urlOfStoryView, issue, storyOption) => {
82
+ const storyColor = `:${storyOption.color === 'BLUE' ? 'large_' : ''}${storyOption.color === 'GRAY' ? 'black' : storyOption.color === 'PINK' ? 'red' : storyOption.color.toLowerCase()}_circle:`;
83
+ const stakeHolder = issue === null
84
+ ? ' '
85
+ : issue.labels.find((label) => label === 'story:stakeholder:user')
86
+ ? `:bust_in_silhouette:`
87
+ : issue.labels.find((label) => label === 'story:stakeholder:engineer')
88
+ ? `:gear:`
89
+ : issue.labels.find((label) => label === 'story:stakeholder:cs-team')
90
+ ? `:headphones:`
91
+ : issue.labels.find((label) => label === 'story:stakeholder:potential-user')
92
+ ? ':busts_in_silhouette:'
93
+ : issue.labels.find((label) => label === 'story:stakeholder:sales-team')
94
+ ? ':briefcase:'
95
+ : ':question:';
96
+ const boardUrl = `${urlOfStoryView}?filterQuery=story%3A%22${(0, utils_1.encodeForURI)(storyOption.name)}%22+is%3Aopen`;
97
+ const boardIcon = `:memo:`;
98
+ const isScheduleControlled = issue !== null && issue.labels.includes('story:action:schedule-control');
99
+ const scheduleControlledIcon = `:calendar:`;
100
+ const scheduleControlledUrl = `${urlOfStoryView}?filterQuery=%22Put+estimation+fields%22+%22${(0, utils_1.encodeForURI)(storyOption.name)}%22`;
101
+ return {
102
+ storyColorIcon: storyColor,
103
+ stakeHolderIcon: stakeHolder,
104
+ boardUrl,
105
+ boardIcon,
106
+ isScheduleControlled,
107
+ scheduleControlledIcon,
108
+ scheduleControlledUrl,
109
+ };
110
+ };
111
+ this.createSummaryIssueBodyPhase = (summaryStoryIssue, urlOfStoryView) => {
112
+ return `
113
+
114
+ ${Array.from(summaryStoryIssue.keys())
115
+ .map((key) => {
116
+ return `
117
+ ## ${key}
118
+ ${summaryStoryIssue
119
+ .get(key)
120
+ ?.map((issue) => {
121
+ const { storyColorIcon, stakeHolderIcon, boardIcon, boardUrl, isScheduleControlled, scheduleControlledIcon, scheduleControlledUrl, } = this.createStoryMark(urlOfStoryView, issue, issue);
122
+ const remainingIssueCount = summaryStoryIssue
123
+ .get(key)
124
+ ?.filter((issue) => !issue.isClosed && !issue.isPr).length || 0;
125
+ return `- ${storyColorIcon} ${stakeHolderIcon} ${isScheduleControlled ? `[${scheduleControlledIcon}](${scheduleControlledUrl})` : ''} [(${remainingIssueCount})](${boardUrl}) ${issue.url} [${boardIcon}](${boardUrl})`;
126
+ })
127
+ .join('\n')}`;
128
+ })
129
+ .join('\n')}`;
130
+ };
131
+ this.createSummaryIssueBodyAssignedIssueCount = (project, issues, storyObjectMap, urlOfStoryView, members) => {
132
+ return `
133
+ <table>
134
+ <thead>
135
+ <tr>
136
+ <th>story/<br/>assignee</th>
137
+ ${members.map((member) => `<th><img src="https://github.com/${member}.png?size=40" alt="${member}" /></th>`).join('\n')}
138
+ </tr>
139
+ </thead>
140
+ <tbody>
141
+ ${Array.from(project.story?.stories.values() || [])
142
+ .map((storyOption) => {
143
+ const issue = issues.find((issue) => storyOption.name.startsWith(issue.title)) || null;
144
+ const { storyColorIcon, stakeHolderIcon, boardIcon, boardUrl, isScheduleControlled, scheduleControlledIcon, scheduleControlledUrl, } = this.createStoryMark(urlOfStoryView, issue, storyOption);
145
+ return `
146
+ <tr>
147
+ <td>
148
+ ${storyOption.name}<br/>
149
+ <a href="${boardUrl}">${boardIcon}</a> ${storyColorIcon} ${stakeHolderIcon} ${isScheduleControlled ? `<a href="${scheduleControlledUrl}">${scheduleControlledIcon}</a>` : ''}
150
+ </td>
151
+ ${members
152
+ .map((member) => {
153
+ const assignedIssuesInStory = issues.filter((issue) => issue.story === storyOption.name &&
154
+ !issue.isClosed &&
155
+ !issue.isPr &&
156
+ issue.assignees.includes(member));
157
+ return `<td>${assignedIssuesInStory.length > 0 ? assignedIssuesInStory.length : ''}</td>`;
158
+ })
159
+ .join('\n')}
160
+ </tr>
161
+
162
+
163
+ `;
164
+ })
165
+ .join('\n')}
166
+ </tbody>
167
+ </table>
168
+ `;
169
+ };
170
+ }
171
+ }
172
+ exports.AnalyzeStoriesUseCase = AnalyzeStoriesUseCase;
173
+ //# sourceMappingURL=AnalyzeStoriesUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyzeStoriesUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeStoriesUseCase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChangeStatusLongInReviewIssueUseCase = void 0;
4
+ class ChangeStatusLongInReviewIssueUseCase {
5
+ constructor(dateRepository, issueRepository) {
6
+ this.dateRepository = dateRepository;
7
+ this.issueRepository = issueRepository;
8
+ this.run = async (input) => {
9
+ const firstStatus = input.project.status.statuses[0];
10
+ if (!firstStatus) {
11
+ throw new Error('First status is not found');
12
+ }
13
+ for (const issue of input.issues) {
14
+ if (issue.isPr ||
15
+ issue.isClosed ||
16
+ !issue.status?.toLowerCase().includes('review')) {
17
+ continue;
18
+ }
19
+ if (issue.workingTimeline.length > 0) {
20
+ const latestWorkingTime = issue.workingTimeline[issue.workingTimeline.length - 1];
21
+ const now = await this.dateRepository.now();
22
+ const diff = now.getTime() - latestWorkingTime.endedAt.getTime();
23
+ const diffHours = diff / (1000 * 60 * 60);
24
+ if (diffHours < 48) {
25
+ continue;
26
+ }
27
+ }
28
+ await this.issueRepository.createComment(issue, `${issue.assignees.map((assignee) => `@${assignee}`).join(' ')}
29
+ This issue has been in review for more than 48 hours.
30
+ Please check the situation of PR again :pray:`);
31
+ await this.issueRepository.updateStatus(input.project, issue, firstStatus.id);
32
+ }
33
+ };
34
+ }
35
+ }
36
+ exports.ChangeStatusLongInReviewIssueUseCase = ChangeStatusLongInReviewIssueUseCase;
37
+ //# sourceMappingURL=ChangeStatusLongInReviewIssueUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeStatusLongInReviewIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ChangeStatusLongInReviewIssueUseCase.ts"],"names":[],"mappings":";;;AAKA,MAAa,oCAAoC;IAC/C,YACW,cAA2C,EAC3C,eAGR;QAJQ,mBAAc,GAAd,cAAc,CAA6B;QAC3C,oBAAe,GAAf,eAAe,CAGvB;QAGH,QAAG,GAAG,KAAK,EAAE,KAMZ,EAAiB,EAAE;YAClB,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,IACE,KAAK,CAAC,IAAI;oBACV,KAAK,CAAC,QAAQ;oBACd,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC/C,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrC,MAAM,iBAAiB,GACrB,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC1D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;oBAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACjE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;oBAC1C,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;wBACnB,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CACtC,KAAK,EACL,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;8CAExB,CACvC,CAAC;gBACF,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CACrC,KAAK,CAAC,OAAO,EACb,KAAK,EACL,WAAW,CAAC,EAAE,CACf,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;IA3CC,CAAC;CA4CL;AAnDD,oFAmDC"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClearDependedIssueURLUseCase = void 0;
4
+ class ClearDependedIssueURLUseCase {
5
+ constructor(issueRepository) {
6
+ this.issueRepository = issueRepository;
7
+ this.run = async (input) => {
8
+ const dependedIssueUrlSeparatedByComma = input.project.dependedIssueUrlSeparatedByComma;
9
+ if (!dependedIssueUrlSeparatedByComma || input.cacheUsed) {
10
+ return;
11
+ }
12
+ for (const issue of input.issues) {
13
+ if (issue.dependedIssueUrls.length <= 0 || issue.isClosed) {
14
+ continue;
15
+ }
16
+ const circularDependedIssueUrls = issue.dependedIssueUrls.filter((dependedIssueUrl) => {
17
+ // get all depended issues circularly
18
+ const circularDependedIssues = new Set();
19
+ const stack = [dependedIssueUrl];
20
+ while (stack.length > 0) {
21
+ const url = stack.pop();
22
+ if (!url) {
23
+ throw new Error('url is undefined');
24
+ }
25
+ if (circularDependedIssues.has(url)) {
26
+ continue;
27
+ }
28
+ circularDependedIssues.add(url);
29
+ const dependedIssue = input.issues.find((issue) => issue.url === url);
30
+ if (!dependedIssue) {
31
+ continue;
32
+ }
33
+ stack.push(...dependedIssue.dependedIssueUrls);
34
+ }
35
+ return circularDependedIssues.has(issue.url);
36
+ });
37
+ if (circularDependedIssueUrls.length > 0) {
38
+ await this.issueRepository.clearProjectField(input.project, dependedIssueUrlSeparatedByComma.fieldId, issue);
39
+ await this.issueRepository.createComment(issue, `Circular dependency removed:
40
+ ${circularDependedIssueUrls.map((url) => `- ${url}`).join('\n')}`);
41
+ continue;
42
+ }
43
+ const remainingDependedIssueUrls = issue.dependedIssueUrls.filter((dependedIssueUrl) => input.issues.some((issue) => {
44
+ const r = issue.url === dependedIssueUrl && !issue.isClosed;
45
+ return r;
46
+ }));
47
+ const closedDependedIssueUrls = issue.dependedIssueUrls.filter((dependedIssueUrl) => remainingDependedIssueUrls.indexOf(dependedIssueUrl) === -1);
48
+ if (remainingDependedIssueUrls.length === issue.dependedIssueUrls.length) {
49
+ continue;
50
+ }
51
+ if (remainingDependedIssueUrls.length === 0) {
52
+ await this.issueRepository.clearProjectField(input.project, dependedIssueUrlSeparatedByComma.fieldId, issue);
53
+ await this.issueRepository.createComment(issue, `Closed all depended issues:
54
+ ${closedDependedIssueUrls.map((url) => `- ${url}`).join('\n')}`);
55
+ }
56
+ else {
57
+ await this.issueRepository.updateProjectTextField(input.project, dependedIssueUrlSeparatedByComma.fieldId, issue, remainingDependedIssueUrls.join(','));
58
+ await this.issueRepository.createComment(issue, `Closed depended issues:
59
+ ${closedDependedIssueUrls.map((url) => `- ${url}`).join('\n')}`);
60
+ }
61
+ }
62
+ };
63
+ }
64
+ }
65
+ exports.ClearDependedIssueURLUseCase = ClearDependedIssueURLUseCase;
66
+ //# sourceMappingURL=ClearDependedIssueURLUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClearDependedIssueURLUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearDependedIssueURLUseCase.ts"],"names":[],"mappings":"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"}
@@ -6,9 +6,10 @@ class ClearNextActionHourUseCase {
6
6
  this.issueRepository = issueRepository;
7
7
  this.run = async (input) => {
8
8
  const nextActionHour = input.project.nextActionHour;
9
- if (!nextActionHour || input.cacheUsed) {
9
+ if (!nextActionHour) {
10
10
  return;
11
11
  }
12
+ const nextActionDate = input.project.nextActionDate;
12
13
  const targetDates = input.targetDates
13
14
  .filter((targetDate) => targetDate.getMinutes() === 45)
14
15
  .reverse();
@@ -16,7 +17,7 @@ class ClearNextActionHourUseCase {
16
17
  return;
17
18
  }
18
19
  const targetDate = new Date(targetDates[targetDates.length - 1].getTime() + 5 * 60 * 1000);
19
- const targetHour = targetDate.getHours();
20
+ const targetHour = targetDate.getHours() + 1;
20
21
  const isTargetIssue = (issue) => {
21
22
  return (issue.nextActionHour !== null &&
22
23
  issue.nextActionHour <= targetHour &&
@@ -30,6 +31,11 @@ class ClearNextActionHourUseCase {
30
31
  }
31
32
  await this.issueRepository.clearProjectField(input.project, nextActionHour.fieldId, issue);
32
33
  await new Promise((resolve) => setTimeout(resolve, 5000));
34
+ if (!nextActionDate) {
35
+ continue;
36
+ }
37
+ await this.issueRepository.clearProjectField(input.project, nextActionDate.fieldId, issue);
38
+ await new Promise((resolve) => setTimeout(resolve, 5000));
33
39
  }
34
40
  };
35
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ClearNextActionHourUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearNextActionHourUseCase.ts"],"names":[],"mappings":";;;AAIA,MAAa,0BAA0B;IACrC,YACW,eAA2D;QAA3D,oBAAe,GAAf,eAAe,CAA4C;QAGtE,QAAG,GAAG,KAAK,EAAE,KAKZ,EAAiB,EAAE;YAClB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACpD,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACvC,OAAO;YACT,CAAC;YACD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW;iBAClC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;iBACtD,OAAO,EAAE,CAAC;YACb,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,IAAI,CACzB,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAC9D,CAAC;YACF,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,aAAa,GAAG,CAAC,KAAY,EAAW,EAAE;gBAC9C,OAAO,CACL,KAAK,CAAC,cAAc,KAAK,IAAI;oBAC7B,KAAK,CAAC,cAAc,IAAI,UAAU;oBAClC,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI;wBAC5B,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACzD,KAAK,CAAC,KAAK,KAAK,MAAM,CACvB,CAAC;YACJ,CAAC,CAAC;YACF,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC1C,KAAK,CAAC,OAAO,EACb,cAAc,CAAC,OAAO,EACtB,KAAK,CACN,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC;IA1CC,CAAC;CA2CL;AA9CD,gEA8CC"}
1
+ {"version":3,"file":"ClearNextActionHourUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearNextActionHourUseCase.ts"],"names":[],"mappings":";;;AAIA,MAAa,0BAA0B;IACrC,YACW,eAA2D;QAA3D,oBAAe,GAAf,eAAe,CAA4C;QAGtE,QAAG,GAAG,KAAK,EAAE,KAKZ,EAAiB,EAAE;YAClB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACpD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YACpD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW;iBAClC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;iBACtD,OAAO,EAAE,CAAC;YACb,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,IAAI,CACzB,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAC9D,CAAC;YACF,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC7C,MAAM,aAAa,GAAG,CAAC,KAAY,EAAW,EAAE;gBAC9C,OAAO,CACL,KAAK,CAAC,cAAc,KAAK,IAAI;oBAC7B,KAAK,CAAC,cAAc,IAAI,UAAU;oBAClC,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI;wBAC5B,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACzD,KAAK,CAAC,KAAK,KAAK,MAAM,CACvB,CAAC;YACJ,CAAC,CAAC;YACF,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC1C,KAAK,CAAC,OAAO,EACb,cAAc,CAAC,OAAO,EACtB,KAAK,CACN,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC1C,KAAK,CAAC,OAAO,EACb,cAAc,CAAC,OAAO,EACtB,KAAK,CACN,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC;IApDC,CAAC;CAqDL;AAxDD,gEAwDC"}