Skip to content

Commit be2aa22

Browse files
Sma1lboyZHallen122
andauthored
refactor: sequence executing with polling rather then steps (#100)
Co-authored-by: ZHallen122 <[email protected]>
1 parent a4886ab commit be2aa22

File tree

28 files changed

+1373
-1340
lines changed

28 files changed

+1373
-1340
lines changed

backend/src/build-system/__tests__/fullstack-gen.spec.ts

Lines changed: 76 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,20 @@ import { isIntegrationTest } from 'src/common/utils';
22
import { BuildSequence } from '../types';
33
import { executeBuildSequence } from './utils';
44
import { Logger } from '@nestjs/common';
5+
import { ProjectInitHandler } from '../handlers/project-init';
6+
import { PRDHandler } from '../handlers/product-manager/product-requirements-document/prd';
7+
import { UXSMDHandler } from '../handlers/ux/sitemap-document';
8+
import { UXSMSHandler } from '../handlers/ux/sitemap-structure';
9+
import { UXDMDHandler } from '../handlers/ux/datamap';
10+
import { DBRequirementHandler } from '../handlers/database/requirements-document';
11+
import { FileStructureHandler } from '../handlers/file-manager/file-structure';
12+
import { UXSMSPageByPageHandler } from '../handlers/ux/sitemap-structure/sms-page';
13+
import { DBSchemaHandler } from '../handlers/database/schemas/schemas';
14+
import { FileFAHandler } from '../handlers/file-manager/file-arch';
15+
import { BackendRequirementHandler } from '../handlers/backend/requirements-document';
16+
import { BackendCodeHandler } from '../handlers/backend/code-generate';
17+
import { BackendFileReviewHandler } from '../handlers/backend/file-review/file-review';
18+
519
(isIntegrationTest ? describe : describe.skip)('Build Sequence Test', () => {
620
it('should execute build sequence successfully', async () => {
721
const sequence: BuildSequence = {
@@ -10,144 +24,89 @@ import { Logger } from '@nestjs/common';
1024
name: 'Spotify-like Music Web',
1125
description: 'Users can play music',
1226
databaseType: 'SQLite',
13-
steps: [
27+
nodes: [
28+
{
29+
handler: ProjectInitHandler,
30+
name: 'Project Folders Setup',
31+
},
32+
{
33+
handler: PRDHandler,
34+
name: 'Project Requirements Document Node',
35+
},
36+
{
37+
handler: UXSMDHandler,
38+
name: 'UX Sitemap Document Node',
39+
},
40+
{
41+
handler: UXSMSHandler,
42+
name: 'UX Sitemap Structure Node',
43+
// requires: ['op:UX:SMD'],
44+
},
1445
{
15-
id: 'step-0',
16-
name: 'Project Initialization',
17-
parallel: false,
18-
nodes: [
19-
{
20-
id: 'op:PROJECT::STATE:SETUP',
21-
name: 'Project Folders Setup',
22-
},
23-
],
46+
handler: UXDMDHandler,
47+
name: 'UX DataMap Document Node',
48+
// requires: ['op:UX:SMD'],
2449
},
2550
{
26-
id: 'step-1',
27-
name: 'Initial Analysis',
28-
parallel: false,
29-
nodes: [
30-
{
31-
id: 'op:PRD',
32-
name: 'Project Requirements Document Node',
33-
},
34-
],
51+
handler: DBRequirementHandler,
52+
name: 'Database Requirements Node',
53+
// requires: ['op:UX:DATAMAP:DOC'],
3554
},
3655
{
37-
id: 'step-2',
38-
name: 'UX Base Document Generation',
39-
parallel: false,
40-
nodes: [
41-
{
42-
id: 'op:UX:SMD',
43-
name: 'UX Sitemap Document Node',
44-
requires: ['op:PRD'],
45-
},
46-
],
56+
handler: FileStructureHandler,
57+
name: 'File Structure Generation',
58+
// requires: ['op:UX:SMD', 'op:UX:DATAMAP:DOC'],
59+
options: {
60+
projectPart: 'frontend',
61+
},
4762
},
4863
{
49-
id: 'step-3',
50-
name: 'Parallel UX Processing',
51-
parallel: true,
52-
nodes: [
53-
{
54-
id: 'op:UX:SMS',
55-
name: 'UX Sitemap Structure Node',
56-
requires: ['op:UX:SMD'],
57-
},
58-
{
59-
id: 'op:UX:DATAMAP:DOC',
60-
name: 'UX DataMap Document Node',
61-
requires: ['op:UX:SMD'],
62-
},
63-
],
64+
handler: UXSMSPageByPageHandler,
65+
name: 'Level 2 UX Sitemap Structure Node details',
66+
// requires: ['op:UX:SMS'],
6467
},
6568
{
66-
id: 'step-4',
67-
name: 'Parallel Project Structure',
68-
parallel: true,
69-
nodes: [
70-
{
71-
id: 'op:DATABASE_REQ',
72-
name: 'Database Requirements Node',
73-
requires: ['op:UX:DATAMAP:DOC'],
74-
},
75-
{
76-
id: 'op:FILE:STRUCT',
77-
name: 'File Structure Generation',
78-
requires: ['op:UX:SMD', 'op:UX:DATAMAP:DOC'],
79-
options: {
80-
projectPart: 'frontend',
81-
},
82-
},
83-
{
84-
id: 'op:UX:SMS:LEVEL2',
85-
name: 'Level 2 UX Sitemap Structure Node details',
86-
requires: ['op:UX:SMS'],
87-
},
88-
],
69+
handler: DBSchemaHandler,
70+
name: 'Database Schemas Node',
71+
// requires: ['op:DATABASE_REQ'],
8972
},
9073
{
91-
id: 'step-5',
92-
name: 'Parallel Implementation',
93-
parallel: true,
94-
nodes: [
95-
{
96-
id: 'op:DATABASE:SCHEMAS',
97-
name: 'Database Schemas Node',
98-
requires: ['op:DATABASE_REQ'],
99-
},
100-
{
101-
id: 'op:FILE:ARCH',
102-
name: 'File Arch',
103-
requires: ['op:FILE:STRUCT', 'op:UX:DATAMAP:DOC'],
104-
},
105-
{
106-
id: 'op:BACKEND:REQ',
107-
name: 'Backend Requirements Node',
108-
requires: ['op:DATABASE_REQ', 'op:UX:DATAMAP:DOC', 'op:UX:SMD'],
109-
},
110-
],
74+
handler: FileFAHandler,
75+
name: 'File Arch',
76+
// requires: ['op:FILE:STRUCT', 'op:UX:DATAMAP:DOC'],
11177
},
11278
{
113-
id: 'step-6',
114-
name: 'Final Code Generation',
115-
parallel: false,
116-
nodes: [
117-
{
118-
id: 'op:BACKEND:CODE',
119-
name: 'Backend Code Generator Node',
120-
requires: [
121-
'op:DATABASE:SCHEMAS',
122-
'op:UX:DATAMAP:DOC',
123-
'op:BACKEND:REQ',
124-
],
125-
},
126-
{
127-
id: 'op:FRONTEND:CODE',
128-
name: 'Frontend Code Generator Node',
129-
},
130-
],
79+
handler: BackendRequirementHandler,
80+
name: 'Backend Requirements Node',
81+
// requires: ['op:DATABASE_REQ', 'op:UX:DATAMAP:DOC', 'op:UX:SMD'],
13182
},
132-
// TODO: code reviewer
13383
{
134-
id: 'step-7',
135-
name: 'Backend Code Review',
136-
parallel: false,
137-
nodes: [
138-
{
139-
id: 'op:BACKEND:FILE:REVIEW',
140-
name: 'Backend File Review Node',
141-
requires: ['op:BACKEND:CODE', 'op:BACKEND:REQ'],
142-
},
143-
],
84+
handler: BackendCodeHandler,
85+
name: 'Backend Code Generator Node',
86+
// requires: [
87+
// 'op:DATABASE:SCHEMAS',
88+
// 'op:UX:DATAMAP:DOC',
89+
// 'op:BACKEND:REQ',
90+
// ],
91+
},
92+
// {
93+
// handler:FrontendCodeHandler,
94+
// id: 'op:FRONTEND:CODE',
95+
// name: 'Frontend Code Generator Node',
96+
// },
97+
{
98+
handler: BackendFileReviewHandler,
99+
name: 'Backend File Review Node',
100+
// requires: ['op:BACKEND:CODE', 'op:BACKEND:REQ'],
144101
},
145102
],
146103
};
147104

148105
const result = await executeBuildSequence('fullstack-code-gen', sequence);
106+
107+
// Assertion: ensure the build sequence runs successfully
149108
expect(result.success).toBe(true);
150109
expect(result.metrics).toBeDefined();
151110
Logger.log(`Logs saved to: ${result.logFolderPath}`);
152-
}, 300000);
111+
}, 300000); // Set timeout to 5 minutes
153112
});

0 commit comments

Comments
 (0)