github-issue-tower-defence-management 1.1.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.
- package/.env.example +6 -0
- package/.eslintrc.cjs +55 -0
- package/.github/CODEOWNERS +2 -0
- package/.github/workflows/assign-all-cards-to-owner.yml +14 -0
- package/.github/workflows/commit-lint.yml +54 -0
- package/.github/workflows/configs/commitlint.config.js +27 -0
- package/.github/workflows/create-pr.yml +64 -0
- package/.github/workflows/format.yml +25 -0
- package/.github/workflows/publish.yml +47 -0
- package/.github/workflows/test.yml +45 -0
- package/.github/workflows/umino-project.yml +181 -0
- package/.prettierignore +22 -0
- package/.prettierrc +5 -0
- package/CHANGELOG.md +49 -0
- package/CONTRIBUTING.md +107 -0
- package/README.md +108 -0
- package/bin/adapter/entry-points/cli/index.js +26 -0
- package/bin/adapter/entry-points/cli/index.js.map +1 -0
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +142 -0
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -0
- package/bin/adapter/repositories/AxiosSlackRepository.js +124 -0
- package/bin/adapter/repositories/AxiosSlackRepository.js.map +1 -0
- package/bin/adapter/repositories/BaseGitHubRepository.js +136 -0
- package/bin/adapter/repositories/BaseGitHubRepository.js.map +1 -0
- package/bin/adapter/repositories/GoogleSpreadsheetRepository.js +123 -0
- package/bin/adapter/repositories/GoogleSpreadsheetRepository.js.map +1 -0
- package/bin/adapter/repositories/GraphqlProjectRepository.js +167 -0
- package/bin/adapter/repositories/GraphqlProjectRepository.js.map +1 -0
- package/bin/adapter/repositories/LocalStorageCacheRepository.js +46 -0
- package/bin/adapter/repositories/LocalStorageCacheRepository.js.map +1 -0
- package/bin/adapter/repositories/LocalStorageRepository.js +30 -0
- package/bin/adapter/repositories/LocalStorageRepository.js.map +1 -0
- package/bin/adapter/repositories/SystemDateRepository.js +23 -0
- package/bin/adapter/repositories/SystemDateRepository.js.map +1 -0
- package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +148 -0
- package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -0
- package/bin/adapter/repositories/issue/ApiV3IssueRepository.js +48 -0
- package/bin/adapter/repositories/issue/ApiV3IssueRepository.js.map +1 -0
- package/bin/adapter/repositories/issue/CheerioIssueRepository.js +120 -0
- package/bin/adapter/repositories/issue/CheerioIssueRepository.js.map +1 -0
- package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js +485 -0
- package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js.map +1 -0
- package/bin/adapter/repositories/issue/InternalGraphqlIssueRepository.js +114 -0
- package/bin/adapter/repositories/issue/InternalGraphqlIssueRepository.js.map +1 -0
- package/bin/adapter/repositories/issue/RestIssueRepository.js +79 -0
- package/bin/adapter/repositories/issue/RestIssueRepository.js.map +1 -0
- package/bin/adapter/repositories/issue/issueTimelineUtils.js +38 -0
- package/bin/adapter/repositories/issue/issueTimelineUtils.js.map +1 -0
- package/bin/adapter/repositories/utils.js +45 -0
- package/bin/adapter/repositories/utils.js.map +1 -0
- package/bin/domain/entities/Issue.js +3 -0
- package/bin/domain/entities/Issue.js.map +1 -0
- package/bin/domain/entities/Member.js +3 -0
- package/bin/domain/entities/Member.js.map +1 -0
- package/bin/domain/entities/Project.js +3 -0
- package/bin/domain/entities/Project.js.map +1 -0
- package/bin/domain/entities/ProjectField.js +3 -0
- package/bin/domain/entities/ProjectField.js.map +1 -0
- package/bin/domain/entities/ProjectFieldSingleSelect.js +3 -0
- package/bin/domain/entities/ProjectFieldSingleSelect.js.map +1 -0
- package/bin/domain/entities/ProjectFieldSingleSelectOption.js +3 -0
- package/bin/domain/entities/ProjectFieldSingleSelectOption.js.map +1 -0
- package/bin/domain/entities/WorkingTime.js +3 -0
- package/bin/domain/entities/WorkingTime.js.map +1 -0
- package/bin/domain/usecases/ActionAnnouncementUseCase.js +46 -0
- package/bin/domain/usecases/ActionAnnouncementUseCase.js.map +1 -0
- package/bin/domain/usecases/AnalyzeProblemByIssueUseCase.js +116 -0
- package/bin/domain/usecases/AnalyzeProblemByIssueUseCase.js.map +1 -0
- package/bin/domain/usecases/ClearNextActionHourUseCase.js +38 -0
- package/bin/domain/usecases/ClearNextActionHourUseCase.js.map +1 -0
- package/bin/domain/usecases/GenerateWorkingTimeReportUseCase.js +180 -0
- package/bin/domain/usecases/GenerateWorkingTimeReportUseCase.js.map +1 -0
- package/bin/domain/usecases/HandleScheduledEventUseCase.js +122 -0
- package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -0
- package/bin/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.js +35 -0
- package/bin/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.js.map +1 -0
- package/bin/domain/usecases/adapter-interfaces/DateRepository.js +3 -0
- package/bin/domain/usecases/adapter-interfaces/DateRepository.js.map +1 -0
- package/bin/domain/usecases/adapter-interfaces/IssueRepository.js +3 -0
- package/bin/domain/usecases/adapter-interfaces/IssueRepository.js.map +1 -0
- package/bin/domain/usecases/adapter-interfaces/ProjectRepository.js +3 -0
- package/bin/domain/usecases/adapter-interfaces/ProjectRepository.js.map +1 -0
- package/bin/domain/usecases/adapter-interfaces/SlackRepository.js +3 -0
- package/bin/domain/usecases/adapter-interfaces/SlackRepository.js.map +1 -0
- package/bin/domain/usecases/adapter-interfaces/SpreadsheetRepository.js +3 -0
- package/bin/domain/usecases/adapter-interfaces/SpreadsheetRepository.js.map +1 -0
- package/bin/index.js +13 -0
- package/bin/index.js.map +1 -0
- package/commitlint.config.js +6 -0
- package/jest.config.js +19 -0
- package/package.json +80 -0
- package/renovate.json +37 -0
- package/src/adapter/entry-points/cli/index.test.ts +20 -0
- package/src/adapter/entry-points/cli/index.ts +36 -0
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +95 -0
- package/src/adapter/repositories/AxiosSlackRepository.test.ts +119 -0
- package/src/adapter/repositories/AxiosSlackRepository.ts +184 -0
- package/src/adapter/repositories/BaseGitHubRepository.test.ts +95 -0
- package/src/adapter/repositories/BaseGitHubRepository.ts +172 -0
- package/src/adapter/repositories/GoogleSpreadsheetRepository.test.ts +124 -0
- package/src/adapter/repositories/GoogleSpreadsheetRepository.ts +151 -0
- package/src/adapter/repositories/GraphqlProjectRepository.test.ts +46 -0
- package/src/adapter/repositories/GraphqlProjectRepository.ts +236 -0
- package/src/adapter/repositories/LocalStorageCacheRepository.test.ts +146 -0
- package/src/adapter/repositories/LocalStorageCacheRepository.ts +53 -0
- package/src/adapter/repositories/LocalStorageRepository.integration.test.ts +142 -0
- package/src/adapter/repositories/LocalStorageRepository.test.ts +161 -0
- package/src/adapter/repositories/LocalStorageRepository.ts +21 -0
- package/src/adapter/repositories/SystemDateRepository.ts +20 -0
- package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +158 -0
- package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +274 -0
- package/src/adapter/repositories/issue/ApiV3IssueRepository.test.ts +26 -0
- package/src/adapter/repositories/issue/ApiV3IssueRepository.ts +59 -0
- package/src/adapter/repositories/issue/CheerioIssueRepository.test.ts +6610 -0
- package/src/adapter/repositories/issue/CheerioIssueRepository.ts +127 -0
- package/src/adapter/repositories/issue/GraphqlProjectItemRepository.test.ts +49 -0
- package/src/adapter/repositories/issue/GraphqlProjectItemRepository.ts +745 -0
- package/src/adapter/repositories/issue/InternalGraphqlIssueRepository.test.ts +71 -0
- package/src/adapter/repositories/issue/InternalGraphqlIssueRepository.ts +263 -0
- package/src/adapter/repositories/issue/RestIssueRepository.test.ts +29 -0
- package/src/adapter/repositories/issue/RestIssueRepository.ts +105 -0
- package/src/adapter/repositories/issue/issueTimelineUtils.test.ts +79 -0
- package/src/adapter/repositories/issue/issueTimelineUtils.ts +52 -0
- package/src/adapter/repositories/utils.test.ts +40 -0
- package/src/adapter/repositories/utils.ts +50 -0
- package/src/domain/entities/Issue.ts +23 -0
- package/src/domain/entities/Member.ts +3 -0
- package/src/domain/entities/Project.ts +29 -0
- package/src/domain/entities/ProjectField.ts +3 -0
- package/src/domain/entities/ProjectFieldSingleSelect.ts +8 -0
- package/src/domain/entities/ProjectFieldSingleSelectOption.ts +8 -0
- package/src/domain/entities/WorkingTime.ts +8 -0
- package/src/domain/usecases/ActionAnnouncementUseCase.ts +76 -0
- package/src/domain/usecases/AnalyzeProblemByIssueUseCase.ts +209 -0
- package/src/domain/usecases/ClearNextActionHourUseCase.ts +51 -0
- package/src/domain/usecases/GenerateWorkingTimeReportUseCase.test.ts +382 -0
- package/src/domain/usecases/GenerateWorkingTimeReportUseCase.ts +284 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +58 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.ts +209 -0
- package/src/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.ts +46 -0
- package/src/domain/usecases/adapter-interfaces/DateRepository.ts +5 -0
- package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +44 -0
- package/src/domain/usecases/adapter-interfaces/ProjectRepository.ts +6 -0
- package/src/domain/usecases/adapter-interfaces/SlackRepository.ts +20 -0
- package/src/domain/usecases/adapter-interfaces/SpreadsheetRepository.ts +18 -0
- package/src/index.test.ts +8 -0
- package/src/index.ts +7 -0
- package/tsconfig.build.json +11 -0
- package/tsconfig.json +22 -0
- package/types/adapter/entry-points/cli/index.d.ts +3 -0
- package/types/adapter/entry-points/cli/index.d.ts.map +1 -0
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts +11 -0
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -0
- package/types/adapter/repositories/AxiosSlackRepository.d.ts +13 -0
- package/types/adapter/repositories/AxiosSlackRepository.d.ts.map +1 -0
- package/types/adapter/repositories/BaseGitHubRepository.d.ts +32 -0
- package/types/adapter/repositories/BaseGitHubRepository.d.ts.map +1 -0
- package/types/adapter/repositories/GoogleSpreadsheetRepository.d.ts +13 -0
- package/types/adapter/repositories/GoogleSpreadsheetRepository.d.ts.map +1 -0
- package/types/adapter/repositories/GraphqlProjectRepository.d.ts +13 -0
- package/types/adapter/repositories/GraphqlProjectRepository.d.ts.map +1 -0
- package/types/adapter/repositories/LocalStorageCacheRepository.d.ts +12 -0
- package/types/adapter/repositories/LocalStorageCacheRepository.d.ts.map +1 -0
- package/types/adapter/repositories/LocalStorageRepository.d.ts +7 -0
- package/types/adapter/repositories/LocalStorageRepository.d.ts.map +1 -0
- package/types/adapter/repositories/SystemDateRepository.d.ts +7 -0
- package/types/adapter/repositories/SystemDateRepository.d.ts.map +1 -0
- package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +38 -0
- package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -0
- package/types/adapter/repositories/issue/ApiV3IssueRepository.d.ts +17 -0
- package/types/adapter/repositories/issue/ApiV3IssueRepository.d.ts.map +1 -0
- package/types/adapter/repositories/issue/CheerioIssueRepository.d.ts +31 -0
- package/types/adapter/repositories/issue/CheerioIssueRepository.d.ts.map +1 -0
- package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts +39 -0
- package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts.map +1 -0
- package/types/adapter/repositories/issue/InternalGraphqlIssueRepository.d.ts +83 -0
- package/types/adapter/repositories/issue/InternalGraphqlIssueRepository.d.ts.map +1 -0
- package/types/adapter/repositories/issue/RestIssueRepository.d.ts +16 -0
- package/types/adapter/repositories/issue/RestIssueRepository.d.ts.map +1 -0
- package/types/adapter/repositories/issue/issueTimelineUtils.d.ts +12 -0
- package/types/adapter/repositories/issue/issueTimelineUtils.d.ts.map +1 -0
- package/types/adapter/repositories/utils.d.ts +4 -0
- package/types/adapter/repositories/utils.d.ts.map +1 -0
- package/types/domain/entities/Issue.d.ts +24 -0
- package/types/domain/entities/Issue.d.ts.map +1 -0
- package/types/domain/entities/Member.d.ts +4 -0
- package/types/domain/entities/Member.d.ts.map +1 -0
- package/types/domain/entities/Project.d.ts +29 -0
- package/types/domain/entities/Project.d.ts.map +1 -0
- package/types/domain/entities/ProjectField.d.ts +3 -0
- package/types/domain/entities/ProjectField.d.ts.map +1 -0
- package/types/domain/entities/ProjectFieldSingleSelect.d.ts +8 -0
- package/types/domain/entities/ProjectFieldSingleSelect.d.ts.map +1 -0
- package/types/domain/entities/ProjectFieldSingleSelectOption.d.ts +8 -0
- package/types/domain/entities/ProjectFieldSingleSelectOption.d.ts.map +1 -0
- package/types/domain/entities/WorkingTime.d.ts +8 -0
- package/types/domain/entities/WorkingTime.d.ts.map +1 -0
- package/types/domain/usecases/ActionAnnouncementUseCase.d.ts +17 -0
- package/types/domain/usecases/ActionAnnouncementUseCase.d.ts.map +1 -0
- package/types/domain/usecases/AnalyzeProblemByIssueUseCase.d.ts +26 -0
- package/types/domain/usecases/AnalyzeProblemByIssueUseCase.d.ts.map +1 -0
- package/types/domain/usecases/ClearNextActionHourUseCase.d.ts +14 -0
- package/types/domain/usecases/ClearNextActionHourUseCase.d.ts.map +1 -0
- package/types/domain/usecases/GenerateWorkingTimeReportUseCase.d.ts +50 -0
- package/types/domain/usecases/GenerateWorkingTimeReportUseCase.d.ts.map +1 -0
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +63 -0
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -0
- package/types/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.d.ts +14 -0
- package/types/domain/usecases/SetWorkflowManagementIssueToStoryUseCase.d.ts.map +1 -0
- package/types/domain/usecases/adapter-interfaces/DateRepository.d.ts +6 -0
- package/types/domain/usecases/adapter-interfaces/DateRepository.d.ts.map +1 -0
- package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +23 -0
- package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -0
- package/types/domain/usecases/adapter-interfaces/ProjectRepository.d.ts +6 -0
- package/types/domain/usecases/adapter-interfaces/ProjectRepository.d.ts.map +1 -0
- package/types/domain/usecases/adapter-interfaces/SlackRepository.d.ts +9 -0
- package/types/domain/usecases/adapter-interfaces/SlackRepository.d.ts.map +1 -0
- package/types/domain/usecases/adapter-interfaces/SpreadsheetRepository.d.ts +6 -0
- package/types/domain/usecases/adapter-interfaces/SpreadsheetRepository.d.ts.map +1 -0
- package/types/index.d.ts +10 -0
- package/types/index.d.ts.map +1 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RestIssueRepository = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const BaseGitHubRepository_1 = require("../BaseGitHubRepository");
|
|
9
|
+
class RestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.createComment = async (issueUrl, comment) => {
|
|
13
|
+
const { owner, repo, issueNumber } = this.extractIssueFromUrl(issueUrl);
|
|
14
|
+
const response = await axios_1.default.post(`https://api.github.com/repos/${owner}/${repo}/issues/${issueNumber}/comments`, {
|
|
15
|
+
body: comment,
|
|
16
|
+
}, {
|
|
17
|
+
headers: {
|
|
18
|
+
Authorization: `token ${this.ghToken}`,
|
|
19
|
+
'Content-Type': 'application/json',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
if (response.status !== 201) {
|
|
23
|
+
throw new Error(`Failed to create comment: ${response.status}`);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
this.createNewIssue = async (owner, repo, title, body, assignees, labels) => {
|
|
27
|
+
const response = await axios_1.default.post(`https://api.github.com/repos/${owner}/${repo}/issues`, {
|
|
28
|
+
title,
|
|
29
|
+
body,
|
|
30
|
+
assignees,
|
|
31
|
+
labels,
|
|
32
|
+
}, {
|
|
33
|
+
headers: {
|
|
34
|
+
Authorization: `token ${this.ghToken}`,
|
|
35
|
+
'Content-Type': 'application/json',
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
if (response.status !== 201) {
|
|
39
|
+
throw new Error(`Failed to create issue: ${response.status}`);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
this.getIssue = async (issueUrl) => {
|
|
43
|
+
const { owner, repo, issueNumber } = this.extractIssueFromUrl(issueUrl);
|
|
44
|
+
const response = await axios_1.default.get(`https://api.github.com/repos/${owner}/${repo}/issues/${issueNumber}`, {
|
|
45
|
+
headers: {
|
|
46
|
+
Authorization: `token ${this.ghToken}`,
|
|
47
|
+
Accept: 'application/vnd.github.v3+json',
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
labels: response.data.labels.map((label) => label.name),
|
|
52
|
+
assignees: response.data.assignees.map((assignee) => assignee.login),
|
|
53
|
+
title: response.data.title,
|
|
54
|
+
body: response.data.body,
|
|
55
|
+
number: response.data.number,
|
|
56
|
+
state: response.data.state,
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
this.updateIssue = async (issue) => {
|
|
60
|
+
const response = await axios_1.default.patch(`https://api.github.com/repos/${issue.org}/${issue.repo}/issues/${issue.number}`, {
|
|
61
|
+
title: issue.title,
|
|
62
|
+
body: issue.body,
|
|
63
|
+
assignees: issue.assignees,
|
|
64
|
+
labels: issue.labels,
|
|
65
|
+
state: issue.state,
|
|
66
|
+
}, {
|
|
67
|
+
headers: {
|
|
68
|
+
Authorization: `token ${this.ghToken}`,
|
|
69
|
+
'Content-Type': 'application/json',
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
if (response.status !== 200) {
|
|
73
|
+
throw new Error(`Failed to update issue: ${response.status}`);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.RestIssueRepository = RestIssueRepository;
|
|
79
|
+
//# sourceMappingURL=RestIssueRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RestIssueRepository.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/RestIssueRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getInProgressTimeline = void 0;
|
|
4
|
+
const getInProgressTimeline = async (timelines, issueUrl) => {
|
|
5
|
+
const report = [];
|
|
6
|
+
let currentInProgress = undefined;
|
|
7
|
+
for (const timeline of timelines) {
|
|
8
|
+
const time = new Date(timeline.time);
|
|
9
|
+
if (timeline.to.toLocaleLowerCase().includes('in progress')) {
|
|
10
|
+
if (currentInProgress !== undefined) {
|
|
11
|
+
report.push({
|
|
12
|
+
...currentInProgress,
|
|
13
|
+
endedAt: time,
|
|
14
|
+
durationMinutes: Math.floor(time.getTime() / 1000 / 60) -
|
|
15
|
+
Math.floor(currentInProgress.startedAt.getTime() / 1000 / 60),
|
|
16
|
+
});
|
|
17
|
+
currentInProgress = undefined;
|
|
18
|
+
}
|
|
19
|
+
currentInProgress = {
|
|
20
|
+
issueUrl: issueUrl,
|
|
21
|
+
author: timeline.author,
|
|
22
|
+
startedAt: time,
|
|
23
|
+
};
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (currentInProgress != undefined) {
|
|
27
|
+
report.push({
|
|
28
|
+
...currentInProgress,
|
|
29
|
+
endedAt: time,
|
|
30
|
+
durationMinutes: (time.getTime() - currentInProgress.startedAt.getTime()) / 1000 / 60,
|
|
31
|
+
});
|
|
32
|
+
currentInProgress = undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return report;
|
|
36
|
+
};
|
|
37
|
+
exports.getInProgressTimeline = getInProgressTimeline;
|
|
38
|
+
//# sourceMappingURL=issueTimelineUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueTimelineUtils.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/issueTimelineUtils.ts"],"names":[],"mappings":";;;AAYO,MAAM,qBAAqB,GAAG,KAAK,EACxC,SAAgC,EAChC,QAAgB,EACQ,EAAE;IAC1B,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,IAAI,iBAAiB,GAEL,SAAS,CAAC;IAC1B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,QAAQ,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAC5D,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,iBAAiB;oBACpB,OAAO,EAAE,IAAI;oBACb,eAAe,EACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;wBACtC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;iBAChE,CAAC,CAAC;gBACH,iBAAiB,GAAG,SAAS,CAAC;YAChC,CAAC;YACD,iBAAiB,GAAG;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,SAAS,EAAE,IAAI;aAChB,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,iBAAiB,IAAI,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,GAAG,iBAAiB;gBACpB,OAAO,EAAE,IAAI;gBACb,eAAe,EACb,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE;aACvE,CAAC,CAAC;YACH,iBAAiB,GAAG,SAAS,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAvCW,QAAA,qBAAqB,yBAuChC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeFieldName = exports.totalDuration = exports.calcrateDuration = void 0;
|
|
4
|
+
// 0:50 , 1:10 = 0:20
|
|
5
|
+
// 23:50 , 0:00 = 0:10
|
|
6
|
+
// 0:20, 0:10 = 23:50
|
|
7
|
+
const calcrateDuration = (start, // HH:mm
|
|
8
|
+
end) => {
|
|
9
|
+
const [startHour, startMinute] = start.split(':').map((s) => parseInt(s, 10));
|
|
10
|
+
const [endHour, endMinute] = end.split(':').map((s) => parseInt(s, 10));
|
|
11
|
+
let durationHour = endHour - startHour;
|
|
12
|
+
let durationMinute = endMinute - startMinute;
|
|
13
|
+
if (durationMinute < 0) {
|
|
14
|
+
durationHour -= 1;
|
|
15
|
+
durationMinute += 60;
|
|
16
|
+
}
|
|
17
|
+
if (durationHour < 0) {
|
|
18
|
+
durationHour += 24;
|
|
19
|
+
}
|
|
20
|
+
return `${String(durationHour).padStart(2, '0')}:${String(durationMinute).padStart(2, '0')}`;
|
|
21
|
+
};
|
|
22
|
+
exports.calcrateDuration = calcrateDuration;
|
|
23
|
+
const totalDuration = (durations) => {
|
|
24
|
+
const total = durations.reduce((acc, cur) => {
|
|
25
|
+
const [hour, minute] = cur.split(':').map((s) => parseInt(s, 10));
|
|
26
|
+
return {
|
|
27
|
+
hour: acc.hour + hour,
|
|
28
|
+
minute: acc.minute + minute,
|
|
29
|
+
};
|
|
30
|
+
}, { hour: 0, minute: 0 });
|
|
31
|
+
const totalHour = total.hour + Math.floor(total.minute / 60);
|
|
32
|
+
const totalMinute = total.minute % 60;
|
|
33
|
+
return `${String(totalHour).padStart(2, '0')}:${String(totalMinute).padStart(2, '0')}`;
|
|
34
|
+
};
|
|
35
|
+
exports.totalDuration = totalDuration;
|
|
36
|
+
const normalizeFieldName = (fieldName) => {
|
|
37
|
+
return fieldName
|
|
38
|
+
.toLowerCase()
|
|
39
|
+
.replace(' ', '')
|
|
40
|
+
.replace('-', '')
|
|
41
|
+
.replace(' ', '')
|
|
42
|
+
.replace(' ', '');
|
|
43
|
+
};
|
|
44
|
+
exports.normalizeFieldName = normalizeFieldName;
|
|
45
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/adapter/repositories/utils.ts"],"names":[],"mappings":";;;AAAA,qBAAqB;AACrB,sBAAsB;AACtB,qBAAqB;AACd,MAAM,gBAAgB,GAAG,CAC9B,KAAa,EAAE,QAAQ;AACvB,GAAW,EACH,EAAE;IACV,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAExE,IAAI,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;IACvC,IAAI,cAAc,GAAG,SAAS,GAAG,WAAW,CAAC;IAE7C,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvB,YAAY,IAAI,CAAC,CAAC;QAClB,cAAc,IAAI,EAAE,CAAC;IACvB,CAAC;IACD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,YAAY,IAAI,EAAE,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC/F,CAAC,CAAC;AAlBW,QAAA,gBAAgB,oBAkB3B;AACK,MAAM,aAAa,GAAG,CAC3B,SAAmB,EACX,EAAE;IACV,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI;YACrB,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM;SAC5B,CAAC;IACJ,CAAC,EACD,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CACvB,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;IAEtC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACzF,CAAC,CAAC;AAlBW,QAAA,aAAa,iBAkBxB;AAEK,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAE,EAAE;IACtD,OAAO,SAAS;SACb,WAAW,EAAE;SACb,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;SAChB,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;SAChB,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;SAChB,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACtB,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Issue.js","sourceRoot":"","sources":["../../../src/domain/entities/Issue.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Member.js","sourceRoot":"","sources":["../../../src/domain/entities/Member.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Project.js","sourceRoot":"","sources":["../../../src/domain/entities/Project.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectField.js","sourceRoot":"","sources":["../../../src/domain/entities/ProjectField.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectFieldSingleSelect.js","sourceRoot":"","sources":["../../../src/domain/entities/ProjectFieldSingleSelect.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectFieldSingleSelectOption.js","sourceRoot":"","sources":["../../../src/domain/entities/ProjectFieldSingleSelectOption.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkingTime.js","sourceRoot":"","sources":["../../../src/domain/entities/WorkingTime.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ActionAnnouncementUseCase = void 0;
|
|
4
|
+
class ActionAnnouncementUseCase {
|
|
5
|
+
constructor(issueRepository) {
|
|
6
|
+
this.issueRepository = issueRepository;
|
|
7
|
+
this.run = async (input) => {
|
|
8
|
+
if (input.cacheUsed || input.targetDates.length === 0) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const now = input.targetDates[input.targetDates.length - 1];
|
|
12
|
+
const isTargetIssue = (issue) => {
|
|
13
|
+
return (issue.labels.includes('action:announcement') &&
|
|
14
|
+
(issue.nextActionDate === null ||
|
|
15
|
+
issue.nextActionDate.getTime() <= now.getTime()) &&
|
|
16
|
+
issue.state === 'OPEN');
|
|
17
|
+
};
|
|
18
|
+
const actionAnnouncementIssues = input.issues.filter((issue) => isTargetIssue(issue));
|
|
19
|
+
for (const issue of actionAnnouncementIssues) {
|
|
20
|
+
for (const member of input.members) {
|
|
21
|
+
try {
|
|
22
|
+
await this.issueRepository.createNewIssue(issue.org, issue.repo, `Announcement #${issue.number}: ${issue.title} / ${member}`, `Hi @${member},
|
|
23
|
+
|
|
24
|
+
Please take a look at the announcement in the issue ${issue.url} and take necessary actions :pray:
|
|
25
|
+
`, [member], [
|
|
26
|
+
...issue.labels.filter((label) => label !== 'action:announcement'),
|
|
27
|
+
'story:workflow-management',
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
await this.issueRepository.createNewIssue(issue.org, issue.repo, `Error occured while creating working report for ${member}`, `${JSON.stringify(e)}`, [input.manager], ['bug']);
|
|
32
|
+
}
|
|
33
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
34
|
+
}
|
|
35
|
+
await this.issueRepository.updateIssue({
|
|
36
|
+
...issue,
|
|
37
|
+
labels: issue.labels
|
|
38
|
+
.filter((label) => label !== 'action:announcement')
|
|
39
|
+
.concat('announcement'),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.ActionAnnouncementUseCase = ActionAnnouncementUseCase;
|
|
46
|
+
//# sourceMappingURL=ActionAnnouncementUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionAnnouncementUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ActionAnnouncementUseCase.ts"],"names":[],"mappings":";;;AAKA,MAAa,yBAAyB;IACpC,YACW,eAGR;QAHQ,oBAAe,GAAf,eAAe,CAGvB;QAGH,QAAG,GAAG,KAAK,EAAE,KAOZ,EAAiB,EAAE;YAClB,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtD,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5D,MAAM,aAAa,GAAG,CAAC,KAAY,EAAW,EAAE;gBAC9C,OAAO,CACL,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC;oBAC5C,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI;wBAC5B,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAClD,KAAK,CAAC,KAAK,KAAK,MAAM,CACvB,CAAC;YACJ,CAAC,CAAC;YACF,MAAM,wBAAwB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7D,aAAa,CAAC,KAAK,CAAC,CACrB,CAAC;YACF,KAAK,MAAM,KAAK,IAAI,wBAAwB,EAAE,CAAC;gBAC7C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnC,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CACvC,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,IAAI,EACV,iBAAiB,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,MAAM,MAAM,EAAE,EAC3D,OAAO,MAAM;;sDAE6B,KAAK,CAAC,GAAG;CAC9D,EACW,CAAC,MAAM,CAAC,EACR;4BACE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CACpB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,qBAAqB,CAC3C;4BACD,2BAA2B;yBAC5B,CACF,CAAC;oBACJ,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CACvC,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,IAAI,EACV,mDAAmD,MAAM,EAAE,EAC3D,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EACtB,CAAC,KAAK,CAAC,OAAO,CAAC,EACf,CAAC,KAAK,CAAC,CACR,CAAC;oBACJ,CAAC;oBACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;oBACrC,GAAG,KAAK;oBACR,MAAM,EAAE,KAAK,CAAC,MAAM;yBACjB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,qBAAqB,CAAC;yBAClD,MAAM,CAAC,cAAc,CAAC;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;IA/DC,CAAC;CAgEL;AAtED,8DAsEC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnalyzeProblemByIssueUseCase = void 0;
|
|
4
|
+
class AnalyzeProblemByIssueUseCase {
|
|
5
|
+
constructor(issueRepository, dateRepository) {
|
|
6
|
+
this.issueRepository = issueRepository;
|
|
7
|
+
this.dateRepository = dateRepository;
|
|
8
|
+
this.run = async (input) => {
|
|
9
|
+
const story = input.project.story;
|
|
10
|
+
if (!story ||
|
|
11
|
+
!input.targetDates.find((targetDate) => targetDate.getHours() === 7 && targetDate.getMinutes() === 0)) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
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)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
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
|
+
// );
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
await this.issueRepository.createNewIssue(input.org, input.repo, `Summary of story issues`, this.createSummaryIssueBody(summaryStoryIssue), [input.manager], ['story:workflow-management']);
|
|
54
|
+
};
|
|
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
|
+
.join('\n')}
|
|
66
|
+
${issue.workingTimeline.length > 0 ? ` - Timeline` : ''}
|
|
67
|
+
${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')}`)
|
|
70
|
+
.join('\n')}`)
|
|
71
|
+
.join('\n')}`;
|
|
72
|
+
while (noMultipleNewLineBody.includes('\n\n')) {
|
|
73
|
+
noMultipleNewLineBody = noMultipleNewLineBody.replace('\n\n', '\n');
|
|
74
|
+
}
|
|
75
|
+
return noMultipleNewLineBody;
|
|
76
|
+
};
|
|
77
|
+
this.createQuestionIssueBody = (issue, totalWorkingTime, totalWorkingTimeByAssignee) => {
|
|
78
|
+
return `Hi,
|
|
79
|
+
I worry about the situation of #${issue.number} (${issue.title}) because the total working time is over 120 minutes.
|
|
80
|
+
Could you please share the situation? :pray:
|
|
81
|
+
|
|
82
|
+
## Total
|
|
83
|
+
${this.dateRepository.formatDurationToHHMM(totalWorkingTime)}
|
|
84
|
+
|
|
85
|
+
## From the record
|
|
86
|
+
Working Minutes, Author,
|
|
87
|
+
${Array.from(totalWorkingTimeByAssignee)
|
|
88
|
+
.map(([author, workingMinutes]) => `${this.dateRepository.formatDurationToHHMM(workingMinutes)}, ${author}`)
|
|
89
|
+
.join('\n')}
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
## Timeline
|
|
93
|
+
Start, End, Duration, Author
|
|
94
|
+
${issue.workingTimeline
|
|
95
|
+
.map(({ startedAt, endedAt, durationMinutes, author }) => `${this.dateRepository.formatDurationToHHMM(startedAt.getMinutes())}, ${this.dateRepository.formatDurationToHHMM(endedAt.getMinutes())}, ${this.dateRepository.formatDurationToHHMM(durationMinutes)}, ${author}`)
|
|
96
|
+
.join('\n')}
|
|
97
|
+
`;
|
|
98
|
+
};
|
|
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
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.AnalyzeProblemByIssueUseCase = AnalyzeProblemByIssueUseCase;
|
|
116
|
+
//# sourceMappingURL=AnalyzeProblemByIssueUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyzeProblemByIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeProblemByIssueUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClearNextActionHourUseCase = void 0;
|
|
4
|
+
class ClearNextActionHourUseCase {
|
|
5
|
+
constructor(issueRepository) {
|
|
6
|
+
this.issueRepository = issueRepository;
|
|
7
|
+
this.run = async (input) => {
|
|
8
|
+
const nextActionHour = input.project.nextActionHour;
|
|
9
|
+
if (!nextActionHour || input.cacheUsed) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const targetDates = input.targetDates
|
|
13
|
+
.filter((targetDate) => targetDate.getMinutes() === 45)
|
|
14
|
+
.reverse();
|
|
15
|
+
if (targetDates.length === 0) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const targetDate = new Date(targetDates[targetDates.length - 1].getTime() + 5 * 60 * 1000);
|
|
19
|
+
const targetHour = targetDate.getHours();
|
|
20
|
+
const isTargetIssue = (issue) => {
|
|
21
|
+
return (issue.nextActionHour !== null &&
|
|
22
|
+
issue.nextActionHour <= targetHour &&
|
|
23
|
+
(issue.nextActionDate === null ||
|
|
24
|
+
issue.nextActionDate.getTime() <= targetDate.getTime()) &&
|
|
25
|
+
issue.state === 'OPEN');
|
|
26
|
+
};
|
|
27
|
+
for (const issue of input.issues) {
|
|
28
|
+
if (!isTargetIssue(issue)) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
await this.issueRepository.clearProjectField(input.project, nextActionHour.fieldId, issue);
|
|
32
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.ClearNextActionHourUseCase = ClearNextActionHourUseCase;
|
|
38
|
+
//# sourceMappingURL=ClearNextActionHourUseCase.js.map
|
|
@@ -0,0 +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"}
|