speccrew 0.7.9 → 0.7.10
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/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-FASTAPI.md +23 -23
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-JAVA.md +23 -23
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-NET.md +23 -23
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE.md +23 -23
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/workflow.agentflow.xml +9 -5
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-DESKTOP.md +46 -46
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-ELECTRON.md +51 -51
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MINIAPP.md +48 -48
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MOBILE.md +42 -42
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI.md +47 -47
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/workflow.agentflow.xml +10 -1
- package/package.json +1 -1
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
|
|
12
12
|
| # | File | Source |
|
|
13
13
|
|---|------|--------|
|
|
14
|
-
| 1 | {router} | [View](
|
|
15
|
-
| 2 | {service} | [View](
|
|
16
|
-
| 3 | {model} | [View](
|
|
17
|
-
| 4 | {schema} | [View](
|
|
14
|
+
| 1 | {router} | [View](../../../../../../{routerSourcePath}) |
|
|
15
|
+
| 2 | {service} | [View](../../../../../../{serviceSourcePath}) |
|
|
16
|
+
| 3 | {model} | [View](../../../../../../{modelSourcePath}) |
|
|
17
|
+
| 4 | {schema} | [View](../../../../../../{schemaSourcePath}) |
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -152,11 +152,11 @@ graph TB
|
|
|
152
152
|
|
|
153
153
|
| # | Layer | File | Function/Class | Responsibility | Source |
|
|
154
154
|
|---|-------|------|----------------|----------------|--------|
|
|
155
|
-
| 1 | Router | {users.py} | {create_user} | Receive request, validate params, call service | [Source](
|
|
156
|
-
| 2 | Service | {user_service.py} | {create_user} | Business validation, data processing, call CRUD | [Source](
|
|
157
|
-
| 3 | Service | {user_service.py} | {validate_user_email} | Check email uniqueness | [Source](
|
|
158
|
-
| 4 | CRUD | {user_crud.py} | {create} | Execute INSERT via SQLAlchemy | [Source](
|
|
159
|
-
| 5 | Model | {user.py} | {User model} | SQLAlchemy ORM model definition | [Source](
|
|
155
|
+
| 1 | Router | {users.py} | {create_user} | Receive request, validate params, call service | [Source](../../../../../../{routerSourcePath}) |
|
|
156
|
+
| 2 | Service | {user_service.py} | {create_user} | Business validation, data processing, call CRUD | [Source](../../../../../../{serviceSourcePath}) |
|
|
157
|
+
| 3 | Service | {user_service.py} | {validate_user_email} | Check email uniqueness | [Source](../../../../../../{serviceSourcePath}) |
|
|
158
|
+
| 4 | CRUD | {user_crud.py} | {create} | Execute INSERT via SQLAlchemy | [Source](../../../../../../{crudSourcePath}) |
|
|
159
|
+
| 5 | Model | {user.py} | {User model} | SQLAlchemy ORM model definition | [Source](../../../../../../{modelSourcePath}) |
|
|
160
160
|
|
|
161
161
|
**Database Operations:**
|
|
162
162
|
|
|
@@ -213,7 +213,7 @@ graph TB
|
|
|
213
213
|
| {related_table} | {One-to-Many} | {ForeignKey("related.id")} | {Relationship description} |
|
|
214
214
|
| {another_table} | {Many-to-One} | {ForeignKey("another.id")} | {Relationship description} |
|
|
215
215
|
|
|
216
|
-
**Source:** [Model](
|
|
216
|
+
**Source:** [Model](../../../../../../{modelSourcePath})
|
|
217
217
|
|
|
218
218
|
### 3.2 Model-Database Mapping
|
|
219
219
|
|
|
@@ -260,23 +260,23 @@ class {UserResponse}(BaseModel):
|
|
|
260
260
|
|
|
261
261
|
| Service Name | Purpose | Source Path |
|
|
262
262
|
|--------------|---------|-------------|
|
|
263
|
-
| {user_service} | {e.g., User business logic} | [Source](
|
|
264
|
-
| {auth_service} | {e.g., Authentication validation} | [Source](
|
|
263
|
+
| {user_service} | {e.g., User business logic} | [Source](../../../../../../{serviceSourcePath}) |
|
|
264
|
+
| {auth_service} | {e.g., Authentication validation} | [Source](../../../../../../{serviceSourcePath}) |
|
|
265
265
|
|
|
266
266
|
### 4.2 Data Access Layer
|
|
267
267
|
|
|
268
268
|
| CRUD/Repository | Model | Purpose | Source Path |
|
|
269
269
|
|-----------------|-------|---------|-------------|
|
|
270
|
-
| {user_crud} | {User} | {e.g., User CRUD operations} | [Source](
|
|
271
|
-
| {role_crud} | {Role} | {e.g., Role query} | [Source](
|
|
270
|
+
| {user_crud} | {User} | {e.g., User CRUD operations} | [Source](../../../../../../{crudSourcePath}) |
|
|
271
|
+
| {role_crud} | {Role} | {e.g., Role query} | [Source](../../../../../../{crudSourcePath}) |
|
|
272
272
|
|
|
273
273
|
### 4.3 Schemas and Models
|
|
274
274
|
|
|
275
275
|
| Class Name | Type | Purpose | Source Path |
|
|
276
276
|
|------------|------|---------|-------------|
|
|
277
|
-
| {UserCreate} | Request Schema | {e.g., Create user request} | [Source](
|
|
278
|
-
| {UserResponse} | Response Schema | {e.g., User detail response} | [Source](
|
|
279
|
-
| {User} | SQLAlchemy Model | {e.g., User database model} | [Source](
|
|
277
|
+
| {UserCreate} | Request Schema | {e.g., Create user request} | [Source](../../../../../../{schemaSourcePath}) |
|
|
278
|
+
| {UserResponse} | Response Schema | {e.g., User detail response} | [Source](../../../../../../{schemaSourcePath}) |
|
|
279
|
+
| {User} | SQLAlchemy Model | {e.g., User database model} | [Source](../../../../../../{modelSourcePath}) |
|
|
280
280
|
|
|
281
281
|
### 4.4 API Consumers
|
|
282
282
|
|
|
@@ -284,8 +284,8 @@ class {UserResponse}(BaseModel):
|
|
|
284
284
|
|
|
285
285
|
| Page Name | Function Description | Source Path | Document Path |
|
|
286
286
|
|-----------|---------------------|-------------|---------------|
|
|
287
|
-
| {PageName} | {e.g., User management list page} | [Source](
|
|
288
|
-
| {PageName} | {e.g., User form page} | [Source](
|
|
287
|
+
| {PageName} | {e.g., User management list page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
|
|
288
|
+
| {PageName} | {e.g., User form page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
|
|
289
289
|
|
|
290
290
|
---
|
|
291
291
|
|
|
@@ -339,7 +339,7 @@ graph LR
|
|
|
339
339
|
```
|
|
340
340
|
|
|
341
341
|
**Diagram Source**
|
|
342
|
-
- [{Service}.py](
|
|
342
|
+
- [{Service}.py](../../../../../../{serviceSourcePath})
|
|
343
343
|
|
|
344
344
|
### 6.3 External Dependencies
|
|
345
345
|
|
|
@@ -458,6 +458,6 @@ router = APIRouter(
|
|
|
458
458
|
**Related Module Document:** [Module Overview Document](../{{module-name}}-overview.md)
|
|
459
459
|
|
|
460
460
|
**Section Source**
|
|
461
|
-
- [{Router}.py](
|
|
462
|
-
- [{Service}.py](
|
|
463
|
-
- [{Model}.py](
|
|
461
|
+
- [{Router}.py](../../../../../../{routerSourcePath})
|
|
462
|
+
- [{Service}.py](../../../../../../{serviceSourcePath})
|
|
463
|
+
- [{Model}.py](../../../../../../{modelSourcePath})
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
|
|
12
12
|
| # | File | Source |
|
|
13
13
|
|---|------|--------|
|
|
14
|
-
| 1 | {Controller} | [View](
|
|
15
|
-
| 2 | {Service} | [View](
|
|
16
|
-
| 3 | {Entity} | [View](
|
|
17
|
-
| 4 | {DTO} | [View](
|
|
14
|
+
| 1 | {Controller} | [View](../../../../../../{controllerSourcePath}) |
|
|
15
|
+
| 2 | {Service} | [View](../../../../../../{serviceSourcePath}) |
|
|
16
|
+
| 3 | {Entity} | [View](../../../../../../{entitySourcePath}) |
|
|
17
|
+
| 4 | {DTO} | [View](../../../../../../{dtoSourcePath}) |
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -156,11 +156,11 @@ graph TB
|
|
|
156
156
|
|
|
157
157
|
| # | Layer | Class | Method | Responsibility | Source |
|
|
158
158
|
|---|-------|-------|--------|----------------|--------|
|
|
159
|
-
| 1 | Controller | {UserController} | {createUser} | Receive request, validate params, call service | [Source](
|
|
160
|
-
| 2 | Service | {UserService} | {createUser} | Business validation, data processing, call mapper | [Source](
|
|
161
|
-
| 3 | Service | {UserService} | {validateUserName} | Check user name uniqueness | [Source](
|
|
162
|
-
| 4 | Mapper | {UserMapper} | {insert} | Execute INSERT SQL | [Source](
|
|
163
|
-
| 5 | Mapper XML | {UserMapper.xml} | {insert} | SQL: INSERT INTO user (...) VALUES (...) | [Source](
|
|
159
|
+
| 1 | Controller | {UserController} | {createUser} | Receive request, validate params, call service | [Source](../../../../../../{controllerSourcePath}) |
|
|
160
|
+
| 2 | Service | {UserService} | {createUser} | Business validation, data processing, call mapper | [Source](../../../../../../{serviceSourcePath}) |
|
|
161
|
+
| 3 | Service | {UserService} | {validateUserName} | Check user name uniqueness | [Source](../../../../../../{serviceSourcePath}) |
|
|
162
|
+
| 4 | Mapper | {UserMapper} | {insert} | Execute INSERT SQL | [Source](../../../../../../{mapperSourcePath}) |
|
|
163
|
+
| 5 | Mapper XML | {UserMapper.xml} | {insert} | SQL: INSERT INTO user (...) VALUES (...) | [Source](../../../../../../{mapperXmlSourcePath}) |
|
|
164
164
|
|
|
165
165
|
**Database Operations:**
|
|
166
166
|
|
|
@@ -217,7 +217,7 @@ graph TB
|
|
|
217
217
|
| {related_table} | {One-to-Many} | {this_table.related_id} | {Relationship description} |
|
|
218
218
|
| {another_table} | {Many-to-One} | {this_table.parent_id} | {Relationship description} |
|
|
219
219
|
|
|
220
|
-
**Source:** [Entity](
|
|
220
|
+
**Source:** [Entity](../../../../../../{entitySourcePath}) | [Mapper XML](../../../../../../{mapperXmlSourcePath})
|
|
221
221
|
|
|
222
222
|
### 3.2 Entity-Database Mapping
|
|
223
223
|
|
|
@@ -266,23 +266,23 @@ graph TB
|
|
|
266
266
|
|
|
267
267
|
| Service Name | Purpose | Source Path |
|
|
268
268
|
|--------------|---------|-------------|
|
|
269
|
-
| {ServiceName} | {e.g., User business logic} | [Source](
|
|
270
|
-
| {ServiceName} | {e.g., Permission validation} | [Source](
|
|
269
|
+
| {ServiceName} | {e.g., User business logic} | [Source](../../../../../../{serviceSourcePath}) |
|
|
270
|
+
| {ServiceName} | {e.g., Permission validation} | [Source](../../../../../../{serviceSourcePath}) |
|
|
271
271
|
|
|
272
272
|
### 4.2 Data Access Layer
|
|
273
273
|
|
|
274
274
|
| Mapper/Repository | Entity | Purpose | Source Path |
|
|
275
275
|
|-------------------|--------|---------|-------------|
|
|
276
|
-
| {MapperName} | {EntityName} | {e.g., User CRUD operations} | [Source](
|
|
277
|
-
| {MapperName} | {EntityName} | {e.g., Role query} | [Source](
|
|
276
|
+
| {MapperName} | {EntityName} | {e.g., User CRUD operations} | [Source](../../../../../../{mapperSourcePath}) |
|
|
277
|
+
| {MapperName} | {EntityName} | {e.g., Role query} | [Source](../../../../../../{mapperSourcePath}) |
|
|
278
278
|
|
|
279
279
|
### 4.3 DTOs and Entities
|
|
280
280
|
|
|
281
281
|
| Class Name | Type | Purpose | Source Path |
|
|
282
282
|
|------------|------|---------|-------------|
|
|
283
|
-
| {DTOClass} | Request DTO | {e.g., Create user request} | [Source](
|
|
284
|
-
| {VOClass} | Response VO | {e.g., User detail response} | [Source](
|
|
285
|
-
| {EntityClass} | Entity | {e.g., User database entity} | [Source](
|
|
283
|
+
| {DTOClass} | Request DTO | {e.g., Create user request} | [Source](../../../../../../{dtoSourcePath}) |
|
|
284
|
+
| {VOClass} | Response VO | {e.g., User detail response} | [Source](../../../../../../{voSourcePath}) |
|
|
285
|
+
| {EntityClass} | Entity | {e.g., User database entity} | [Source](../../../../../../{entitySourcePath}) |
|
|
286
286
|
|
|
287
287
|
### 4.4 API Consumers
|
|
288
288
|
|
|
@@ -290,8 +290,8 @@ graph TB
|
|
|
290
290
|
|
|
291
291
|
| Page Name | Function Description | Source Path | Document Path |
|
|
292
292
|
|-----------|---------------------|-------------|---------------|
|
|
293
|
-
| {PageName} | {e.g., User management list page} | [Source](
|
|
294
|
-
| {PageName} | {e.g., User form page} | [Source](
|
|
293
|
+
| {PageName} | {e.g., User management list page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
|
|
294
|
+
| {PageName} | {e.g., User form page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
|
|
295
295
|
|
|
296
296
|
---
|
|
297
297
|
|
|
@@ -346,7 +346,7 @@ graph LR
|
|
|
346
346
|
```
|
|
347
347
|
|
|
348
348
|
**Diagram Source**
|
|
349
|
-
- [{Service}.java](
|
|
349
|
+
- [{Service}.java](../../../../../../{serviceSourcePath})
|
|
350
350
|
|
|
351
351
|
### 6.3 External Dependencies
|
|
352
352
|
|
|
@@ -476,6 +476,6 @@ feature:
|
|
|
476
476
|
**Related Module Document:** [Module Overview Document](../{{module-name}}-overview.md)
|
|
477
477
|
|
|
478
478
|
**Section Source**
|
|
479
|
-
- [{Controller}.java](
|
|
480
|
-
- [{Service}.java](
|
|
481
|
-
- [{Entity}.java](
|
|
479
|
+
- [{Controller}.java](../../../../../../{controllerSourcePath})
|
|
480
|
+
- [{Service}.java](../../../../../../{serviceSourcePath})
|
|
481
|
+
- [{Entity}.java](../../../../../../{entitySourcePath})
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
|
|
12
12
|
| # | File | Source |
|
|
13
13
|
|---|------|--------|
|
|
14
|
-
| 1 | {Controller} | [View](
|
|
15
|
-
| 2 | {Service} | [View](
|
|
16
|
-
| 3 | {Repository} | [View](
|
|
17
|
-
| 4 | {Entity} | [View](
|
|
14
|
+
| 1 | {Controller} | [View](../../../../../../{controllerSourcePath}) |
|
|
15
|
+
| 2 | {Service} | [View](../../../../../../{serviceSourcePath}) |
|
|
16
|
+
| 3 | {Repository} | [View](../../../../../../{repositorySourcePath}) |
|
|
17
|
+
| 4 | {Entity} | [View](../../../../../../{entitySourcePath}) |
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -152,11 +152,11 @@ graph TB
|
|
|
152
152
|
|
|
153
153
|
| # | Layer | File | Method/Class | Responsibility | Source |
|
|
154
154
|
|---|-------|------|--------------|----------------|--------|
|
|
155
|
-
| 1 | Controller | {UsersController.cs} | {CreateUser} | Receive request, validate params, call service | [Source](
|
|
156
|
-
| 2 | Service | {UserService.cs} | {CreateUserAsync} | Business validation, data processing, call repository | [Source](
|
|
157
|
-
| 3 | Service | {UserService.cs} | {ValidateUserEmailAsync} | Check email uniqueness | [Source](
|
|
158
|
-
| 4 | Repository | {UserRepository.cs} | {AddAsync} | Execute Add via EF Core | [Source](
|
|
159
|
-
| 5 | Entity | {User.cs} | {User entity} | EF Core entity definition | [Source](
|
|
155
|
+
| 1 | Controller | {UsersController.cs} | {CreateUser} | Receive request, validate params, call service | [Source](../../../../../../{controllerSourcePath}) |
|
|
156
|
+
| 2 | Service | {UserService.cs} | {CreateUserAsync} | Business validation, data processing, call repository | [Source](../../../../../../{serviceSourcePath}) |
|
|
157
|
+
| 3 | Service | {UserService.cs} | {ValidateUserEmailAsync} | Check email uniqueness | [Source](../../../../../../{serviceSourcePath}) |
|
|
158
|
+
| 4 | Repository | {UserRepository.cs} | {AddAsync} | Execute Add via EF Core | [Source](../../../../../../{repositorySourcePath}) |
|
|
159
|
+
| 5 | Entity | {User.cs} | {User entity} | EF Core entity definition | [Source](../../../../../../{entitySourcePath}) |
|
|
160
160
|
|
|
161
161
|
**Database Operations:**
|
|
162
162
|
|
|
@@ -213,7 +213,7 @@ graph TB
|
|
|
213
213
|
| {RelatedTable} | {One-to-Many} | {RelatedId} | {Relationship description} |
|
|
214
214
|
| {AnotherTable} | {Many-to-One} | {AnotherId} | {Relationship description} |
|
|
215
215
|
|
|
216
|
-
**Source:** [Entity](
|
|
216
|
+
**Source:** [Entity](../../../../../../{entitySourcePath}) | [DbContext](../../../../../../{dbContextSourcePath})
|
|
217
217
|
|
|
218
218
|
### 3.2 Entity-Database Mapping
|
|
219
219
|
|
|
@@ -262,23 +262,23 @@ public class {UserResponse}
|
|
|
262
262
|
|
|
263
263
|
| Service Name | Purpose | Source Path |
|
|
264
264
|
|--------------|---------|-------------|
|
|
265
|
-
| {IUserService} | {e.g., User business logic interface} | [Source](
|
|
266
|
-
| {UserService} | {e.g., User business logic implementation} | [Source](
|
|
265
|
+
| {IUserService} | {e.g., User business logic interface} | [Source](../../../../../../{serviceInterfaceSourcePath}) |
|
|
266
|
+
| {UserService} | {e.g., User business logic implementation} | [Source](../../../../../../{serviceSourcePath}) |
|
|
267
267
|
|
|
268
268
|
### 4.2 Data Access Layer
|
|
269
269
|
|
|
270
270
|
| Repository | Entity | Purpose | Source Path |
|
|
271
271
|
|------------|--------|---------|-------------|
|
|
272
|
-
| {IUserRepository} | {User} | {e.g., User repository interface} | [Source](
|
|
273
|
-
| {UserRepository} | {User} | {e.g., User repository implementation} | [Source](
|
|
272
|
+
| {IUserRepository} | {User} | {e.g., User repository interface} | [Source](../../../../../../{repositoryInterfaceSourcePath}) |
|
|
273
|
+
| {UserRepository} | {User} | {e.g., User repository implementation} | [Source](../../../../../../{repositorySourcePath}) |
|
|
274
274
|
|
|
275
275
|
### 4.3 DTOs and Entities
|
|
276
276
|
|
|
277
277
|
| Class Name | Type | Purpose | Source Path |
|
|
278
278
|
|------------|------|---------|-------------|
|
|
279
|
-
| {CreateUserRequest} | Request DTO | {e.g., Create user request} | [Source](
|
|
280
|
-
| {UserResponse} | Response DTO | {e.g., User detail response} | [Source](
|
|
281
|
-
| {User} | EF Core Entity | {e.g., User database entity} | [Source](
|
|
279
|
+
| {CreateUserRequest} | Request DTO | {e.g., Create user request} | [Source](../../../../../../{dtoSourcePath}) |
|
|
280
|
+
| {UserResponse} | Response DTO | {e.g., User detail response} | [Source](../../../../../../{dtoSourcePath}) |
|
|
281
|
+
| {User} | EF Core Entity | {e.g., User database entity} | [Source](../../../../../../{entitySourcePath}) |
|
|
282
282
|
|
|
283
283
|
### 4.4 API Consumers
|
|
284
284
|
|
|
@@ -286,8 +286,8 @@ public class {UserResponse}
|
|
|
286
286
|
|
|
287
287
|
| Page Name | Function Description | Source Path | Document Path |
|
|
288
288
|
|-----------|---------------------|-------------|---------------|
|
|
289
|
-
| {PageName} | {e.g., User management list page} | [Source](
|
|
290
|
-
| {PageName} | {e.g., User form page} | [Source](
|
|
289
|
+
| {PageName} | {e.g., User management list page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
|
|
290
|
+
| {PageName} | {e.g., User form page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
|
|
291
291
|
|
|
292
292
|
---
|
|
293
293
|
|
|
@@ -341,7 +341,7 @@ graph LR
|
|
|
341
341
|
```
|
|
342
342
|
|
|
343
343
|
**Diagram Source**
|
|
344
|
-
- [{Service}.cs](
|
|
344
|
+
- [{Service}.cs](../../../../../../{serviceSourcePath})
|
|
345
345
|
|
|
346
346
|
### 6.3 External Dependencies
|
|
347
347
|
|
|
@@ -460,6 +460,6 @@ builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
|
|
|
460
460
|
**Related Module Document:** [Module Overview Document](../{{module-name}}-overview.md)
|
|
461
461
|
|
|
462
462
|
**Section Source**
|
|
463
|
-
- [{Controller}.cs](
|
|
464
|
-
- [{Service}.cs](
|
|
465
|
-
- [{Entity}.cs](
|
|
463
|
+
- [{Controller}.cs](../../../../../../{controllerSourcePath})
|
|
464
|
+
- [{Service}.cs](../../../../../../{serviceSourcePath})
|
|
465
|
+
- [{Entity}.cs](../../../../../../{entitySourcePath})
|
package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE.md
CHANGED
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
|
|
12
12
|
| # | File | Source |
|
|
13
13
|
|---|------|--------|
|
|
14
|
-
| 1 | {Controller} | [View](
|
|
15
|
-
| 2 | {Service} | [View](
|
|
16
|
-
| 3 | {Entity} | [View](
|
|
17
|
-
| 4 | {DTO} | [View](
|
|
14
|
+
| 1 | {Controller} | [View](../../../../../../{controllerSourcePath}) |
|
|
15
|
+
| 2 | {Service} | [View](../../../../../../{serviceSourcePath}) |
|
|
16
|
+
| 3 | {Entity} | [View](../../../../../../{entitySourcePath}) |
|
|
17
|
+
| 4 | {DTO} | [View](../../../../../../{dtoSourcePath}) |
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -156,11 +156,11 @@ graph TB
|
|
|
156
156
|
|
|
157
157
|
| # | Layer | Class | Method | Responsibility | Source |
|
|
158
158
|
|---|-------|-------|--------|----------------|--------|
|
|
159
|
-
| 1 | Controller | {UserController} | {createUser} | Receive request, validate params, call service | [Source](
|
|
160
|
-
| 2 | Service | {UserService} | {createUser} | Business validation, data processing, call mapper | [Source](
|
|
161
|
-
| 3 | Service | {UserService} | {validateUserName} | Check user name uniqueness | [Source](
|
|
162
|
-
| 4 | Mapper | {UserMapper} | {insert} | Execute INSERT SQL | [Source](
|
|
163
|
-
| 5 | Mapper XML | {UserMapper.xml} | {insert} | SQL: INSERT INTO user (...) VALUES (...) | [Source](
|
|
159
|
+
| 1 | Controller | {UserController} | {createUser} | Receive request, validate params, call service | [Source](../../../../../../{controllerSourcePath}) |
|
|
160
|
+
| 2 | Service | {UserService} | {createUser} | Business validation, data processing, call mapper | [Source](../../../../../../{serviceSourcePath}) |
|
|
161
|
+
| 3 | Service | {UserService} | {validateUserName} | Check user name uniqueness | [Source](../../../../../../{serviceSourcePath}) |
|
|
162
|
+
| 4 | Mapper | {UserMapper} | {insert} | Execute INSERT SQL | [Source](../../../../../../{mapperSourcePath}) |
|
|
163
|
+
| 5 | Mapper XML | {UserMapper.xml} | {insert} | SQL: INSERT INTO user (...) VALUES (...) | [Source](../../../../../../{mapperXmlSourcePath}) |
|
|
164
164
|
|
|
165
165
|
**Database Operations:**
|
|
166
166
|
|
|
@@ -217,7 +217,7 @@ graph TB
|
|
|
217
217
|
| {related_table} | {One-to-Many} | {this_table.related_id} | {Relationship description} |
|
|
218
218
|
| {another_table} | {Many-to-One} | {this_table.parent_id} | {Relationship description} |
|
|
219
219
|
|
|
220
|
-
**Source:** [Entity](
|
|
220
|
+
**Source:** [Entity](../../../../../../{entitySourcePath}) | [Mapper XML](../../../../../../{mapperXmlSourcePath})
|
|
221
221
|
|
|
222
222
|
### 3.2 Entity-Database Mapping
|
|
223
223
|
|
|
@@ -266,23 +266,23 @@ graph TB
|
|
|
266
266
|
|
|
267
267
|
| Service Name | Purpose | Source Path |
|
|
268
268
|
|--------------|---------|-------------|
|
|
269
|
-
| {ServiceName} | {e.g., User business logic} | [Source](
|
|
270
|
-
| {ServiceName} | {e.g., Permission validation} | [Source](
|
|
269
|
+
| {ServiceName} | {e.g., User business logic} | [Source](../../../../../../{serviceSourcePath}) |
|
|
270
|
+
| {ServiceName} | {e.g., Permission validation} | [Source](../../../../../../{serviceSourcePath}) |
|
|
271
271
|
|
|
272
272
|
### 4.2 Data Access Layer
|
|
273
273
|
|
|
274
274
|
| Mapper/Repository | Entity | Purpose | Source Path |
|
|
275
275
|
|-------------------|--------|---------|-------------|
|
|
276
|
-
| {MapperName} | {EntityName} | {e.g., User CRUD operations} | [Source](
|
|
277
|
-
| {MapperName} | {EntityName} | {e.g., Role query} | [Source](
|
|
276
|
+
| {MapperName} | {EntityName} | {e.g., User CRUD operations} | [Source](../../../../../../{mapperSourcePath}) |
|
|
277
|
+
| {MapperName} | {EntityName} | {e.g., Role query} | [Source](../../../../../../{mapperSourcePath}) |
|
|
278
278
|
|
|
279
279
|
### 4.3 DTOs and Entities
|
|
280
280
|
|
|
281
281
|
| Class Name | Type | Purpose | Source Path |
|
|
282
282
|
|------------|------|---------|-------------|
|
|
283
|
-
| {DTOClass} | Request DTO | {e.g., Create user request} | [Source](
|
|
284
|
-
| {VOClass} | Response VO | {e.g., User detail response} | [Source](
|
|
285
|
-
| {EntityClass} | Entity | {e.g., User database entity} | [Source](
|
|
283
|
+
| {DTOClass} | Request DTO | {e.g., Create user request} | [Source](../../../../../../{dtoSourcePath}) |
|
|
284
|
+
| {VOClass} | Response VO | {e.g., User detail response} | [Source](../../../../../../{voSourcePath}) |
|
|
285
|
+
| {EntityClass} | Entity | {e.g., User database entity} | [Source](../../../../../../{entitySourcePath}) |
|
|
286
286
|
|
|
287
287
|
### 4.4 API Consumers
|
|
288
288
|
|
|
@@ -290,8 +290,8 @@ graph TB
|
|
|
290
290
|
|
|
291
291
|
| Page Name | Function Description | Source Path | Document Path |
|
|
292
292
|
|-----------|---------------------|-------------|---------------|
|
|
293
|
-
| {PageName} | {e.g., User management list page} | [Source](
|
|
294
|
-
| {PageName} | {e.g., User form page} | [Source](
|
|
293
|
+
| {PageName} | {e.g., User management list page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
|
|
294
|
+
| {PageName} | {e.g., User form page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
|
|
295
295
|
|
|
296
296
|
---
|
|
297
297
|
|
|
@@ -346,7 +346,7 @@ graph LR
|
|
|
346
346
|
```
|
|
347
347
|
|
|
348
348
|
**Diagram Source**
|
|
349
|
-
- [{Service}.java](
|
|
349
|
+
- [{Service}.java](../../../../../../{serviceSourcePath})
|
|
350
350
|
|
|
351
351
|
### 6.3 External Dependencies
|
|
352
352
|
|
|
@@ -476,6 +476,6 @@ feature:
|
|
|
476
476
|
**Related Module Document:** [Module Overview Document](../{{module-name}}-overview.md)
|
|
477
477
|
|
|
478
478
|
**Section Source**
|
|
479
|
-
- [{Controller}.java](
|
|
480
|
-
- [{Service}.java](
|
|
481
|
-
- [{Entity}.java](
|
|
479
|
+
- [{Controller}.java](../../../../../../{controllerSourcePath})
|
|
480
|
+
- [{Service}.java](../../../../../../{serviceSourcePath})
|
|
481
|
+
- [{Entity}.java](../../../../../../{entitySourcePath})
|
|
@@ -320,11 +320,6 @@
|
|
|
320
320
|
</block>
|
|
321
321
|
|
|
322
322
|
<!-- ==================== STEP 5B: FILL EACH SECTION USING SEARCH_REPLACE ==================== -->
|
|
323
|
-
<!-- Calculate Dynamic Path Prefix -->
|
|
324
|
-
<block type="task" id="B17" action="calculate-path-prefix" desc="Calculate path prefix">
|
|
325
|
-
<field name="documentPath" value="${documentPath}"/>
|
|
326
|
-
<field name="output" var="pathPrefix" from="calculation.prefix"/>
|
|
327
|
-
</block>
|
|
328
323
|
|
|
329
324
|
<!-- Section 1: Content Overview -->
|
|
330
325
|
<block type="task" id="B18" action="search_replace" desc="Fill overview section">
|
|
@@ -479,6 +474,14 @@
|
|
|
479
474
|
<field name="verify" value="file.exists(${completed_dir}/${markerName}.done.json)"/>
|
|
480
475
|
</block>
|
|
481
476
|
|
|
477
|
+
<!-- ==================== MANDATORY GRAPH WRITE RULE ==================== -->
|
|
478
|
+
<block type="rule" id="R-GRAPH" level="mandatory" desc="Graph data write is MANDATORY">
|
|
479
|
+
<field name="text">MANDATORY: You MUST execute ALL graph write blocks (B32a through B32g) before proceeding to O1.</field>
|
|
480
|
+
<field name="text">Graph data (nodes + edges) MUST be appended to knowledges/bizs/graph/nodes.json and edges.json.</field>
|
|
481
|
+
<field name="text">DO NOT skip graph write. DO NOT jump directly to O1 output block.</field>
|
|
482
|
+
<field name="text">If graph directory does not exist, create it first.</field>
|
|
483
|
+
</block>
|
|
484
|
+
|
|
482
485
|
<!-- Step 7b: Construct and Append Graph Data -->
|
|
483
486
|
<!-- Construct Graph Nodes from API Analysis -->
|
|
484
487
|
<block type="task" id="B32a" action="analyze" desc="Construct API endpoint nodes">
|
|
@@ -612,6 +615,7 @@ console.log('Edges appended:', newEdges.length);
|
|
|
612
615
|
<field name="featureName" from="step6-report.feature_name"/>
|
|
613
616
|
<field name="generatedFile" from="step6-report.generated_file"/>
|
|
614
617
|
<field name="message" from="step6-report.message"/>
|
|
618
|
+
<field name="graph_status" value="nodes and edges written to knowledges/bizs/graph/"/>
|
|
615
619
|
</block>
|
|
616
620
|
|
|
617
621
|
<!-- ==================== ERROR HANDLING ==================== -->
|
|
@@ -78,21 +78,21 @@ source-path: {sourcePath}
|
|
|
78
78
|
|
|
79
79
|
| Area | Element | Control | Description | Interaction | Source Link |
|
|
80
80
|
|------|---------|---------|-------------|-------------|-------------|
|
|
81
|
-
| Menu | File Menu | MenuStrip | {Application menu} | Click | [Source](
|
|
82
|
-
| Toolbar | New Button | ToolStripButton | {Create new} | Click | [Source](
|
|
83
|
-
| Tree | Navigation | TreeView | {Navigate sections} | NodeClick | [Source](
|
|
84
|
-
| Grid | Data Grid | DataGridView | {Display data} | CellClick/DoubleClick | [Source](
|
|
85
|
-
| Status | Status Label | StatusStrip | {Show status} | - | [Source](
|
|
81
|
+
| Menu | File Menu | MenuStrip | {Application menu} | Click | [Source](../../../../../../{sourcePath}) |
|
|
82
|
+
| Toolbar | New Button | ToolStripButton | {Create new} | Click | [Source](../../../../../../{sourcePath}) |
|
|
83
|
+
| Tree | Navigation | TreeView | {Navigate sections} | NodeClick | [Source](../../../../../../{sourcePath}) |
|
|
84
|
+
| Grid | Data Grid | DataGridView | {Display data} | CellClick/DoubleClick | [Source](../../../../../../{sourcePath}) |
|
|
85
|
+
| Status | Status Label | StatusStrip | {Show status} | - | [Source](../../../../../../{sourcePath}) |
|
|
86
86
|
|
|
87
87
|
**Desktop-Specific Interactions:**
|
|
88
88
|
|
|
89
89
|
| Interaction | Action | Description | Source |
|
|
90
90
|
|-------------|--------|-------------|--------|
|
|
91
|
-
| Click | Select/Activate | Mouse click | [Source](
|
|
92
|
-
| DoubleClick | Open/Edit | Double click row | [Source](
|
|
93
|
-
| RightClick | Context Menu | Show context menu | [Source](
|
|
94
|
-
| DragDrop | Reorder | Drag and drop items | [Source](
|
|
95
|
-
| Keyboard | Shortcut | Ctrl+S, Ctrl+N, etc. | [Source](
|
|
91
|
+
| Click | Select/Activate | Mouse click | [Source](../../../../../../{sourcePath}) |
|
|
92
|
+
| DoubleClick | Open/Edit | Double click row | [Source](../../../../../../{sourcePath}) |
|
|
93
|
+
| RightClick | Context Menu | Show context menu | [Source](../../../../../../{sourcePath}) |
|
|
94
|
+
| DragDrop | Reorder | Drag and drop items | [Source](../../../../../../{sourcePath}) |
|
|
95
|
+
| Keyboard | Shortcut | Ctrl+S, Ctrl+N, etc. | [Source](../../../../../../{sourcePath}) |
|
|
96
96
|
|
|
97
97
|
---
|
|
98
98
|
|
|
@@ -121,11 +121,11 @@ graph TB
|
|
|
121
121
|
|
|
122
122
|
| Step | Business Operation | Event | Source |
|
|
123
123
|
|------|-------------------|-------|--------|
|
|
124
|
-
| 1 | Initialize UI components | Form_Load/OnInitialized | [Source](
|
|
125
|
-
| 2 | Load app configuration | After init | [Source](
|
|
126
|
-
| 3 | Check authentication | After config load | [Source](
|
|
127
|
-
| 4 | Load data from service | Auth passed | [Source](
|
|
128
|
-
| 5 | Bind data to controls | Data loaded | [Source](
|
|
124
|
+
| 1 | Initialize UI components | Form_Load/OnInitialized | [Source](../../../../../../{sourcePath}) |
|
|
125
|
+
| 2 | Load app configuration | After init | [Source](../../../../../../{sourcePath}) |
|
|
126
|
+
| 3 | Check authentication | After config load | [Source](../../../../../../{sourcePath}) |
|
|
127
|
+
| 4 | Load data from service | Auth passed | [Source](../../../../../../{sourcePath}) |
|
|
128
|
+
| 5 | Bind data to controls | Data loaded | [Source](../../../../../../{sourcePath}) |
|
|
129
129
|
|
|
130
130
|
### 3.2 User Interaction Flows
|
|
131
131
|
|
|
@@ -151,11 +151,11 @@ graph TB
|
|
|
151
151
|
|
|
152
152
|
| Step | Business Operation | Event | Source |
|
|
153
153
|
|------|-------------------|-------|--------|
|
|
154
|
-
| 1 | Get selected row | DoubleClick | [Source](
|
|
155
|
-
| 2 | Validate selection | After get | [Source](
|
|
156
|
-
| 3 | Open edit dialog | Validation passed | [Source](
|
|
157
|
-
| 4 | Load detail data | Dialog opened | [Source](
|
|
158
|
-
| 5 | Handle save/cancel | Dialog closed | [Source](
|
|
154
|
+
| 1 | Get selected row | DoubleClick | [Source](../../../../../../{sourcePath}) |
|
|
155
|
+
| 2 | Validate selection | After get | [Source](../../../../../../{sourcePath}) |
|
|
156
|
+
| 3 | Open edit dialog | Validation passed | [Source](../../../../../../{sourcePath}) |
|
|
157
|
+
| 4 | Load detail data | Dialog opened | [Source](../../../../../../{sourcePath}) |
|
|
158
|
+
| 5 | Handle save/cancel | Dialog closed | [Source](../../../../../../{sourcePath}) |
|
|
159
159
|
|
|
160
160
|
#### 3.2.2 {Event Name: e.g., Toolbar Button Click}
|
|
161
161
|
|
|
@@ -190,12 +190,12 @@ graph TB
|
|
|
190
190
|
|
|
191
191
|
| Event | WPF | WinForms | Purpose | Source |
|
|
192
192
|
|-------|-----|----------|---------|--------|
|
|
193
|
-
| Initialized | ✅ | - | Component init | [Source](
|
|
194
|
-
| Loaded | ✅ | Load | Window loaded | [Source](
|
|
195
|
-
| Shown | - | Shown | Window visible | [Source](
|
|
196
|
-
| Activated | ✅ | Activated | Window focused | [Source](
|
|
197
|
-
| Closing | ✅ | FormClosing | About to close | [Source](
|
|
198
|
-
| Closed | ✅ | FormClosed | Window closed | [Source](
|
|
193
|
+
| Initialized | ✅ | - | Component init | [Source](../../../../../../{sourcePath}) |
|
|
194
|
+
| Loaded | ✅ | Load | Window loaded | [Source](../../../../../../{sourcePath}) |
|
|
195
|
+
| Shown | - | Shown | Window visible | [Source](../../../../../../{sourcePath}) |
|
|
196
|
+
| Activated | ✅ | Activated | Window focused | [Source](../../../../../../{sourcePath}) |
|
|
197
|
+
| Closing | ✅ | FormClosing | About to close | [Source](../../../../../../{sourcePath}) |
|
|
198
|
+
| Closed | ✅ | FormClosed | Window closed | [Source](../../../../../../{sourcePath}) |
|
|
199
199
|
|
|
200
200
|
---
|
|
201
201
|
|
|
@@ -205,18 +205,18 @@ graph TB
|
|
|
205
205
|
|
|
206
206
|
| Field Name | Type | Description | Binding | Source |
|
|
207
207
|
|------------|------|-------------|---------|--------|
|
|
208
|
-
| {Field 1} | string/int/bool | {Description} | {OneWay/TwoWay} | [Source](
|
|
209
|
-
| {SelectedItem} | Object | {Current selection} | {OneWayToSource} | [Source](
|
|
210
|
-
| {DataSource} | Collection | {List data} | {OneWay} | [Source](
|
|
211
|
-
| {IsBusy} | bool | {Loading state} | {OneWay} | [Source](
|
|
208
|
+
| {Field 1} | string/int/bool | {Description} | {OneWay/TwoWay} | [Source](../../../../../../{sourcePath}) |
|
|
209
|
+
| {SelectedItem} | Object | {Current selection} | {OneWayToSource} | [Source](../../../../../../{sourcePath}) |
|
|
210
|
+
| {DataSource} | Collection | {List data} | {OneWay} | [Source](../../../../../../{sourcePath}) |
|
|
211
|
+
| {IsBusy} | bool | {Loading state} | {OneWay} | [Source](../../../../../../{sourcePath}) |
|
|
212
212
|
|
|
213
213
|
### 4.2 Form Fields (if applicable)
|
|
214
214
|
|
|
215
215
|
| Field Name | Type | Validation | Control | Source |
|
|
216
216
|
|------------|------|------------|---------|--------|
|
|
217
|
-
| {Field 1} | string | {Required} | TextBox | [Source](
|
|
218
|
-
| {Field 2} | int | {Range} | NumericUpDown | [Source](
|
|
219
|
-
| {Field 3} | DateTime | {Not null} | DateTimePicker | [Source](
|
|
217
|
+
| {Field 1} | string | {Required} | TextBox | [Source](../../../../../../{sourcePath}) |
|
|
218
|
+
| {Field 2} | int | {Range} | NumericUpDown | [Source](../../../../../../{sourcePath}) |
|
|
219
|
+
| {Field 3} | DateTime | {Not null} | DateTimePicker | [Source](../../../../../../{sourcePath}) |
|
|
220
220
|
|
|
221
221
|
---
|
|
222
222
|
|
|
@@ -226,25 +226,25 @@ graph TB
|
|
|
226
226
|
|
|
227
227
|
| Service | Type | Main Function | Source | Document Path |
|
|
228
228
|
|---------|------|---------------|--------|---------------|
|
|
229
|
-
| {Service Name} | Business | {Description} | [Source](
|
|
229
|
+
| {Service Name} | Business | {Description} | [Source](../../../../../../{serviceSourcePath}) | [Service Doc](../../../../../../services/{service-name}.md) |
|
|
230
230
|
|
|
231
231
|
### 5.2 UI Components
|
|
232
232
|
|
|
233
233
|
| Component | Framework | Type | Main Function | Source | Document Path |
|
|
234
234
|
|-----------|-----------|------|---------------|--------|---------------|
|
|
235
|
-
| {UserControl} | WPF/WinForms | Custom | {Reusable UI} | [Source](
|
|
235
|
+
| {UserControl} | WPF/WinForms | Custom | {Reusable UI} | [Source](../../../../../../{componentSourcePath}) | [Component Doc](../../../../../../components/{component-name}.md) |
|
|
236
236
|
|
|
237
237
|
### 5.3 Other Windows
|
|
238
238
|
|
|
239
239
|
| Window Name | Relation Type | Description | Source | Document Path |
|
|
240
240
|
|-------------|---------------|-------------|--------|---------------|
|
|
241
|
-
| {Window Name} | Dialog/Child | {Relation description} | [Source](
|
|
241
|
+
| {Window Name} | Dialog/Child | {Relation description} | [Source](../../../../../../{windowSourcePath}) | [Window Doc](../{window-path}.md) |
|
|
242
242
|
|
|
243
243
|
### 5.4 Referenced By
|
|
244
244
|
|
|
245
245
|
| Window Name | Function Description | Source Path | Document Path |
|
|
246
246
|
|-------------|---------------------|-------------|---------------|
|
|
247
|
-
| {Referencing Window} | {e.g., "Open this window from main menu"} | {source-path} | [Window Doc](
|
|
247
|
+
| {Referencing Window} | {e.g., "Open this window from main menu"} | {source-path} | [Window Doc](../../../../../../{window-path}.md) |
|
|
248
248
|
|
|
249
249
|
---
|
|
250
250
|
|
|
@@ -254,21 +254,21 @@ graph TB
|
|
|
254
254
|
|
|
255
255
|
| Operation | Permission Requirement | No Permission Handling | Source |
|
|
256
256
|
|-----------|----------------------|----------------------|--------|
|
|
257
|
-
| View window | {Role required} | Hide menu item / Show message | [Source](
|
|
258
|
-
| Edit data | {Permission required} | Disable edit button | [Source](
|
|
259
|
-
| Delete record | {Admin role} | Disable delete button | [Source](
|
|
257
|
+
| View window | {Role required} | Hide menu item / Show message | [Source](../../../../../../{sourcePath}) |
|
|
258
|
+
| Edit data | {Permission required} | Disable edit button | [Source](../../../../../../{sourcePath}) |
|
|
259
|
+
| Delete record | {Admin role} | Disable delete button | [Source](../../../../../../{sourcePath}) |
|
|
260
260
|
|
|
261
261
|
### 6.2 Desktop-Specific Rules
|
|
262
262
|
|
|
263
|
-
1. **Auto-save**: {e.g., Auto-save draft every 5 minutes} | [Source](
|
|
264
|
-
2. **Keyboard Shortcuts**: {e.g., Ctrl+S save, Ctrl+F find} | [Source](
|
|
265
|
-
3. **Window State**: {e.g., Remember window size and position} | [Source](
|
|
263
|
+
1. **Auto-save**: {e.g., Auto-save draft every 5 minutes} | [Source](../../../../../../{sourcePath})
|
|
264
|
+
2. **Keyboard Shortcuts**: {e.g., Ctrl+S save, Ctrl+F find} | [Source](../../../../../../{sourcePath})
|
|
265
|
+
3. **Window State**: {e.g., Remember window size and position} | [Source](../../../../../../{sourcePath})
|
|
266
266
|
|
|
267
267
|
### 6.3 Validation Rules
|
|
268
268
|
|
|
269
269
|
| Scenario | Rule | Error Handling | Source |
|
|
270
270
|
|----------|------|----------------|--------|
|
|
271
|
-
| Form submit | {Validation rule} | Show error provider / MessageBox | [Source](
|
|
271
|
+
| Form submit | {Validation rule} | Show error provider / MessageBox | [Source](../../../../../../{sourcePath}) |
|
|
272
272
|
|
|
273
273
|
---
|
|
274
274
|
|
|
@@ -299,5 +299,5 @@ graph TB
|
|
|
299
299
|
**Related Module Document:** [Module Overview Document](../{{module-name}}-overview.md)
|
|
300
300
|
|
|
301
301
|
**Section Source**
|
|
302
|
-
- [{Window}.xaml.cs/{Form}.cs](
|
|
303
|
-
- [{ViewModel}.cs](
|
|
302
|
+
- [{Window}.xaml.cs/{Form}.cs](../../../../../../{sourcePath})
|
|
303
|
+
- [{ViewModel}.cs](../../../../../../{viewModelPath})
|