@polymorphism-tech/morph-spec 4.6.0 → 4.7.1

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 (239) hide show
  1. package/README.md +414 -700
  2. package/docs/ARCHITECTURE.md +331 -0
  3. package/docs/CHEATSHEET.md +221 -0
  4. package/docs/COMMAND-FLOWS.md +368 -0
  5. package/docs/QUICKSTART.md +212 -0
  6. package/docs/examples/order-management/contracts.cs +84 -0
  7. package/docs/examples/order-management/proposal.md +24 -0
  8. package/docs/examples/order-management/spec.md +162 -0
  9. package/docs/plans/2026-02-23-ddd-architecture-refactor.md +1153 -0
  10. package/docs/plans/2026-02-23-ddd-nextsteps.md +682 -0
  11. package/docs/plans/2026-02-23-infra-architect-refactor.md +437 -0
  12. package/docs/plans/2026-02-23-nextjs-code-review-design.md +156 -0
  13. package/docs/plans/2026-02-23-nextjs-code-review-impl.md +1254 -0
  14. package/docs/plans/2026-02-23-nextjs-standards-design.md +149 -0
  15. package/docs/plans/2026-02-23-nextjs-standards-impl.md +1846 -0
  16. package/framework/agents/README.md +14 -14
  17. package/framework/agents/architecture/standards-architect.md +159 -159
  18. package/framework/agents/frontend/nextjs-expert.md +87 -127
  19. package/framework/agents/infrastructure/azure-architect.md +147 -147
  20. package/framework/agents/infrastructure/infra-architect.md +45 -0
  21. package/framework/agents.json +1145 -278
  22. package/framework/rules/frontend-standards.md +0 -3
  23. package/framework/rules/nextjs-standards.md +17 -0
  24. package/framework/skills/level-0-meta/code-review-nextjs/SKILL.md +147 -0
  25. package/framework/skills/level-0-meta/code-review-nextjs/references/review-example-nextjs.md +254 -0
  26. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +3 -3
  27. package/framework/skills/level-1-workflows/phase-design/SKILL.md +45 -9
  28. package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +38 -0
  29. package/framework/standards/STANDARDS.json +121 -0
  30. package/framework/standards/architecture/ddd/bounded-contexts.md +105 -0
  31. package/framework/standards/architecture/ddd/complexity-levels.md +108 -0
  32. package/framework/standards/architecture/ddd/ubiquitous-language.md +58 -0
  33. package/framework/standards/frontend/nextjs/app-router.md +123 -0
  34. package/framework/standards/frontend/nextjs/components.md +132 -0
  35. package/framework/standards/frontend/nextjs/data-fetching.md +126 -0
  36. package/framework/standards/frontend/nextjs/forms.md +128 -0
  37. package/framework/standards/frontend/nextjs/naming-conventions.md +67 -0
  38. package/framework/standards/frontend/nextjs/project-structure.md +102 -0
  39. package/framework/standards/frontend/nextjs/state-management.md +72 -0
  40. package/framework/standards/frontend/nextjs/testing.md +111 -0
  41. package/framework/templates/REGISTRY.json +538 -142
  42. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +69 -0
  43. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +86 -0
  44. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +41 -0
  45. package/framework/templates/docs/spec.md +49 -0
  46. package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -0
  47. package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -0
  48. package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -0
  49. package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -0
  50. package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -0
  51. package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -0
  52. package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -0
  53. package/framework/templates/project-structure/dotnet-ddd.md +70 -0
  54. package/framework/workflows/docs/enforcement-pipeline.md +2 -1
  55. package/package.json +1 -1
  56. package/scripts/scan-nextjs.mjs +169 -0
  57. package/src/commands/project/doctor.js +52 -1
  58. package/src/commands/project/init.js +15 -1
  59. package/src/commands/project/update.js +6 -1
  60. package/src/lib/standards/standards-context-injector.js +5 -0
  61. package/src/lib/validators/nextjs/index.js +6 -0
  62. package/src/lib/validators/nextjs/next-component-validator.js +181 -0
  63. package/src/lib/validators/validation-runner.js +5 -0
  64. package/src/utils/agents-installer.js +14 -2
  65. package/.morph/.morphversion +0 -5
  66. package/.morph/analytics/threads-log.jsonl +0 -6
  67. package/.morph/config/config.json +0 -8
  68. package/.morph/framework/agents.json +0 -948
  69. package/.morph/framework/standards/STANDARDS.json +0 -812
  70. package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
  71. package/.morph/framework/standards/ai-agents/production.md +0 -415
  72. package/.morph/framework/standards/ai-agents/setup.md +0 -418
  73. package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
  74. package/.morph/framework/standards/ai-agents/workflows.md +0 -354
  75. package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
  76. package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
  77. package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
  78. package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
  79. package/.morph/framework/standards/backend/api/rest.md +0 -492
  80. package/.morph/framework/standards/backend/api/validation.md +0 -88
  81. package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
  82. package/.morph/framework/standards/backend/database/ef-core.md +0 -199
  83. package/.morph/framework/standards/backend/database/migrations.md +0 -393
  84. package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
  85. package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
  86. package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
  87. package/.morph/framework/standards/backend/dotnet/async.md +0 -366
  88. package/.morph/framework/standards/backend/dotnet/core.md +0 -117
  89. package/.morph/framework/standards/backend/dotnet/di.md +0 -439
  90. package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  91. package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
  92. package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
  93. package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
  94. package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
  95. package/.morph/framework/standards/context/analytics.md +0 -96
  96. package/.morph/framework/standards/context/bundles.md +0 -110
  97. package/.morph/framework/standards/context/priming.md +0 -78
  98. package/.morph/framework/standards/core/architecture.md +0 -185
  99. package/.morph/framework/standards/core/coding.md +0 -214
  100. package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
  101. package/.morph/framework/standards/core/git.md +0 -185
  102. package/.morph/framework/standards/core/testing.md +0 -295
  103. package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
  104. package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
  105. package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
  106. package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  107. package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
  108. package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
  109. package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  110. package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  111. package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
  112. package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
  113. package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
  114. package/.morph/framework/standards/frontend/blazor/state.md +0 -191
  115. package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
  116. package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
  117. package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -215
  118. package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
  119. package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  120. package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  121. package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  122. package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
  123. package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  124. package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
  125. package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
  126. package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
  127. package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
  128. package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
  129. package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
  130. package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
  131. package/.morph/framework/standards/integration/api/graphql.md +0 -91
  132. package/.morph/framework/standards/integration/api/grpc.md +0 -114
  133. package/.morph/framework/standards/integration/api/rest-design.md +0 -95
  134. package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
  135. package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  136. package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
  137. package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
  138. package/.morph/framework/standards/observability/logging.md +0 -131
  139. package/.morph/framework/standards/observability/metrics.md +0 -121
  140. package/.morph/framework/standards/observability/monitoring.md +0 -114
  141. package/.morph/framework/standards/observability/tracing.md +0 -132
  142. package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
  143. package/.morph/framework/standards/workflows/thread-management.md +0 -113
  144. package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
  145. package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
  146. package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
  147. package/.morph/framework/templates/README.md +0 -814
  148. package/.morph/framework/templates/REGISTRY.json +0 -1492
  149. package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
  150. package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
  151. package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  152. package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  153. package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  154. package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
  155. package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  156. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
  157. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
  158. package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
  159. package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
  160. package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
  161. package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
  162. package/.morph/framework/templates/code/dotnet/test.cs +0 -239
  163. package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
  164. package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
  165. package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
  166. package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
  167. package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
  168. package/.morph/framework/templates/context/CONTEXT.md +0 -181
  169. package/.morph/framework/templates/docs/clarifications.md +0 -253
  170. package/.morph/framework/templates/docs/onboarding.md +0 -123
  171. package/.morph/framework/templates/docs/proposal.md +0 -182
  172. package/.morph/framework/templates/docs/schema-analysis.md +0 -119
  173. package/.morph/framework/templates/docs/spec.md +0 -149
  174. package/.morph/framework/templates/docs/ui-components.md +0 -124
  175. package/.morph/framework/templates/docs/ui-design-system.md +0 -76
  176. package/.morph/framework/templates/docs/ui-flows.md +0 -167
  177. package/.morph/framework/templates/docs/ui-mockups.md +0 -98
  178. package/.morph/framework/templates/docs/user-stories.md +0 -34
  179. package/.morph/framework/templates/examples/design-system-examples.md +0 -357
  180. package/.morph/framework/templates/examples/spec-examples.md +0 -90
  181. package/.morph/framework/templates/feature/decisions.md +0 -187
  182. package/.morph/framework/templates/feature/recap.md +0 -146
  183. package/.morph/framework/templates/feature/tasks.md +0 -199
  184. package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  185. package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
  186. package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  187. package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  188. package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  189. package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  190. package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  191. package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  192. package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
  193. package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  194. package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
  195. package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  196. package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  197. package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  198. package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  199. package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
  200. package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
  201. package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
  202. package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
  203. package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
  204. package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
  205. package/.morph/framework/templates/infrastructure/github/README.md +0 -593
  206. package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  207. package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
  208. package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
  209. package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  210. package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
  211. package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
  212. package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
  213. package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
  214. package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
  215. package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
  216. package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
  217. package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
  218. package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
  219. package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
  220. package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
  221. package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
  222. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  223. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  224. package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
  225. package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
  226. package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
  227. package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
  228. package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
  229. package/.morph/framework/templates/saas/subscription.cs +0 -347
  230. package/.morph/framework/templates/saas/tenant.cs +0 -338
  231. package/.morph/framework/templates/state.template.json +0 -17
  232. package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
  233. package/.morph/framework/templates/ui/MudTheme.cs +0 -281
  234. package/.morph/framework/templates/ui/design-system.css +0 -226
  235. package/.morph/logs/tool-failures.log +0 -7
  236. package/.morph/memory/pre-compact-2026-02-23T15-43-03-521Z.json +0 -16
  237. package/.morph/state.json +0 -48
  238. package/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
  239. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
package/.morph/state.json DELETED
@@ -1,48 +0,0 @@
1
- {
2
- "version": "4.0.0",
3
- "features": {
4
- "override-feature": {
5
- "status": "in_progress",
6
- "phase": "implement",
7
- "tasks": {
8
- "total": 20,
9
- "completed": 30
10
- },
11
- "checkpoints": [
12
- {
13
- "passed": true
14
- },
15
- {
16
- "passed": true
17
- },
18
- {
19
- "passed": false
20
- },
21
- {
22
- "passed": false
23
- },
24
- {
25
- "passed": false
26
- },
27
- {
28
- "passed": false
29
- },
30
- {
31
- "passed": false
32
- },
33
- {
34
- "passed": false
35
- },
36
- {
37
- "passed": false
38
- },
39
- {
40
- "passed": false
41
- }
42
- ],
43
- "trustConfig": {}
44
- }
45
- },
46
- "threads": {},
47
- "metadata": {}
48
- }
@@ -1,217 +0,0 @@
1
- // ============================================================
2
- // CONTRACTS: {{titleCase FEATURE_NAME}}
3
- // Generated by MORPH Framework
4
- // Date: {{DATE}}
5
- // ============================================================
6
-
7
- #region Usings
8
-
9
- using System;
10
- using System.Collections.Generic;
11
- using System.Threading;
12
- using System.Threading.Tasks;
13
-
14
- #endregion
15
-
16
- namespace {{NAMESPACE}}.Application.Features.{{pascalCase FEATURE_NAME}};
17
-
18
- #region Service Interfaces
19
-
20
- /// <summary>
21
- /// Service for managing {{pascalCase FEATURE_NAME}} operations.
22
- /// </summary>
23
- public interface I{{pascalCase FEATURE_NAME}}Service
24
- {
25
- /// <summary>
26
- /// Gets a {{FEATURE_NAME_LOWER_SNAKE}} by its identifier.
27
- /// </summary>
28
- Task<{{pascalCase FEATURE_NAME}}Dto?> GetByIdAsync(int id, CancellationToken cancellationToken = default);
29
-
30
- /// <summary>
31
- /// Gets all {{FEATURE_NAME_LOWER_SNAKE}}s.
32
- /// </summary>
33
- Task<List<{{pascalCase FEATURE_NAME}}Dto>> GetAllAsync(CancellationToken cancellationToken = default);
34
-
35
- /// <summary>
36
- /// Creates a new {{FEATURE_NAME_LOWER_SNAKE}}.
37
- /// </summary>
38
- Task<{{pascalCase FEATURE_NAME}}Dto> CreateAsync(Create{{pascalCase FEATURE_NAME}}Request request, CancellationToken cancellationToken = default);
39
-
40
- /// <summary>
41
- /// Updates an existing {{FEATURE_NAME_LOWER_SNAKE}}.
42
- /// </summary>
43
- Task UpdateAsync(int id, Update{{pascalCase FEATURE_NAME}}Request request, CancellationToken cancellationToken = default);
44
-
45
- /// <summary>
46
- /// Deletes a {{FEATURE_NAME_LOWER_SNAKE}}.
47
- /// </summary>
48
- Task DeleteAsync(int id, CancellationToken cancellationToken = default);
49
- }
50
-
51
- #endregion
52
-
53
- #region DTOs
54
-
55
- /// <summary>
56
- /// Data transfer object for {{pascalCase FEATURE_NAME}}.
57
- /// </summary>
58
- public record {{pascalCase FEATURE_NAME}}Dto(
59
- int Id,
60
- string Name,
61
- {{pascalCase FEATURE_NAME}}Status Status,
62
- DateTime CreatedAt,
63
- DateTime? UpdatedAt
64
- );
65
-
66
- /// <summary>
67
- /// Request to create a new {{pascalCase FEATURE_NAME}}.
68
- /// </summary>
69
- public record Create{{pascalCase FEATURE_NAME}}Request(
70
- string Name
71
- // Add other required fields
72
- );
73
-
74
- /// <summary>
75
- /// Request to update an existing {{pascalCase FEATURE_NAME}}.
76
- /// </summary>
77
- public record Update{{pascalCase FEATURE_NAME}}Request(
78
- string Name
79
- // Add other updatable fields
80
- );
81
-
82
- #endregion
83
-
84
- #region Enums
85
-
86
- /// <summary>
87
- /// Status of a {{pascalCase FEATURE_NAME}}.
88
- /// </summary>
89
- public enum {{pascalCase FEATURE_NAME}}Status
90
- {
91
- Pending = 0,
92
- Active = 1,
93
- Completed = 2,
94
- Failed = 3
95
- }
96
-
97
- #endregion
98
-
99
- #region Repository Interfaces
100
-
101
- /// <summary>
102
- /// Repository for {{pascalCase FEATURE_NAME}} data access.
103
- /// </summary>
104
- public interface I{{pascalCase FEATURE_NAME}}Repository
105
- {
106
- Task<{{pascalCase FEATURE_NAME}}?> GetByIdAsync(int id, CancellationToken cancellationToken = default);
107
- Task<List<{{pascalCase FEATURE_NAME}}>> GetAllAsync(CancellationToken cancellationToken = default);
108
- Task AddAsync({{pascalCase FEATURE_NAME}} entity, CancellationToken cancellationToken = default);
109
- void Update({{pascalCase FEATURE_NAME}} entity);
110
- void Remove({{pascalCase FEATURE_NAME}} entity);
111
- Task SaveChangesAsync(CancellationToken cancellationToken = default);
112
- }
113
-
114
- #endregion
115
-
116
- #region Domain Entity Reference
117
-
118
- /*
119
- /// <summary>
120
- /// {{pascalCase FEATURE_NAME}} domain entity.
121
- /// Implement in Domain/Entities/{{pascalCase FEATURE_NAME}}.cs
122
- /// </summary>
123
- public class {{pascalCase FEATURE_NAME}}
124
- {
125
- public int Id { get; private set; }
126
- public string Name { get; private set; } = string.Empty;
127
- public {{pascalCase FEATURE_NAME}}Status Status { get; private set; }
128
- public DateTime CreatedAt { get; private set; }
129
- public DateTime? UpdatedAt { get; private set; }
130
-
131
- private {{pascalCase FEATURE_NAME}}() { } // EF Constructor
132
-
133
- public static {{pascalCase FEATURE_NAME}} Create(string name)
134
- {
135
- return new {{pascalCase FEATURE_NAME}}
136
- {
137
- Name = name,
138
- Status = {{pascalCase FEATURE_NAME}}Status.Pending,
139
- CreatedAt = DateTime.UtcNow
140
- };
141
- }
142
-
143
- public void Activate()
144
- {
145
- Status = {{pascalCase FEATURE_NAME}}Status.Active;
146
- UpdatedAt = DateTime.UtcNow;
147
- }
148
-
149
- public void Complete()
150
- {
151
- Status = {{pascalCase FEATURE_NAME}}Status.Completed;
152
- UpdatedAt = DateTime.UtcNow;
153
- }
154
- }
155
- */
156
-
157
- #endregion
158
-
159
- #region AI Agent Interfaces (if applicable)
160
-
161
- /// <summary>
162
- /// AI Agent for {{pascalCase FEATURE_NAME}} analysis.
163
- /// </summary>
164
- public interface I{{pascalCase FEATURE_NAME}}AnalyzerAgent
165
- {
166
- /// <summary>
167
- /// Analyzes {{FEATURE_NAME_LOWER_SNAKE}} data using AI.
168
- /// </summary>
169
- Task<{{pascalCase FEATURE_NAME}}AnalysisResult> AnalyzeAsync(
170
- {{pascalCase FEATURE_NAME}}Data data,
171
- CancellationToken cancellationToken = default);
172
- }
173
-
174
- public record {{pascalCase FEATURE_NAME}}Data(
175
- // Input data for analysis
176
- string Content
177
- );
178
-
179
- public record {{pascalCase FEATURE_NAME}}AnalysisResult(
180
- string Summary,
181
- List<string> Insights,
182
- List<string> Recommendations,
183
- double ConfidenceScore
184
- );
185
-
186
- #endregion
187
-
188
- #region Hangfire Job Interfaces (if applicable)
189
-
190
- /// <summary>
191
- /// Background job for processing {{pascalCase FEATURE_NAME}}.
192
- /// </summary>
193
- public interface I{{pascalCase FEATURE_NAME}}ProcessorJob
194
- {
195
- /// <summary>
196
- /// Executes the {{FEATURE_NAME_LOWER_SNAKE}} processing job.
197
- /// </summary>
198
- Task ExecuteAsync(int id, CancellationToken cancellationToken = default);
199
- }
200
-
201
- #endregion
202
-
203
- #region Exceptions
204
-
205
- public class {{pascalCase FEATURE_NAME}}NotFoundException : Exception
206
- {
207
- public {{pascalCase FEATURE_NAME}}NotFoundException(int id)
208
- : base($"{{pascalCase FEATURE_NAME}} with ID {id} was not found.") { }
209
- }
210
-
211
- public class {{pascalCase FEATURE_NAME}}ProcessingException : Exception
212
- {
213
- public {{pascalCase FEATURE_NAME}}ProcessingException(string message, Exception? innerException = null)
214
- : base(message, innerException) { }
215
- }
216
-
217
- #endregion
@@ -1,172 +0,0 @@
1
- // ====================================================================
2
- // Feature: {{FEATURE_NAME_TITLE}}
3
- // Contracts: DTOs, Interfaces, Enums, Value Objects
4
- // Generated: {{DATE}}
5
- // Author: {{AUTHOR}}
6
- // ====================================================================
7
- //
8
- // IMPORTANT: This file was generated from schema-analysis.md
9
- // All field names, types, and relationships are based on REAL database schema
10
- // DO NOT modify without checking schema-analysis.md first!
11
- //
12
- // ====================================================================
13
-
14
- namespace {{NAMESPACE}}.Features.{{FEATURE_NAME_PASCAL}};
15
-
16
- // ====================================================================
17
- // DTOs (Data Transfer Objects)
18
- // ====================================================================
19
- // Pattern: Use records for immutability
20
- // Pattern: All DTOs must have XML documentation
21
- // Pattern: Use nullable reference types appropriately
22
- // ====================================================================
23
-
24
- {{#each dtos}}
25
- /// <summary>
26
- /// {{this.description}}
27
- /// </summary>
28
- {{#if this.isCreateDto}}
29
- public record {{this.name}}(
30
- {{#each this.fields}}
31
- {{this.type}}{{#if this.nullable}}?{{/if}} {{this.name}}{{#unless @last}},{{/unless}}{{#if this.comment}} // {{this.comment}}{{/if}}
32
- {{/each}}
33
- );
34
- {{else if this.isUpdateDto}}
35
- public record {{this.name}}(
36
- {{#each this.fields}}
37
- {{this.type}}{{#if this.nullable}}?{{/if}} {{this.name}}{{#unless @last}},{{/unless}}{{#if this.comment}} // {{this.comment}}{{/if}}
38
- {{/each}}
39
- );
40
- {{else}}
41
- /// <summary>
42
- /// Response DTO for {{this.entityName}}
43
- /// </summary>
44
- public record {{this.name}}(
45
- {{#each this.fields}}
46
- {{this.type}}{{#if this.nullable}}?{{/if}} {{this.name}}{{#unless @last}},{{/unless}}{{#if this.comment}} // {{this.comment}}{{/if}}
47
- {{/each}}
48
- );
49
- {{/if}}
50
-
51
- {{/each}}
52
-
53
- // ====================================================================
54
- // Service Interfaces
55
- // ====================================================================
56
- // Pattern: All async methods must accept CancellationToken
57
- // Pattern: Use Task<TResult?> for operations that may return null
58
- // Pattern: Document exceptions in XML comments
59
- // ====================================================================
60
-
61
- {{#each interfaces}}
62
- /// <summary>
63
- /// {{this.description}}
64
- /// </summary>
65
- public interface {{this.name}}
66
- {
67
- {{#each this.methods}}
68
- /// <summary>
69
- /// {{this.description}}
70
- /// </summary>
71
- {{#if this.exceptions}}
72
- {{#each this.exceptions}}
73
- /// <exception cref="{{this.type}}">{{this.condition}}</exception>
74
- {{/each}}
75
- {{/if}}
76
- Task<{{this.returnType}}{{#if this.nullable}}?{{/if}}> {{this.name}}({{#each this.parameters}}{{this.type}} {{this.name}}{{#unless @last}}, {{/unless}}{{/each}}, CancellationToken ct);
77
-
78
- {{/each}}
79
- }
80
-
81
- {{/each}}
82
-
83
- // ====================================================================
84
- // Enums
85
- // ====================================================================
86
-
87
- {{#each enums}}
88
- /// <summary>
89
- /// {{this.description}}
90
- /// </summary>
91
- public enum {{this.name}}
92
- {
93
- {{#each this.values}}
94
- /// <summary>
95
- /// {{this.description}}
96
- /// </summary>
97
- {{this.name}}{{#if this.value}} = {{this.value}}{{/if}}{{#unless @last}},{{/unless}}
98
- {{/each}}
99
- }
100
-
101
- {{/each}}
102
-
103
- // ====================================================================
104
- // Value Objects (if applicable)
105
- // ====================================================================
106
-
107
- {{#each valueObjects}}
108
- /// <summary>
109
- /// {{this.description}}
110
- /// </summary>
111
- public record {{this.name}}
112
- {
113
- {{#each this.properties}}
114
- /// <summary>
115
- /// {{this.description}}
116
- /// </summary>
117
- public {{this.type}}{{#if this.nullable}}?{{/if}} {{this.name}} { get; init; }{{#if this.default}} = {{this.default}};{{/if}}
118
- {{/each}}
119
-
120
- {{#if this.validation}}
121
- /// <summary>
122
- /// Validates the value object
123
- /// </summary>
124
- public bool IsValid()
125
- {
126
- {{this.validation}}
127
- }
128
- {{/if}}
129
- }
130
-
131
- {{/each}}
132
-
133
- // ====================================================================
134
- // Request/Response Wrappers (if using CQRS)
135
- // ====================================================================
136
-
137
- {{#if useCQRS}}
138
- {{#each commands}}
139
- /// <summary>
140
- /// Command: {{this.description}}
141
- /// </summary>
142
- public record {{this.name}}(
143
- {{#each this.parameters}}
144
- {{this.type}}{{#if this.nullable}}?{{/if}} {{this.name}}{{#unless @last}},{{/unless}}
145
- {{/each}}
146
- );
147
-
148
- {{/each}}
149
-
150
- {{#each queries}}
151
- /// <summary>
152
- /// Query: {{this.description}}
153
- /// </summary>
154
- public record {{this.name}}(
155
- {{#each this.parameters}}
156
- {{this.type}}{{#if this.nullable}}?{{/if}} {{this.name}}{{#unless @last}},{{/unless}}
157
- {{/each}}
158
- );
159
-
160
- {{/each}}
161
- {{/if}}
162
-
163
- // ====================================================================
164
- // Notes
165
- // ====================================================================
166
- // - All field names match database schema (see schema-analysis.md)
167
- // - Nullability matches database constraints
168
- // - Complex types (JSONB → JsonObject) correctly mapped
169
- // - Relationships preserved in navigation properties
170
- // - Immutable records used for DTOs (recommended pattern)
171
- // - CancellationToken required for all async operations
172
- // ====================================================================