@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.
- package/README.md +414 -700
- package/docs/ARCHITECTURE.md +331 -0
- package/docs/CHEATSHEET.md +221 -0
- package/docs/COMMAND-FLOWS.md +368 -0
- package/docs/QUICKSTART.md +212 -0
- package/docs/examples/order-management/contracts.cs +84 -0
- package/docs/examples/order-management/proposal.md +24 -0
- package/docs/examples/order-management/spec.md +162 -0
- package/docs/plans/2026-02-23-ddd-architecture-refactor.md +1153 -0
- package/docs/plans/2026-02-23-ddd-nextsteps.md +682 -0
- package/docs/plans/2026-02-23-infra-architect-refactor.md +437 -0
- package/docs/plans/2026-02-23-nextjs-code-review-design.md +156 -0
- package/docs/plans/2026-02-23-nextjs-code-review-impl.md +1254 -0
- package/docs/plans/2026-02-23-nextjs-standards-design.md +149 -0
- package/docs/plans/2026-02-23-nextjs-standards-impl.md +1846 -0
- package/framework/agents/README.md +14 -14
- package/framework/agents/architecture/standards-architect.md +159 -159
- package/framework/agents/frontend/nextjs-expert.md +87 -127
- package/framework/agents/infrastructure/azure-architect.md +147 -147
- package/framework/agents/infrastructure/infra-architect.md +45 -0
- package/framework/agents.json +1145 -278
- package/framework/rules/frontend-standards.md +0 -3
- package/framework/rules/nextjs-standards.md +17 -0
- package/framework/skills/level-0-meta/code-review-nextjs/SKILL.md +147 -0
- package/framework/skills/level-0-meta/code-review-nextjs/references/review-example-nextjs.md +254 -0
- package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +3 -3
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +45 -9
- package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +38 -0
- package/framework/standards/STANDARDS.json +121 -0
- package/framework/standards/architecture/ddd/bounded-contexts.md +105 -0
- package/framework/standards/architecture/ddd/complexity-levels.md +108 -0
- package/framework/standards/architecture/ddd/ubiquitous-language.md +58 -0
- package/framework/standards/frontend/nextjs/app-router.md +123 -0
- package/framework/standards/frontend/nextjs/components.md +132 -0
- package/framework/standards/frontend/nextjs/data-fetching.md +126 -0
- package/framework/standards/frontend/nextjs/forms.md +128 -0
- package/framework/standards/frontend/nextjs/naming-conventions.md +67 -0
- package/framework/standards/frontend/nextjs/project-structure.md +102 -0
- package/framework/standards/frontend/nextjs/state-management.md +72 -0
- package/framework/standards/frontend/nextjs/testing.md +111 -0
- package/framework/templates/REGISTRY.json +538 -142
- package/framework/templates/code/dotnet/contracts/contracts-level1.cs +69 -0
- package/framework/templates/code/dotnet/contracts/contracts-level2.cs +86 -0
- package/framework/templates/code/dotnet/contracts/contracts-level3.cs +41 -0
- package/framework/templates/docs/spec.md +49 -0
- package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -0
- package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -0
- package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -0
- package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -0
- package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -0
- package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -0
- package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -0
- package/framework/templates/project-structure/dotnet-ddd.md +70 -0
- package/framework/workflows/docs/enforcement-pipeline.md +2 -1
- package/package.json +1 -1
- package/scripts/scan-nextjs.mjs +169 -0
- package/src/commands/project/doctor.js +52 -1
- package/src/commands/project/init.js +15 -1
- package/src/commands/project/update.js +6 -1
- package/src/lib/standards/standards-context-injector.js +5 -0
- package/src/lib/validators/nextjs/index.js +6 -0
- package/src/lib/validators/nextjs/next-component-validator.js +181 -0
- package/src/lib/validators/validation-runner.js +5 -0
- package/src/utils/agents-installer.js +14 -2
- package/.morph/.morphversion +0 -5
- package/.morph/analytics/threads-log.jsonl +0 -6
- package/.morph/config/config.json +0 -8
- package/.morph/framework/agents.json +0 -948
- package/.morph/framework/standards/STANDARDS.json +0 -812
- package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
- package/.morph/framework/standards/ai-agents/production.md +0 -415
- package/.morph/framework/standards/ai-agents/setup.md +0 -418
- package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
- package/.morph/framework/standards/ai-agents/workflows.md +0 -354
- package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
- package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
- package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
- package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
- package/.morph/framework/standards/backend/api/rest.md +0 -492
- package/.morph/framework/standards/backend/api/validation.md +0 -88
- package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
- package/.morph/framework/standards/backend/database/ef-core.md +0 -199
- package/.morph/framework/standards/backend/database/migrations.md +0 -393
- package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
- package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
- package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
- package/.morph/framework/standards/backend/dotnet/async.md +0 -366
- package/.morph/framework/standards/backend/dotnet/core.md +0 -117
- package/.morph/framework/standards/backend/dotnet/di.md +0 -439
- package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
- package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
- package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
- package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
- package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
- package/.morph/framework/standards/context/analytics.md +0 -96
- package/.morph/framework/standards/context/bundles.md +0 -110
- package/.morph/framework/standards/context/priming.md +0 -78
- package/.morph/framework/standards/core/architecture.md +0 -185
- package/.morph/framework/standards/core/coding.md +0 -214
- package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
- package/.morph/framework/standards/core/git.md +0 -185
- package/.morph/framework/standards/core/testing.md +0 -295
- package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
- package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
- package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
- package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
- package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
- package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
- package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
- package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
- package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
- package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
- package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
- package/.morph/framework/standards/frontend/blazor/state.md +0 -191
- package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
- package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
- package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -215
- package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
- package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
- package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
- package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
- package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
- package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
- package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
- package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
- package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
- package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
- package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
- package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
- package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
- package/.morph/framework/standards/integration/api/graphql.md +0 -91
- package/.morph/framework/standards/integration/api/grpc.md +0 -114
- package/.morph/framework/standards/integration/api/rest-design.md +0 -95
- package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
- package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
- package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
- package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
- package/.morph/framework/standards/observability/logging.md +0 -131
- package/.morph/framework/standards/observability/metrics.md +0 -121
- package/.morph/framework/standards/observability/monitoring.md +0 -114
- package/.morph/framework/standards/observability/tracing.md +0 -132
- package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
- package/.morph/framework/standards/workflows/thread-management.md +0 -113
- package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
- package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
- package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
- package/.morph/framework/templates/README.md +0 -814
- package/.morph/framework/templates/REGISTRY.json +0 -1492
- package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
- package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
- package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
- package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
- package/.morph/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
- package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
- package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
- package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
- package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
- package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
- package/.morph/framework/templates/code/dotnet/test.cs +0 -239
- package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
- package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
- package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
- package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
- package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
- package/.morph/framework/templates/context/CONTEXT.md +0 -181
- package/.morph/framework/templates/docs/clarifications.md +0 -253
- package/.morph/framework/templates/docs/onboarding.md +0 -123
- package/.morph/framework/templates/docs/proposal.md +0 -182
- package/.morph/framework/templates/docs/schema-analysis.md +0 -119
- package/.morph/framework/templates/docs/spec.md +0 -149
- package/.morph/framework/templates/docs/ui-components.md +0 -124
- package/.morph/framework/templates/docs/ui-design-system.md +0 -76
- package/.morph/framework/templates/docs/ui-flows.md +0 -167
- package/.morph/framework/templates/docs/ui-mockups.md +0 -98
- package/.morph/framework/templates/docs/user-stories.md +0 -34
- package/.morph/framework/templates/examples/design-system-examples.md +0 -357
- package/.morph/framework/templates/examples/spec-examples.md +0 -90
- package/.morph/framework/templates/feature/decisions.md +0 -187
- package/.morph/framework/templates/feature/recap.md +0 -146
- package/.morph/framework/templates/feature/tasks.md +0 -199
- package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
- package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
- package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
- package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
- package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
- package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
- package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
- package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
- package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
- package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
- package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
- package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
- package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
- package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
- package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
- package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
- package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
- package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
- package/.morph/framework/templates/infrastructure/github/README.md +0 -593
- package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
- package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
- package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
- package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
- package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
- package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
- package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
- package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
- package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
- package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
- package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
- package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
- package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
- package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
- package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
- package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
- package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
- package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
- package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
- package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
- package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
- package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
- package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
- package/.morph/framework/templates/saas/subscription.cs +0 -347
- package/.morph/framework/templates/saas/tenant.cs +0 -338
- package/.morph/framework/templates/state.template.json +0 -17
- package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
- package/.morph/framework/templates/ui/MudTheme.cs +0 -281
- package/.morph/framework/templates/ui/design-system.css +0 -226
- package/.morph/logs/tool-failures.log +0 -7
- package/.morph/memory/pre-compact-2026-02-23T15-43-03-521Z.json +0 -16
- package/.morph/state.json +0 -48
- package/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
- 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
|
-
// ====================================================================
|