github-issue-tower-defence-management 1.135.1 → 1.135.2
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/CHANGELOG.md +7 -0
- package/bin/domain/usecases/ClearPastNextActionDateHourUseCase.js +18 -25
- package/bin/domain/usecases/ClearPastNextActionDateHourUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/domain/usecases/ClearPastNextActionDateHourUseCase.test.ts +24 -5
- package/src/domain/usecases/ClearPastNextActionDateHourUseCase.ts +30 -36
- package/types/domain/usecases/ClearPastNextActionDateHourUseCase.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.135.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.135.1...v1.135.2) (2026-07-25)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **use-case:** clear past nextActionHour on every sweep without minute-45 dependency ([#1234](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1234)) ([54d6b8f](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/54d6b8fecbd94c6068ae5c85f6d347ad38378725)), closes [HiromiShikata/secretary#2794](https://github.com/HiromiShikata/secretary/issues/2794)
|
|
7
|
+
|
|
1
8
|
## [1.135.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.135.0...v1.135.1) (2026-07-25)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -9,32 +9,25 @@ class ClearPastNextActionDateHourUseCase {
|
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
11
|
const now = input.targetDates[input.targetDates.length - 1];
|
|
12
|
-
const
|
|
13
|
-
if (
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
.
|
|
17
|
-
|
|
18
|
-
if (targetDatesAtHour45.length > 0) {
|
|
19
|
-
const targetDate = new Date(targetDatesAtHour45[targetDatesAtHour45.length - 1].getTime() +
|
|
20
|
-
5 * 60 * 1000);
|
|
21
|
-
const targetHour = targetDate.getHours() + 1;
|
|
22
|
-
for (const issue of input.issues) {
|
|
23
|
-
if (issue.nextActionHour === null ||
|
|
24
|
-
issue.nextActionHour > targetHour ||
|
|
25
|
-
(issue.nextActionDate !== null &&
|
|
26
|
-
issue.nextActionDate.getTime() > targetDate.getTime()) ||
|
|
27
|
-
issue.state !== 'OPEN') {
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
await this.issueRepository.clearProjectField(input.project, nextActionHour.fieldId, issue);
|
|
31
|
-
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
32
|
-
if (!nextActionDate) {
|
|
33
|
-
continue;
|
|
34
|
-
}
|
|
35
|
-
await this.issueRepository.clearProjectField(input.project, nextActionDate.fieldId, issue);
|
|
36
|
-
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
12
|
+
const nextActionHourField = input.project.nextActionHour;
|
|
13
|
+
if (nextActionHourField) {
|
|
14
|
+
const nextActionDateField = input.project.nextActionDate;
|
|
15
|
+
for (const issue of input.issues) {
|
|
16
|
+
if (issue.nextActionHour === null || issue.state !== 'OPEN') {
|
|
17
|
+
continue;
|
|
37
18
|
}
|
|
19
|
+
const scheduledDate = issue.nextActionDate ?? now;
|
|
20
|
+
const scheduledTime = new Date(scheduledDate.getFullYear(), scheduledDate.getMonth(), scheduledDate.getDate(), issue.nextActionHour);
|
|
21
|
+
if (scheduledTime.getTime() > now.getTime()) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
await this.issueRepository.clearProjectField(input.project, nextActionHourField.fieldId, issue);
|
|
25
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
26
|
+
if (!nextActionDateField) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
await this.issueRepository.clearProjectField(input.project, nextActionDateField.fieldId, issue);
|
|
30
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
38
31
|
}
|
|
39
32
|
}
|
|
40
33
|
const nextActionDate = input.project.nextActionDate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClearPastNextActionDateHourUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearPastNextActionDateHourUseCase.ts"],"names":[],"mappings":";;;AAIA,MAAa,kCAAkC;IAC7C,YACW,eAA2D;QAA3D,oBAAe,GAAf,eAAe,CAA4C;QAGtE,QAAG,GAAG,KAAK,EAAE,KAKZ,EAAiB,EAAE;YAClB,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAE5D,MAAM,
|
|
1
|
+
{"version":3,"file":"ClearPastNextActionDateHourUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/ClearPastNextActionDateHourUseCase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -201,7 +201,7 @@ describe('ClearPastNextActionDateHourUseCase', () => {
|
|
|
201
201
|
expectedClearProjectFieldCalls: [],
|
|
202
202
|
},
|
|
203
203
|
{
|
|
204
|
-
name: 'should clear nextActionHour
|
|
204
|
+
name: 'should not clear nextActionHour at 09:45 when scheduled hour 10 has not yet arrived',
|
|
205
205
|
input: {
|
|
206
206
|
targetDates: [
|
|
207
207
|
new Date('2026-04-02T09:45:00'),
|
|
@@ -217,6 +217,25 @@ describe('ClearPastNextActionDateHourUseCase', () => {
|
|
|
217
217
|
],
|
|
218
218
|
cacheUsed: false,
|
|
219
219
|
},
|
|
220
|
+
expectedClearProjectFieldCalls: [],
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
name: 'should clear nextActionHour when sweep has no minute-45 tick but scheduled hour has already passed',
|
|
224
|
+
input: {
|
|
225
|
+
targetDates: [
|
|
226
|
+
new Date('2026-04-02T10:05:00'),
|
|
227
|
+
new Date('2026-04-02T10:15:00'),
|
|
228
|
+
],
|
|
229
|
+
project: basicProject,
|
|
230
|
+
issues: [
|
|
231
|
+
{
|
|
232
|
+
...openIssueWithHour,
|
|
233
|
+
nextActionHour: 10,
|
|
234
|
+
nextActionDate: null,
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
cacheUsed: false,
|
|
238
|
+
},
|
|
220
239
|
expectedClearProjectFieldCalls: [
|
|
221
240
|
[
|
|
222
241
|
basicProject,
|
|
@@ -239,7 +258,7 @@ describe('ClearPastNextActionDateHourUseCase', () => {
|
|
|
239
258
|
],
|
|
240
259
|
},
|
|
241
260
|
{
|
|
242
|
-
name: 'should not clear nextActionHour when
|
|
261
|
+
name: 'should not clear nextActionHour when scheduled hour has not yet arrived',
|
|
243
262
|
input: {
|
|
244
263
|
targetDates: [
|
|
245
264
|
new Date('2026-04-02T09:00:00'),
|
|
@@ -268,7 +287,7 @@ describe('ClearPastNextActionDateHourUseCase', () => {
|
|
|
268
287
|
issues: [
|
|
269
288
|
{
|
|
270
289
|
...openIssueWithHour,
|
|
271
|
-
nextActionHour:
|
|
290
|
+
nextActionHour: 9,
|
|
272
291
|
nextActionDate: null,
|
|
273
292
|
},
|
|
274
293
|
{
|
|
@@ -284,7 +303,7 @@ describe('ClearPastNextActionDateHourUseCase', () => {
|
|
|
284
303
|
'hourFieldId',
|
|
285
304
|
{
|
|
286
305
|
...openIssueWithHour,
|
|
287
|
-
nextActionHour:
|
|
306
|
+
nextActionHour: 9,
|
|
288
307
|
nextActionDate: null,
|
|
289
308
|
},
|
|
290
309
|
],
|
|
@@ -293,7 +312,7 @@ describe('ClearPastNextActionDateHourUseCase', () => {
|
|
|
293
312
|
'dateFieldId',
|
|
294
313
|
{
|
|
295
314
|
...openIssueWithHour,
|
|
296
|
-
nextActionHour:
|
|
315
|
+
nextActionHour: 9,
|
|
297
316
|
nextActionDate: null,
|
|
298
317
|
},
|
|
299
318
|
],
|
|
@@ -18,44 +18,38 @@ export class ClearPastNextActionDateHourUseCase {
|
|
|
18
18
|
}
|
|
19
19
|
const now = input.targetDates[input.targetDates.length - 1];
|
|
20
20
|
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
const nextActionHourField = input.project.nextActionHour;
|
|
22
|
+
if (nextActionHourField) {
|
|
23
|
+
const nextActionDateField = input.project.nextActionDate;
|
|
24
|
+
for (const issue of input.issues) {
|
|
25
|
+
if (issue.nextActionHour === null || issue.state !== 'OPEN') {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const scheduledDate = issue.nextActionDate ?? now;
|
|
29
|
+
const scheduledTime = new Date(
|
|
30
|
+
scheduledDate.getFullYear(),
|
|
31
|
+
scheduledDate.getMonth(),
|
|
32
|
+
scheduledDate.getDate(),
|
|
33
|
+
issue.nextActionHour,
|
|
34
|
+
);
|
|
35
|
+
if (scheduledTime.getTime() > now.getTime()) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
await this.issueRepository.clearProjectField(
|
|
39
|
+
input.project,
|
|
40
|
+
nextActionHourField.fieldId,
|
|
41
|
+
issue,
|
|
31
42
|
);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
issue.nextActionHour === null ||
|
|
36
|
-
issue.nextActionHour > targetHour ||
|
|
37
|
-
(issue.nextActionDate !== null &&
|
|
38
|
-
issue.nextActionDate.getTime() > targetDate.getTime()) ||
|
|
39
|
-
issue.state !== 'OPEN'
|
|
40
|
-
) {
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
await this.issueRepository.clearProjectField(
|
|
44
|
-
input.project,
|
|
45
|
-
nextActionHour.fieldId,
|
|
46
|
-
issue,
|
|
47
|
-
);
|
|
48
|
-
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
49
|
-
if (!nextActionDate) {
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
await this.issueRepository.clearProjectField(
|
|
53
|
-
input.project,
|
|
54
|
-
nextActionDate.fieldId,
|
|
55
|
-
issue,
|
|
56
|
-
);
|
|
57
|
-
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
43
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
44
|
+
if (!nextActionDateField) {
|
|
45
|
+
continue;
|
|
58
46
|
}
|
|
47
|
+
await this.issueRepository.clearProjectField(
|
|
48
|
+
input.project,
|
|
49
|
+
nextActionDateField.fieldId,
|
|
50
|
+
issue,
|
|
51
|
+
);
|
|
52
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
59
53
|
}
|
|
60
54
|
}
|
|
61
55
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClearPastNextActionDateHourUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/ClearPastNextActionDateHourUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,qBAAa,kCAAkC;IAE3C,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC;gBAA3D,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAGtE,GAAG,GAAU,OAAO;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,KAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"ClearPastNextActionDateHourUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/ClearPastNextActionDateHourUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,qBAAa,kCAAkC;IAE3C,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC;gBAA3D,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAGtE,GAAG,GAAU,OAAO;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,KAAG,OAAO,CAAC,IAAI,CAAC,CAkEf;CACH"}
|