github-issue-tower-defence-management 1.23.0 → 1.25.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 (71) hide show
  1. package/.github/workflows/test.yml +2 -2
  2. package/CHANGELOG.md +15 -0
  3. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +6 -2
  4. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  5. package/bin/adapter/repositories/GraphqlProjectRepository.js +12 -0
  6. package/bin/adapter/repositories/GraphqlProjectRepository.js.map +1 -1
  7. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +9 -0
  8. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  9. package/bin/domain/entities/ClaudeWindowUsage.js +3 -0
  10. package/bin/domain/entities/ClaudeWindowUsage.js.map +1 -0
  11. package/bin/domain/entities/Comment.js +3 -0
  12. package/bin/domain/entities/Comment.js.map +1 -0
  13. package/bin/domain/usecases/HandleScheduledEventUseCase.js +1 -2
  14. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  15. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +81 -0
  16. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -0
  17. package/bin/domain/usecases/StartPreparationUseCase.js +104 -0
  18. package/bin/domain/usecases/StartPreparationUseCase.js.map +1 -0
  19. package/bin/domain/usecases/adapter-interfaces/ClaudeRepository.js +3 -0
  20. package/bin/domain/usecases/adapter-interfaces/ClaudeRepository.js.map +1 -0
  21. package/bin/domain/usecases/adapter-interfaces/IssueCommentRepository.js +3 -0
  22. package/bin/domain/usecases/adapter-interfaces/IssueCommentRepository.js.map +1 -0
  23. package/bin/domain/usecases/adapter-interfaces/LocalCommandRunner.js +3 -0
  24. package/bin/domain/usecases/adapter-interfaces/LocalCommandRunner.js.map +1 -0
  25. package/package.json +1 -1
  26. package/src/adapter/repositories/CheerioProjectRepository.test.ts +1 -0
  27. package/src/adapter/repositories/GraphqlProjectRepository.test.ts +1 -0
  28. package/src/adapter/repositories/GraphqlProjectRepository.ts +14 -1
  29. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +1 -0
  30. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +15 -1
  31. package/src/domain/entities/ClaudeWindowUsage.ts +5 -0
  32. package/src/domain/entities/Comment.ts +5 -0
  33. package/src/domain/entities/Project.ts +1 -0
  34. package/src/domain/usecases/GetStoryObjectMapUseCase.test.ts +1 -0
  35. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +32 -0
  36. package/src/domain/usecases/HandleScheduledEventUseCase.ts +2 -2
  37. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +669 -0
  38. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +132 -0
  39. package/src/domain/usecases/StartPreparationUseCase.test.ts +715 -0
  40. package/src/domain/usecases/StartPreparationUseCase.ts +191 -0
  41. package/src/domain/usecases/adapter-interfaces/ClaudeRepository.ts +5 -0
  42. package/src/domain/usecases/adapter-interfaces/IssueCommentRepository.ts +7 -0
  43. package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +11 -0
  44. package/src/domain/usecases/adapter-interfaces/LocalCommandRunner.ts +7 -0
  45. package/src/domain/usecases/adapter-interfaces/ProjectRepository.ts +1 -0
  46. package/types/adapter/repositories/GraphqlProjectRepository.d.ts +2 -1
  47. package/types/adapter/repositories/GraphqlProjectRepository.d.ts.map +1 -1
  48. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +4 -1
  49. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  50. package/types/domain/entities/ClaudeWindowUsage.d.ts +6 -0
  51. package/types/domain/entities/ClaudeWindowUsage.d.ts.map +1 -0
  52. package/types/domain/entities/Comment.d.ts +6 -0
  53. package/types/domain/entities/Comment.d.ts.map +1 -0
  54. package/types/domain/entities/Project.d.ts +1 -0
  55. package/types/domain/entities/Project.d.ts.map +1 -1
  56. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +1 -0
  57. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  58. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts +24 -0
  59. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -0
  60. package/types/domain/usecases/StartPreparationUseCase.d.ts +37 -0
  61. package/types/domain/usecases/StartPreparationUseCase.d.ts.map +1 -0
  62. package/types/domain/usecases/adapter-interfaces/ClaudeRepository.d.ts +5 -0
  63. package/types/domain/usecases/adapter-interfaces/ClaudeRepository.d.ts.map +1 -0
  64. package/types/domain/usecases/adapter-interfaces/IssueCommentRepository.d.ts +7 -0
  65. package/types/domain/usecases/adapter-interfaces/IssueCommentRepository.d.ts.map +1 -0
  66. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +10 -0
  67. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
  68. package/types/domain/usecases/adapter-interfaces/LocalCommandRunner.d.ts +8 -0
  69. package/types/domain/usecases/adapter-interfaces/LocalCommandRunner.d.ts.map +1 -0
  70. package/types/domain/usecases/adapter-interfaces/ProjectRepository.d.ts +1 -0
  71. package/types/domain/usecases/adapter-interfaces/ProjectRepository.d.ts.map +1 -1
@@ -0,0 +1,5 @@
1
+ export type ClaudeWindowUsage = {
2
+ hour: number;
3
+ utilizationPercentage: number;
4
+ resetsAt: Date;
5
+ };
@@ -0,0 +1,5 @@
1
+ export type Comment = {
2
+ author: string;
3
+ content: string;
4
+ createdAt: Date;
5
+ };
@@ -15,6 +15,7 @@ export type FieldOption = {
15
15
  };
16
16
  export type Project = {
17
17
  id: string;
18
+ url: string;
18
19
  databaseId: number;
19
20
  name: string;
20
21
  // fields: ProjectField[];
@@ -15,6 +15,7 @@ describe('GetStoryObjectMapUseCase', () => {
15
15
 
16
16
  const basicProject: Project = {
17
17
  id: 'project-1',
18
+ url: 'https://github.com/users/user/projects/1',
18
19
  databaseId: 1,
19
20
  name: 'Test Project',
20
21
  status: {
@@ -156,6 +156,7 @@ describe('HandleScheduledEventUseCase', () => {
156
156
  disabledStatus: 'disabled',
157
157
  defaultStatus: null,
158
158
  disabled: false,
159
+ allowIssueCacheMinutes: 60,
159
160
  };
160
161
 
161
162
  const mockProject = mock<Project>();
@@ -179,6 +180,7 @@ describe('HandleScheduledEventUseCase', () => {
179
180
  disabledStatus: 'disabled',
180
181
  defaultStatus: 'ToDo',
181
182
  disabled: false,
183
+ allowIssueCacheMinutes: 60,
182
184
  };
183
185
 
184
186
  const mockProject = mock<Project>();
@@ -206,6 +208,7 @@ describe('HandleScheduledEventUseCase', () => {
206
208
  disabledStatus: 'disabled',
207
209
  defaultStatus: null,
208
210
  disabled: false,
211
+ allowIssueCacheMinutes: 60,
209
212
  };
210
213
 
211
214
  const mockProject = mock<Project>();
@@ -233,6 +236,7 @@ describe('HandleScheduledEventUseCase', () => {
233
236
  disabledStatus: 'disabled',
234
237
  defaultStatus: null,
235
238
  disabled: true,
239
+ allowIssueCacheMinutes: 60,
236
240
  };
237
241
 
238
242
  const result = await useCase.run(input);
@@ -257,6 +261,7 @@ describe('HandleScheduledEventUseCase', () => {
257
261
  disabledStatus: 'disabled',
258
262
  defaultStatus: null,
259
263
  disabled: false,
264
+ allowIssueCacheMinutes: 60,
260
265
  };
261
266
 
262
267
  const mockProject = mock<Project>();
@@ -265,5 +270,32 @@ describe('HandleScheduledEventUseCase', () => {
265
270
  expect(result).not.toBeNull();
266
271
  expect(mockProjectRepository.findProjectIdByUrl).toHaveBeenCalled();
267
272
  });
273
+
274
+ it('should pass allowIssueCacheMinutes to getAllIssues', async () => {
275
+ const input = {
276
+ projectName: 'test-project',
277
+ org: 'test-org',
278
+ projectUrl: 'https://github.com/test-org/test-project',
279
+ manager: 'test-manager',
280
+ workingReport: {
281
+ repo: 'test-repo',
282
+ members: ['member1'],
283
+ spreadsheetUrl: 'https://docs.google.com/spreadsheets/test',
284
+ },
285
+ urlOfStoryView: 'https://github.com/test-org/test-project/issues',
286
+ disabledStatus: 'disabled',
287
+ defaultStatus: null,
288
+ disabled: false,
289
+ allowIssueCacheMinutes: 120,
290
+ };
291
+
292
+ const mockProject = mock<Project>();
293
+ mockProjectRepository.getProject.mockResolvedValue(mockProject);
294
+ await useCase.run(input);
295
+ expect(mockIssueRepository.getAllIssues).toHaveBeenCalledWith(
296
+ 'project-1',
297
+ 120,
298
+ );
299
+ });
268
300
  });
269
301
  });
@@ -71,6 +71,7 @@ export class HandleScheduledEventUseCase {
71
71
  disabledStatus: string;
72
72
  defaultStatus: string | null;
73
73
  disabled: boolean;
74
+ allowIssueCacheMinutes: number;
74
75
  }): Promise<{
75
76
  project: Project;
76
77
  issues: Issue[];
@@ -98,11 +99,10 @@ export class HandleScheduledEventUseCase {
98
99
  );
99
100
  }
100
101
  const now: Date = await this.dateRepository.now();
101
- const allowIssueCacheMinutes = 60;
102
102
  const { issues, cacheUsed }: { issues: Issue[]; cacheUsed: boolean } =
103
103
  await this.issueRepository.getAllIssues(
104
104
  projectId,
105
- allowIssueCacheMinutes,
105
+ input.allowIssueCacheMinutes,
106
106
  );
107
107
  const storyIssues: StoryObjectMap = await this.storyIssues({
108
108
  project,