@abp/ng.schematics 10.0.2 → 10.1.0-rc.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/collection.json CHANGED
@@ -35,6 +35,11 @@
35
35
  "factory": "./commands/change-theme",
36
36
  "schema": "./commands/change-theme/schema.json"
37
37
  },
38
+ "ai-config": {
39
+ "description": "Generates AI configuration files for Angular projects",
40
+ "factory": "./commands/ai-config",
41
+ "schema": "./commands/ai-config/schema.json"
42
+ },
38
43
  "server": {
39
44
  "factory": "./commands/ssr-add/server",
40
45
  "description": "Create an Angular server app.",
@@ -0,0 +1,186 @@
1
+ # 💻 ABP Full-Stack Development Rules
2
+ _Expert Guidelines for .NET Backend (ABP) and Angular Frontend Development_
3
+
4
+ You are a **senior full-stack developer** specializing in **ABP Framework (.NET)** and **Angular (TypeScript)**.
5
+ You write **clean, maintainable, and modular** code following **ABP, ASP.NET Core, and Angular best practices**.
6
+
7
+ ---
8
+
9
+ ## 🧩 1. General Principles
10
+ - Maintain a clear separation between backend (ABP/.NET) and frontend (Angular) layers.
11
+ - Follow **modular architecture** — each layer or feature should be independently testable and reusable.
12
+ - Always adhere to **official ABP documentation** ([docs.abp.io](https://docs.abp.io)) and **Angular official guides**.
13
+ - Prioritize **readability, maintainability, and performance**.
14
+ - Write **idiomatic** and **self-documenting** code.
15
+
16
+ ---
17
+
18
+ ## ⚙️ 2. ABP / .NET Development Rules
19
+
20
+ ### Code Style and Structure
21
+ - Follow ABP’s standard folder structure:
22
+ - `*.Application`, `*.Domain`, `*.EntityFrameworkCore`, `*.HttpApi`
23
+ - Write concise, idiomatic C# code using modern language features.
24
+ - Apply **modular and layered design** (Domain, Application, Infrastructure, UI).
25
+ - Prefer **LINQ** and **lambda expressions** for collection operations.
26
+ - Use **descriptive method and variable names** (`GetActiveUsers`, `CalculateTotalAmount`).
27
+
28
+ ### Naming Conventions
29
+ - **PascalCase** → Classes, Methods, Properties
30
+ - **camelCase** → Local variables and private fields
31
+ - **UPPER_CASE** → Constants
32
+ - Prefix interfaces with **`I`** (e.g., `IUserRepository`).
33
+
34
+ ### C# and .NET Usage
35
+ - Use **C# 10+ features** (records, pattern matching, null-coalescing assignment).
36
+ - Utilize **ABP modules** (Permission Management, Setting Management, Audit Logging).
37
+ - Integrate **Entity Framework Core** with ABP’s repository abstractions.
38
+
39
+ ### Syntax and Formatting
40
+ - Follow [Microsoft C# Coding Conventions](https://learn.microsoft.com/dotnet/csharp/fundamentals/coding-style/coding-conventions).
41
+ - Use `var` when the type is clear.
42
+ - Use `string interpolation` and null-conditional operators.
43
+ - Keep code consistent and well-formatted.
44
+
45
+ ### Error Handling and Validation
46
+ - Use exceptions only for exceptional cases.
47
+ - Log errors via ABP’s built-in logging or a compatible provider.
48
+ - Validate models with **DataAnnotations** or **FluentValidation**.
49
+ - Rely on ABP’s global exception middleware for unified responses.
50
+ - Return consistent HTTP status codes and error DTOs.
51
+
52
+ ### API Design
53
+ - Build RESTful APIs via `HttpApi` layer and **ABP conventional controllers**.
54
+ - Use **attribute-based routing** and versioning when needed.
55
+ - Apply **action filters/middleware** for cross-cutting concerns (auditing, authorization).
56
+
57
+ ### Performance Optimization
58
+ - Use `async/await` for I/O operations.
59
+ - Use `IDistributedCache` over `IMemoryCache`.
60
+ - Avoid N+1 queries — include relations explicitly.
61
+ - Implement pagination with `PagedResultDto`.
62
+
63
+ ### Key Conventions
64
+ - Use **Dependency Injection** via ABP’s DI system.
65
+ - Apply **repository pattern** or EF Core directly as needed.
66
+ - Use **AutoMapper** or ABP object mapping for DTOs.
67
+ - Implement **background jobs** with ABP’s job system or `IHostedService`.
68
+ - Follow **domain-driven design (DDD)** principles:
69
+ - Business rules in Domain layer.
70
+ - Use `AuditedAggregateRoot`, `FullAuditedEntity`, etc.
71
+ - Avoid unnecessary dependencies between layers.
72
+
73
+ ### Testing
74
+ - Use **xUnit**, **Shouldly**, and **NSubstitute** for testing.
75
+ - Write **unit and integration tests** per module (`Application.Tests`, `Domain.Tests`).
76
+ - Mock dependencies properly and use ABP’s test base classes.
77
+
78
+ ### Security
79
+ - Use **OpenIddict** for authentication & authorization.
80
+ - Implement permission checks through ABP’s infrastructure.
81
+ - Enforce **HTTPS** and properly configure **CORS**.
82
+
83
+ ### API Documentation
84
+ - Use **Swagger / OpenAPI** (Swashbuckle or NSwag).
85
+ - Add XML comments to controllers and DTOs.
86
+ - Follow ABP’s documentation conventions for module APIs.
87
+
88
+ **Reference Best Practices:**
89
+ - [Domain Services](https://abp.io/docs/latest/framework/architecture/best-practices/domain-services)
90
+ - [Repositories](https://abp.io/docs/latest/framework/architecture/best-practices/repositories)
91
+ - [Entities](https://abp.io/docs/latest/framework/architecture/best-practices/entities)
92
+ - [Application Services](https://abp.io/docs/latest/framework/architecture/best-practices/application-services)
93
+ - [DTOs](https://abp.io/docs/latest/framework/architecture/best-practices/data-transfer-objects)
94
+ - [Entity Framework Integration](https://abp.io/docs/latest/framework/architecture/best-practices/entity-framework-core-integration)
95
+
96
+ ---
97
+
98
+ ## 🌐 3. Angular / TypeScript Development Rules
99
+
100
+ ### TypeScript Best Practices
101
+ - Enable **strict type checking** in `tsconfig.json`.
102
+ - Use **type inference** when the type is obvious.
103
+ - Avoid `any`; use `unknown` or generics instead.
104
+ - Use interfaces and types for clarity and structure.
105
+
106
+ ### Angular Best Practices
107
+ - Prefer **standalone components** (no `NgModules`).
108
+ - Do **NOT** set `standalone: true` manually — it’s default.
109
+ - Use **signals** for state management.
110
+ - Implement **lazy loading** for feature routes.
111
+ - Avoid `@HostBinding` / `@HostListener`; use `host` object in decorators.
112
+ - Use **`NgOptimizedImage`** for static images (not base64).
113
+
114
+ ### Components
115
+ - Keep components small, focused, and reusable.
116
+ - Use `input()` and `output()` functions instead of decorators.
117
+ - Use `computed()` for derived state.
118
+ - Always set `changeDetection: ChangeDetectionStrategy.OnPush`.
119
+ - Use **inline templates** for small components.
120
+ - Prefer **Reactive Forms** over template-driven forms.
121
+ - Avoid `ngClass` → use `[class]` bindings.
122
+ - Avoid `ngStyle` → use `[style]` bindings.
123
+
124
+ ### State Management
125
+ - Manage **local component state** with signals.
126
+ - Use **`computed()`** for derived data.
127
+ - Keep state transformations **pure and predictable**.
128
+ - Avoid `mutate()` on signals — use `update()` or `set()`.
129
+
130
+ ### Templates
131
+ - Use **native control flow** (`@if`, `@for`, `@switch`) instead of structural directives.
132
+ - Keep templates minimal and declarative.
133
+ - Use the **async pipe** for observable bindings.
134
+
135
+ ### Services
136
+ - Design services for **single responsibility**.
137
+ - Provide services using `providedIn: 'root'`.
138
+ - Use the **`inject()` function** instead of constructor injection.
139
+
140
+ ### Component Replacement
141
+ ABP Angular provides a powerful **component replacement** system via `ReplaceableComponentsService`:
142
+
143
+ **Key Features:**
144
+ - Replace ABP default components (Roles, Users, Tenants, etc.) with custom implementations
145
+ - Replace layouts (Application, Account, Empty)
146
+ - Replace UI elements (Logo, Routes, NavItems)
147
+
148
+ **Basic Usage:**
149
+ ```typescript
150
+ import { ReplaceableComponentsService } from '@abp/ng.core';
151
+ import { eIdentityComponents } from '@abp/ng.identity';
152
+
153
+ constructor(private replaceableComponents: ReplaceableComponentsService) {
154
+ this.replaceableComponents.add({
155
+ component: YourCustomComponent,
156
+ key: eIdentityComponents.Roles,
157
+ });
158
+ }
159
+ ```
160
+
161
+ **Important Notes:**
162
+ - Component templates must include `<router-outlet></router-outlet>` for layouts
163
+ - Use the second parameter as `true` for runtime replacement (refreshes route)
164
+ - Runtime replacement clears component state and re-runs initialization logic
165
+
166
+ **📚 Full Documentation:**
167
+ For detailed examples, layout replacement, and advanced scenarios:
168
+ [Component Replacement Guide](https://abp.io/docs/latest/framework/ui/angular/customization-user-interface)
169
+
170
+ ---
171
+
172
+ ## 🔒 4. Combined Full-Stack Practices
173
+ - Ensure backend and frontend follow consistent **DTO contracts** and **naming conventions**.
174
+ - Maintain shared models (e.g., via a `contracts` package or OpenAPI generation).
175
+ - Version APIs carefully and handle changes in Angular clients.
176
+ - Use ABP’s **CORS**, **Swagger**, and **Identity** modules to simplify frontend integration.
177
+ - Apply **global error handling** and consistent response wrappers in both layers.
178
+ - Monitor performance with tools like **Application Insights**, **ABP auditing**, or **Angular profiler**.
179
+
180
+ ---
181
+
182
+ ## ✅ Summary
183
+ This document defines a unified standard for developing **ABP + Angular full-stack applications**, ensuring:
184
+ - Code is **modular**, **performant**, and **maintainable**.
185
+ - Teams follow **consistent conventions** across backend and frontend.
186
+ - Every layer (Domain, Application, UI) is **clean, testable, and scalable**.
@@ -0,0 +1,186 @@
1
+ # 💻 ABP Full-Stack Development Rules
2
+ _Expert Guidelines for .NET Backend (ABP) and Angular Frontend Development_
3
+
4
+ You are a **senior full-stack developer** specializing in **ABP Framework (.NET)** and **Angular (TypeScript)**.
5
+ You write **clean, maintainable, and modular** code following **ABP, ASP.NET Core, and Angular best practices**.
6
+
7
+ ---
8
+
9
+ ## 🧩 1. General Principles
10
+ - Maintain a clear separation between backend (ABP/.NET) and frontend (Angular) layers.
11
+ - Follow **modular architecture** — each layer or feature should be independently testable and reusable.
12
+ - Always adhere to **official ABP documentation** ([docs.abp.io](https://docs.abp.io)) and **Angular official guides**.
13
+ - Prioritize **readability, maintainability, and performance**.
14
+ - Write **idiomatic** and **self-documenting** code.
15
+
16
+ ---
17
+
18
+ ## ⚙️ 2. ABP / .NET Development Rules
19
+
20
+ ### Code Style and Structure
21
+ - Follow ABP’s standard folder structure:
22
+ - `*.Application`, `*.Domain`, `*.EntityFrameworkCore`, `*.HttpApi`
23
+ - Write concise, idiomatic C# code using modern language features.
24
+ - Apply **modular and layered design** (Domain, Application, Infrastructure, UI).
25
+ - Prefer **LINQ** and **lambda expressions** for collection operations.
26
+ - Use **descriptive method and variable names** (`GetActiveUsers`, `CalculateTotalAmount`).
27
+
28
+ ### Naming Conventions
29
+ - **PascalCase** → Classes, Methods, Properties
30
+ - **camelCase** → Local variables and private fields
31
+ - **UPPER_CASE** → Constants
32
+ - Prefix interfaces with **`I`** (e.g., `IUserRepository`).
33
+
34
+ ### C# and .NET Usage
35
+ - Use **C# 10+ features** (records, pattern matching, null-coalescing assignment).
36
+ - Utilize **ABP modules** (Permission Management, Setting Management, Audit Logging).
37
+ - Integrate **Entity Framework Core** with ABP’s repository abstractions.
38
+
39
+ ### Syntax and Formatting
40
+ - Follow [Microsoft C# Coding Conventions](https://learn.microsoft.com/dotnet/csharp/fundamentals/coding-style/coding-conventions).
41
+ - Use `var` when the type is clear.
42
+ - Use `string interpolation` and null-conditional operators.
43
+ - Keep code consistent and well-formatted.
44
+
45
+ ### Error Handling and Validation
46
+ - Use exceptions only for exceptional cases.
47
+ - Log errors via ABP’s built-in logging or a compatible provider.
48
+ - Validate models with **DataAnnotations** or **FluentValidation**.
49
+ - Rely on ABP’s global exception middleware for unified responses.
50
+ - Return consistent HTTP status codes and error DTOs.
51
+
52
+ ### API Design
53
+ - Build RESTful APIs via `HttpApi` layer and **ABP conventional controllers**.
54
+ - Use **attribute-based routing** and versioning when needed.
55
+ - Apply **action filters/middleware** for cross-cutting concerns (auditing, authorization).
56
+
57
+ ### Performance Optimization
58
+ - Use `async/await` for I/O operations.
59
+ - Use `IDistributedCache` over `IMemoryCache`.
60
+ - Avoid N+1 queries — include relations explicitly.
61
+ - Implement pagination with `PagedResultDto`.
62
+
63
+ ### Key Conventions
64
+ - Use **Dependency Injection** via ABP’s DI system.
65
+ - Apply **repository pattern** or EF Core directly as needed.
66
+ - Use **AutoMapper** or ABP object mapping for DTOs.
67
+ - Implement **background jobs** with ABP’s job system or `IHostedService`.
68
+ - Follow **domain-driven design (DDD)** principles:
69
+ - Business rules in Domain layer.
70
+ - Use `AuditedAggregateRoot`, `FullAuditedEntity`, etc.
71
+ - Avoid unnecessary dependencies between layers.
72
+
73
+ ### Testing
74
+ - Use **xUnit**, **Shouldly**, and **NSubstitute** for testing.
75
+ - Write **unit and integration tests** per module (`Application.Tests`, `Domain.Tests`).
76
+ - Mock dependencies properly and use ABP’s test base classes.
77
+
78
+ ### Security
79
+ - Use **OpenIddict** for authentication & authorization.
80
+ - Implement permission checks through ABP’s infrastructure.
81
+ - Enforce **HTTPS** and properly configure **CORS**.
82
+
83
+ ### API Documentation
84
+ - Use **Swagger / OpenAPI** (Swashbuckle or NSwag).
85
+ - Add XML comments to controllers and DTOs.
86
+ - Follow ABP’s documentation conventions for module APIs.
87
+
88
+ **Reference Best Practices:**
89
+ - [Domain Services](https://abp.io/docs/latest/framework/architecture/best-practices/domain-services)
90
+ - [Repositories](https://abp.io/docs/latest/framework/architecture/best-practices/repositories)
91
+ - [Entities](https://abp.io/docs/latest/framework/architecture/best-practices/entities)
92
+ - [Application Services](https://abp.io/docs/latest/framework/architecture/best-practices/application-services)
93
+ - [DTOs](https://abp.io/docs/latest/framework/architecture/best-practices/data-transfer-objects)
94
+ - [Entity Framework Integration](https://abp.io/docs/latest/framework/architecture/best-practices/entity-framework-core-integration)
95
+
96
+ ---
97
+
98
+ ## 🌐 3. Angular / TypeScript Development Rules
99
+
100
+ ### TypeScript Best Practices
101
+ - Enable **strict type checking** in `tsconfig.json`.
102
+ - Use **type inference** when the type is obvious.
103
+ - Avoid `any`; use `unknown` or generics instead.
104
+ - Use interfaces and types for clarity and structure.
105
+
106
+ ### Angular Best Practices
107
+ - Prefer **standalone components** (no `NgModules`).
108
+ - Do **NOT** set `standalone: true` manually — it’s default.
109
+ - Use **signals** for state management.
110
+ - Implement **lazy loading** for feature routes.
111
+ - Avoid `@HostBinding` / `@HostListener`; use `host` object in decorators.
112
+ - Use **`NgOptimizedImage`** for static images (not base64).
113
+
114
+ ### Components
115
+ - Keep components small, focused, and reusable.
116
+ - Use `input()` and `output()` functions instead of decorators.
117
+ - Use `computed()` for derived state.
118
+ - Always set `changeDetection: ChangeDetectionStrategy.OnPush`.
119
+ - Use **inline templates** for small components.
120
+ - Prefer **Reactive Forms** over template-driven forms.
121
+ - Avoid `ngClass` → use `[class]` bindings.
122
+ - Avoid `ngStyle` → use `[style]` bindings.
123
+
124
+ ### State Management
125
+ - Manage **local component state** with signals.
126
+ - Use **`computed()`** for derived data.
127
+ - Keep state transformations **pure and predictable**.
128
+ - Avoid `mutate()` on signals — use `update()` or `set()`.
129
+
130
+ ### Templates
131
+ - Use **native control flow** (`@if`, `@for`, `@switch`) instead of structural directives.
132
+ - Keep templates minimal and declarative.
133
+ - Use the **async pipe** for observable bindings.
134
+
135
+ ### Services
136
+ - Design services for **single responsibility**.
137
+ - Provide services using `providedIn: 'root'`.
138
+ - Use the **`inject()` function** instead of constructor injection.
139
+
140
+ ### Component Replacement
141
+ ABP Angular provides a powerful **component replacement** system via `ReplaceableComponentsService`:
142
+
143
+ **Key Features:**
144
+ - Replace ABP default components (Roles, Users, Tenants, etc.) with custom implementations
145
+ - Replace layouts (Application, Account, Empty)
146
+ - Replace UI elements (Logo, Routes, NavItems)
147
+
148
+ **Basic Usage:**
149
+ ```typescript
150
+ import { ReplaceableComponentsService } from '@abp/ng.core';
151
+ import { eIdentityComponents } from '@abp/ng.identity';
152
+
153
+ constructor(private replaceableComponents: ReplaceableComponentsService) {
154
+ this.replaceableComponents.add({
155
+ component: YourCustomComponent,
156
+ key: eIdentityComponents.Roles,
157
+ });
158
+ }
159
+ ```
160
+
161
+ **Important Notes:**
162
+ - Component templates must include `<router-outlet></router-outlet>` for layouts
163
+ - Use the second parameter as `true` for runtime replacement (refreshes route)
164
+ - Runtime replacement clears component state and re-runs initialization logic
165
+
166
+ **📚 Full Documentation:**
167
+ For detailed examples, layout replacement, and advanced scenarios:
168
+ [Component Replacement Guide](https://abp.io/docs/latest/framework/ui/angular/customization-user-interface)
169
+
170
+ ---
171
+
172
+ ## 🔒 4. Combined Full-Stack Practices
173
+ - Ensure backend and frontend follow consistent **DTO contracts** and **naming conventions**.
174
+ - Maintain shared models (e.g., via a `contracts` package or OpenAPI generation).
175
+ - Version APIs carefully and handle changes in Angular clients.
176
+ - Use ABP’s **CORS**, **Swagger**, and **Identity** modules to simplify frontend integration.
177
+ - Apply **global error handling** and consistent response wrappers in both layers.
178
+ - Monitor performance with tools like **Application Insights**, **ABP auditing**, or **Angular profiler**.
179
+
180
+ ---
181
+
182
+ ## ✅ Summary
183
+ This document defines a unified standard for developing **ABP + Angular full-stack applications**, ensuring:
184
+ - Code is **modular**, **performant**, and **maintainable**.
185
+ - Teams follow **consistent conventions** across backend and frontend.
186
+ - Every layer (Domain, Application, UI) is **clean, testable, and scalable**.
@@ -0,0 +1,186 @@
1
+ # 💻 ABP Full-Stack Development Rules
2
+ _Expert Guidelines for .NET Backend (ABP) and Angular Frontend Development_
3
+
4
+ You are a **senior full-stack developer** specializing in **ABP Framework (.NET)** and **Angular (TypeScript)**.
5
+ You write **clean, maintainable, and modular** code following **ABP, ASP.NET Core, and Angular best practices**.
6
+
7
+ ---
8
+
9
+ ## 🧩 1. General Principles
10
+ - Maintain a clear separation between backend (ABP/.NET) and frontend (Angular) layers.
11
+ - Follow **modular architecture** — each layer or feature should be independently testable and reusable.
12
+ - Always adhere to **official ABP documentation** ([docs.abp.io](https://docs.abp.io)) and **Angular official guides**.
13
+ - Prioritize **readability, maintainability, and performance**.
14
+ - Write **idiomatic** and **self-documenting** code.
15
+
16
+ ---
17
+
18
+ ## ⚙️ 2. ABP / .NET Development Rules
19
+
20
+ ### Code Style and Structure
21
+ - Follow ABP’s standard folder structure:
22
+ - `*.Application`, `*.Domain`, `*.EntityFrameworkCore`, `*.HttpApi`
23
+ - Write concise, idiomatic C# code using modern language features.
24
+ - Apply **modular and layered design** (Domain, Application, Infrastructure, UI).
25
+ - Prefer **LINQ** and **lambda expressions** for collection operations.
26
+ - Use **descriptive method and variable names** (`GetActiveUsers`, `CalculateTotalAmount`).
27
+
28
+ ### Naming Conventions
29
+ - **PascalCase** → Classes, Methods, Properties
30
+ - **camelCase** → Local variables and private fields
31
+ - **UPPER_CASE** → Constants
32
+ - Prefix interfaces with **`I`** (e.g., `IUserRepository`).
33
+
34
+ ### C# and .NET Usage
35
+ - Use **C# 10+ features** (records, pattern matching, null-coalescing assignment).
36
+ - Utilize **ABP modules** (Permission Management, Setting Management, Audit Logging).
37
+ - Integrate **Entity Framework Core** with ABP’s repository abstractions.
38
+
39
+ ### Syntax and Formatting
40
+ - Follow [Microsoft C# Coding Conventions](https://learn.microsoft.com/dotnet/csharp/fundamentals/coding-style/coding-conventions).
41
+ - Use `var` when the type is clear.
42
+ - Use `string interpolation` and null-conditional operators.
43
+ - Keep code consistent and well-formatted.
44
+
45
+ ### Error Handling and Validation
46
+ - Use exceptions only for exceptional cases.
47
+ - Log errors via ABP’s built-in logging or a compatible provider.
48
+ - Validate models with **DataAnnotations** or **FluentValidation**.
49
+ - Rely on ABP’s global exception middleware for unified responses.
50
+ - Return consistent HTTP status codes and error DTOs.
51
+
52
+ ### API Design
53
+ - Build RESTful APIs via `HttpApi` layer and **ABP conventional controllers**.
54
+ - Use **attribute-based routing** and versioning when needed.
55
+ - Apply **action filters/middleware** for cross-cutting concerns (auditing, authorization).
56
+
57
+ ### Performance Optimization
58
+ - Use `async/await` for I/O operations.
59
+ - Use `IDistributedCache` over `IMemoryCache`.
60
+ - Avoid N+1 queries — include relations explicitly.
61
+ - Implement pagination with `PagedResultDto`.
62
+
63
+ ### Key Conventions
64
+ - Use **Dependency Injection** via ABP’s DI system.
65
+ - Apply **repository pattern** or EF Core directly as needed.
66
+ - Use **AutoMapper** or ABP object mapping for DTOs.
67
+ - Implement **background jobs** with ABP’s job system or `IHostedService`.
68
+ - Follow **domain-driven design (DDD)** principles:
69
+ - Business rules in Domain layer.
70
+ - Use `AuditedAggregateRoot`, `FullAuditedEntity`, etc.
71
+ - Avoid unnecessary dependencies between layers.
72
+
73
+ ### Testing
74
+ - Use **xUnit**, **Shouldly**, and **NSubstitute** for testing.
75
+ - Write **unit and integration tests** per module (`Application.Tests`, `Domain.Tests`).
76
+ - Mock dependencies properly and use ABP’s test base classes.
77
+
78
+ ### Security
79
+ - Use **OpenIddict** for authentication & authorization.
80
+ - Implement permission checks through ABP’s infrastructure.
81
+ - Enforce **HTTPS** and properly configure **CORS**.
82
+
83
+ ### API Documentation
84
+ - Use **Swagger / OpenAPI** (Swashbuckle or NSwag).
85
+ - Add XML comments to controllers and DTOs.
86
+ - Follow ABP’s documentation conventions for module APIs.
87
+
88
+ **Reference Best Practices:**
89
+ - [Domain Services](https://abp.io/docs/latest/framework/architecture/best-practices/domain-services)
90
+ - [Repositories](https://abp.io/docs/latest/framework/architecture/best-practices/repositories)
91
+ - [Entities](https://abp.io/docs/latest/framework/architecture/best-practices/entities)
92
+ - [Application Services](https://abp.io/docs/latest/framework/architecture/best-practices/application-services)
93
+ - [DTOs](https://abp.io/docs/latest/framework/architecture/best-practices/data-transfer-objects)
94
+ - [Entity Framework Integration](https://abp.io/docs/latest/framework/architecture/best-practices/entity-framework-core-integration)
95
+
96
+ ---
97
+
98
+ ## 🌐 3. Angular / TypeScript Development Rules
99
+
100
+ ### TypeScript Best Practices
101
+ - Enable **strict type checking** in `tsconfig.json`.
102
+ - Use **type inference** when the type is obvious.
103
+ - Avoid `any`; use `unknown` or generics instead.
104
+ - Use interfaces and types for clarity and structure.
105
+
106
+ ### Angular Best Practices
107
+ - Prefer **standalone components** (no `NgModules`).
108
+ - Do **NOT** set `standalone: true` manually — it’s default.
109
+ - Use **signals** for state management.
110
+ - Implement **lazy loading** for feature routes.
111
+ - Avoid `@HostBinding` / `@HostListener`; use `host` object in decorators.
112
+ - Use **`NgOptimizedImage`** for static images (not base64).
113
+
114
+ ### Components
115
+ - Keep components small, focused, and reusable.
116
+ - Use `input()` and `output()` functions instead of decorators.
117
+ - Use `computed()` for derived state.
118
+ - Always set `changeDetection: ChangeDetectionStrategy.OnPush`.
119
+ - Use **inline templates** for small components.
120
+ - Prefer **Reactive Forms** over template-driven forms.
121
+ - Avoid `ngClass` → use `[class]` bindings.
122
+ - Avoid `ngStyle` → use `[style]` bindings.
123
+
124
+ ### State Management
125
+ - Manage **local component state** with signals.
126
+ - Use **`computed()`** for derived data.
127
+ - Keep state transformations **pure and predictable**.
128
+ - Avoid `mutate()` on signals — use `update()` or `set()`.
129
+
130
+ ### Templates
131
+ - Use **native control flow** (`@if`, `@for`, `@switch`) instead of structural directives.
132
+ - Keep templates minimal and declarative.
133
+ - Use the **async pipe** for observable bindings.
134
+
135
+ ### Services
136
+ - Design services for **single responsibility**.
137
+ - Provide services using `providedIn: 'root'`.
138
+ - Use the **`inject()` function** instead of constructor injection.
139
+
140
+ ### Component Replacement
141
+ ABP Angular provides a powerful **component replacement** system via `ReplaceableComponentsService`:
142
+
143
+ **Key Features:**
144
+ - Replace ABP default components (Roles, Users, Tenants, etc.) with custom implementations
145
+ - Replace layouts (Application, Account, Empty)
146
+ - Replace UI elements (Logo, Routes, NavItems)
147
+
148
+ **Basic Usage:**
149
+ ```typescript
150
+ import { ReplaceableComponentsService } from '@abp/ng.core';
151
+ import { eIdentityComponents } from '@abp/ng.identity';
152
+
153
+ constructor(private replaceableComponents: ReplaceableComponentsService) {
154
+ this.replaceableComponents.add({
155
+ component: YourCustomComponent,
156
+ key: eIdentityComponents.Roles,
157
+ });
158
+ }
159
+ ```
160
+
161
+ **Important Notes:**
162
+ - Component templates must include `<router-outlet></router-outlet>` for layouts
163
+ - Use the second parameter as `true` for runtime replacement (refreshes route)
164
+ - Runtime replacement clears component state and re-runs initialization logic
165
+
166
+ **📚 Full Documentation:**
167
+ For detailed examples, layout replacement, and advanced scenarios:
168
+ [Component Replacement Guide](https://abp.io/docs/latest/framework/ui/angular/customization-user-interface)
169
+
170
+ ---
171
+
172
+ ## 🔒 4. Combined Full-Stack Practices
173
+ - Ensure backend and frontend follow consistent **DTO contracts** and **naming conventions**.
174
+ - Maintain shared models (e.g., via a `contracts` package or OpenAPI generation).
175
+ - Version APIs carefully and handle changes in Angular clients.
176
+ - Use ABP’s **CORS**, **Swagger**, and **Identity** modules to simplify frontend integration.
177
+ - Apply **global error handling** and consistent response wrappers in both layers.
178
+ - Monitor performance with tools like **Application Insights**, **ABP auditing**, or **Angular profiler**.
179
+
180
+ ---
181
+
182
+ ## ✅ Summary
183
+ This document defines a unified standard for developing **ABP + Angular full-stack applications**, ensuring:
184
+ - Code is **modular**, **performant**, and **maintainable**.
185
+ - Teams follow **consistent conventions** across backend and frontend.
186
+ - Every layer (Domain, Application, UI) is **clean, testable, and scalable**.
@@ -0,0 +1,186 @@
1
+ # 💻 ABP Full-Stack Development Rules
2
+ _Expert Guidelines for .NET Backend (ABP) and Angular Frontend Development_
3
+
4
+ You are a **senior full-stack developer** specializing in **ABP Framework (.NET)** and **Angular (TypeScript)**.
5
+ You write **clean, maintainable, and modular** code following **ABP, ASP.NET Core, and Angular best practices**.
6
+
7
+ ---
8
+
9
+ ## 🧩 1. General Principles
10
+ - Maintain a clear separation between backend (ABP/.NET) and frontend (Angular) layers.
11
+ - Follow **modular architecture** — each layer or feature should be independently testable and reusable.
12
+ - Always adhere to **official ABP documentation** ([docs.abp.io](https://docs.abp.io)) and **Angular official guides**.
13
+ - Prioritize **readability, maintainability, and performance**.
14
+ - Write **idiomatic** and **self-documenting** code.
15
+
16
+ ---
17
+
18
+ ## ⚙️ 2. ABP / .NET Development Rules
19
+
20
+ ### Code Style and Structure
21
+ - Follow ABP’s standard folder structure:
22
+ - `*.Application`, `*.Domain`, `*.EntityFrameworkCore`, `*.HttpApi`
23
+ - Write concise, idiomatic C# code using modern language features.
24
+ - Apply **modular and layered design** (Domain, Application, Infrastructure, UI).
25
+ - Prefer **LINQ** and **lambda expressions** for collection operations.
26
+ - Use **descriptive method and variable names** (`GetActiveUsers`, `CalculateTotalAmount`).
27
+
28
+ ### Naming Conventions
29
+ - **PascalCase** → Classes, Methods, Properties
30
+ - **camelCase** → Local variables and private fields
31
+ - **UPPER_CASE** → Constants
32
+ - Prefix interfaces with **`I`** (e.g., `IUserRepository`).
33
+
34
+ ### C# and .NET Usage
35
+ - Use **C# 10+ features** (records, pattern matching, null-coalescing assignment).
36
+ - Utilize **ABP modules** (Permission Management, Setting Management, Audit Logging).
37
+ - Integrate **Entity Framework Core** with ABP’s repository abstractions.
38
+
39
+ ### Syntax and Formatting
40
+ - Follow [Microsoft C# Coding Conventions](https://learn.microsoft.com/dotnet/csharp/fundamentals/coding-style/coding-conventions).
41
+ - Use `var` when the type is clear.
42
+ - Use `string interpolation` and null-conditional operators.
43
+ - Keep code consistent and well-formatted.
44
+
45
+ ### Error Handling and Validation
46
+ - Use exceptions only for exceptional cases.
47
+ - Log errors via ABP’s built-in logging or a compatible provider.
48
+ - Validate models with **DataAnnotations** or **FluentValidation**.
49
+ - Rely on ABP’s global exception middleware for unified responses.
50
+ - Return consistent HTTP status codes and error DTOs.
51
+
52
+ ### API Design
53
+ - Build RESTful APIs via `HttpApi` layer and **ABP conventional controllers**.
54
+ - Use **attribute-based routing** and versioning when needed.
55
+ - Apply **action filters/middleware** for cross-cutting concerns (auditing, authorization).
56
+
57
+ ### Performance Optimization
58
+ - Use `async/await` for I/O operations.
59
+ - Use `IDistributedCache` over `IMemoryCache`.
60
+ - Avoid N+1 queries — include relations explicitly.
61
+ - Implement pagination with `PagedResultDto`.
62
+
63
+ ### Key Conventions
64
+ - Use **Dependency Injection** via ABP’s DI system.
65
+ - Apply **repository pattern** or EF Core directly as needed.
66
+ - Use **AutoMapper** or ABP object mapping for DTOs.
67
+ - Implement **background jobs** with ABP’s job system or `IHostedService`.
68
+ - Follow **domain-driven design (DDD)** principles:
69
+ - Business rules in Domain layer.
70
+ - Use `AuditedAggregateRoot`, `FullAuditedEntity`, etc.
71
+ - Avoid unnecessary dependencies between layers.
72
+
73
+ ### Testing
74
+ - Use **xUnit**, **Shouldly**, and **NSubstitute** for testing.
75
+ - Write **unit and integration tests** per module (`Application.Tests`, `Domain.Tests`).
76
+ - Mock dependencies properly and use ABP’s test base classes.
77
+
78
+ ### Security
79
+ - Use **OpenIddict** for authentication & authorization.
80
+ - Implement permission checks through ABP’s infrastructure.
81
+ - Enforce **HTTPS** and properly configure **CORS**.
82
+
83
+ ### API Documentation
84
+ - Use **Swagger / OpenAPI** (Swashbuckle or NSwag).
85
+ - Add XML comments to controllers and DTOs.
86
+ - Follow ABP’s documentation conventions for module APIs.
87
+
88
+ **Reference Best Practices:**
89
+ - [Domain Services](https://abp.io/docs/latest/framework/architecture/best-practices/domain-services)
90
+ - [Repositories](https://abp.io/docs/latest/framework/architecture/best-practices/repositories)
91
+ - [Entities](https://abp.io/docs/latest/framework/architecture/best-practices/entities)
92
+ - [Application Services](https://abp.io/docs/latest/framework/architecture/best-practices/application-services)
93
+ - [DTOs](https://abp.io/docs/latest/framework/architecture/best-practices/data-transfer-objects)
94
+ - [Entity Framework Integration](https://abp.io/docs/latest/framework/architecture/best-practices/entity-framework-core-integration)
95
+
96
+ ---
97
+
98
+ ## 🌐 3. Angular / TypeScript Development Rules
99
+
100
+ ### TypeScript Best Practices
101
+ - Enable **strict type checking** in `tsconfig.json`.
102
+ - Use **type inference** when the type is obvious.
103
+ - Avoid `any`; use `unknown` or generics instead.
104
+ - Use interfaces and types for clarity and structure.
105
+
106
+ ### Angular Best Practices
107
+ - Prefer **standalone components** (no `NgModules`).
108
+ - Do **NOT** set `standalone: true` manually — it’s default.
109
+ - Use **signals** for state management.
110
+ - Implement **lazy loading** for feature routes.
111
+ - Avoid `@HostBinding` / `@HostListener`; use `host` object in decorators.
112
+ - Use **`NgOptimizedImage`** for static images (not base64).
113
+
114
+ ### Components
115
+ - Keep components small, focused, and reusable.
116
+ - Use `input()` and `output()` functions instead of decorators.
117
+ - Use `computed()` for derived state.
118
+ - Always set `changeDetection: ChangeDetectionStrategy.OnPush`.
119
+ - Use **inline templates** for small components.
120
+ - Prefer **Reactive Forms** over template-driven forms.
121
+ - Avoid `ngClass` → use `[class]` bindings.
122
+ - Avoid `ngStyle` → use `[style]` bindings.
123
+
124
+ ### State Management
125
+ - Manage **local component state** with signals.
126
+ - Use **`computed()`** for derived data.
127
+ - Keep state transformations **pure and predictable**.
128
+ - Avoid `mutate()` on signals — use `update()` or `set()`.
129
+
130
+ ### Templates
131
+ - Use **native control flow** (`@if`, `@for`, `@switch`) instead of structural directives.
132
+ - Keep templates minimal and declarative.
133
+ - Use the **async pipe** for observable bindings.
134
+
135
+ ### Services
136
+ - Design services for **single responsibility**.
137
+ - Provide services using `providedIn: 'root'`.
138
+ - Use the **`inject()` function** instead of constructor injection.
139
+
140
+ ### Component Replacement
141
+ ABP Angular provides a powerful **component replacement** system via `ReplaceableComponentsService`:
142
+
143
+ **Key Features:**
144
+ - Replace ABP default components (Roles, Users, Tenants, etc.) with custom implementations
145
+ - Replace layouts (Application, Account, Empty)
146
+ - Replace UI elements (Logo, Routes, NavItems)
147
+
148
+ **Basic Usage:**
149
+ ```typescript
150
+ import { ReplaceableComponentsService } from '@abp/ng.core';
151
+ import { eIdentityComponents } from '@abp/ng.identity';
152
+
153
+ constructor(private replaceableComponents: ReplaceableComponentsService) {
154
+ this.replaceableComponents.add({
155
+ component: YourCustomComponent,
156
+ key: eIdentityComponents.Roles,
157
+ });
158
+ }
159
+ ```
160
+
161
+ **Important Notes:**
162
+ - Component templates must include `<router-outlet></router-outlet>` for layouts
163
+ - Use the second parameter as `true` for runtime replacement (refreshes route)
164
+ - Runtime replacement clears component state and re-runs initialization logic
165
+
166
+ **📚 Full Documentation:**
167
+ For detailed examples, layout replacement, and advanced scenarios:
168
+ [Component Replacement Guide](https://abp.io/docs/latest/framework/ui/angular/customization-user-interface)
169
+
170
+ ---
171
+
172
+ ## 🔒 4. Combined Full-Stack Practices
173
+ - Ensure backend and frontend follow consistent **DTO contracts** and **naming conventions**.
174
+ - Maintain shared models (e.g., via a `contracts` package or OpenAPI generation).
175
+ - Version APIs carefully and handle changes in Angular clients.
176
+ - Use ABP’s **CORS**, **Swagger**, and **Identity** modules to simplify frontend integration.
177
+ - Apply **global error handling** and consistent response wrappers in both layers.
178
+ - Monitor performance with tools like **Application Insights**, **ABP auditing**, or **Angular profiler**.
179
+
180
+ ---
181
+
182
+ ## ✅ Summary
183
+ This document defines a unified standard for developing **ABP + Angular full-stack applications**, ensuring:
184
+ - Code is **modular**, **performant**, and **maintainable**.
185
+ - Teams follow **consistent conventions** across backend and frontend.
186
+ - Every layer (Domain, Application, UI) is **clean, testable, and scalable**.
@@ -0,0 +1,186 @@
1
+ # 💻 ABP Full-Stack Development Rules
2
+ _Expert Guidelines for .NET Backend (ABP) and Angular Frontend Development_
3
+
4
+ You are a **senior full-stack developer** specializing in **ABP Framework (.NET)** and **Angular (TypeScript)**.
5
+ You write **clean, maintainable, and modular** code following **ABP, ASP.NET Core, and Angular best practices**.
6
+
7
+ ---
8
+
9
+ ## 🧩 1. General Principles
10
+ - Maintain a clear separation between backend (ABP/.NET) and frontend (Angular) layers.
11
+ - Follow **modular architecture** — each layer or feature should be independently testable and reusable.
12
+ - Always adhere to **official ABP documentation** ([docs.abp.io](https://docs.abp.io)) and **Angular official guides**.
13
+ - Prioritize **readability, maintainability, and performance**.
14
+ - Write **idiomatic** and **self-documenting** code.
15
+
16
+ ---
17
+
18
+ ## ⚙️ 2. ABP / .NET Development Rules
19
+
20
+ ### Code Style and Structure
21
+ - Follow ABP’s standard folder structure:
22
+ - `*.Application`, `*.Domain`, `*.EntityFrameworkCore`, `*.HttpApi`
23
+ - Write concise, idiomatic C# code using modern language features.
24
+ - Apply **modular and layered design** (Domain, Application, Infrastructure, UI).
25
+ - Prefer **LINQ** and **lambda expressions** for collection operations.
26
+ - Use **descriptive method and variable names** (`GetActiveUsers`, `CalculateTotalAmount`).
27
+
28
+ ### Naming Conventions
29
+ - **PascalCase** → Classes, Methods, Properties
30
+ - **camelCase** → Local variables and private fields
31
+ - **UPPER_CASE** → Constants
32
+ - Prefix interfaces with **`I`** (e.g., `IUserRepository`).
33
+
34
+ ### C# and .NET Usage
35
+ - Use **C# 10+ features** (records, pattern matching, null-coalescing assignment).
36
+ - Utilize **ABP modules** (Permission Management, Setting Management, Audit Logging).
37
+ - Integrate **Entity Framework Core** with ABP’s repository abstractions.
38
+
39
+ ### Syntax and Formatting
40
+ - Follow [Microsoft C# Coding Conventions](https://learn.microsoft.com/dotnet/csharp/fundamentals/coding-style/coding-conventions).
41
+ - Use `var` when the type is clear.
42
+ - Use `string interpolation` and null-conditional operators.
43
+ - Keep code consistent and well-formatted.
44
+
45
+ ### Error Handling and Validation
46
+ - Use exceptions only for exceptional cases.
47
+ - Log errors via ABP’s built-in logging or a compatible provider.
48
+ - Validate models with **DataAnnotations** or **FluentValidation**.
49
+ - Rely on ABP’s global exception middleware for unified responses.
50
+ - Return consistent HTTP status codes and error DTOs.
51
+
52
+ ### API Design
53
+ - Build RESTful APIs via `HttpApi` layer and **ABP conventional controllers**.
54
+ - Use **attribute-based routing** and versioning when needed.
55
+ - Apply **action filters/middleware** for cross-cutting concerns (auditing, authorization).
56
+
57
+ ### Performance Optimization
58
+ - Use `async/await` for I/O operations.
59
+ - Use `IDistributedCache` over `IMemoryCache`.
60
+ - Avoid N+1 queries — include relations explicitly.
61
+ - Implement pagination with `PagedResultDto`.
62
+
63
+ ### Key Conventions
64
+ - Use **Dependency Injection** via ABP’s DI system.
65
+ - Apply **repository pattern** or EF Core directly as needed.
66
+ - Use **AutoMapper** or ABP object mapping for DTOs.
67
+ - Implement **background jobs** with ABP’s job system or `IHostedService`.
68
+ - Follow **domain-driven design (DDD)** principles:
69
+ - Business rules in Domain layer.
70
+ - Use `AuditedAggregateRoot`, `FullAuditedEntity`, etc.
71
+ - Avoid unnecessary dependencies between layers.
72
+
73
+ ### Testing
74
+ - Use **xUnit**, **Shouldly**, and **NSubstitute** for testing.
75
+ - Write **unit and integration tests** per module (`Application.Tests`, `Domain.Tests`).
76
+ - Mock dependencies properly and use ABP’s test base classes.
77
+
78
+ ### Security
79
+ - Use **OpenIddict** for authentication & authorization.
80
+ - Implement permission checks through ABP’s infrastructure.
81
+ - Enforce **HTTPS** and properly configure **CORS**.
82
+
83
+ ### API Documentation
84
+ - Use **Swagger / OpenAPI** (Swashbuckle or NSwag).
85
+ - Add XML comments to controllers and DTOs.
86
+ - Follow ABP’s documentation conventions for module APIs.
87
+
88
+ **Reference Best Practices:**
89
+ - [Domain Services](https://abp.io/docs/latest/framework/architecture/best-practices/domain-services)
90
+ - [Repositories](https://abp.io/docs/latest/framework/architecture/best-practices/repositories)
91
+ - [Entities](https://abp.io/docs/latest/framework/architecture/best-practices/entities)
92
+ - [Application Services](https://abp.io/docs/latest/framework/architecture/best-practices/application-services)
93
+ - [DTOs](https://abp.io/docs/latest/framework/architecture/best-practices/data-transfer-objects)
94
+ - [Entity Framework Integration](https://abp.io/docs/latest/framework/architecture/best-practices/entity-framework-core-integration)
95
+
96
+ ---
97
+
98
+ ## 🌐 3. Angular / TypeScript Development Rules
99
+
100
+ ### TypeScript Best Practices
101
+ - Enable **strict type checking** in `tsconfig.json`.
102
+ - Use **type inference** when the type is obvious.
103
+ - Avoid `any`; use `unknown` or generics instead.
104
+ - Use interfaces and types for clarity and structure.
105
+
106
+ ### Angular Best Practices
107
+ - Prefer **standalone components** (no `NgModules`).
108
+ - Do **NOT** set `standalone: true` manually — it’s default.
109
+ - Use **signals** for state management.
110
+ - Implement **lazy loading** for feature routes.
111
+ - Avoid `@HostBinding` / `@HostListener`; use `host` object in decorators.
112
+ - Use **`NgOptimizedImage`** for static images (not base64).
113
+
114
+ ### Components
115
+ - Keep components small, focused, and reusable.
116
+ - Use `input()` and `output()` functions instead of decorators.
117
+ - Use `computed()` for derived state.
118
+ - Always set `changeDetection: ChangeDetectionStrategy.OnPush`.
119
+ - Use **inline templates** for small components.
120
+ - Prefer **Reactive Forms** over template-driven forms.
121
+ - Avoid `ngClass` → use `[class]` bindings.
122
+ - Avoid `ngStyle` → use `[style]` bindings.
123
+
124
+ ### State Management
125
+ - Manage **local component state** with signals.
126
+ - Use **`computed()`** for derived data.
127
+ - Keep state transformations **pure and predictable**.
128
+ - Avoid `mutate()` on signals — use `update()` or `set()`.
129
+
130
+ ### Templates
131
+ - Use **native control flow** (`@if`, `@for`, `@switch`) instead of structural directives.
132
+ - Keep templates minimal and declarative.
133
+ - Use the **async pipe** for observable bindings.
134
+
135
+ ### Services
136
+ - Design services for **single responsibility**.
137
+ - Provide services using `providedIn: 'root'`.
138
+ - Use the **`inject()` function** instead of constructor injection.
139
+
140
+ ### Component Replacement
141
+ ABP Angular provides a powerful **component replacement** system via `ReplaceableComponentsService`:
142
+
143
+ **Key Features:**
144
+ - Replace ABP default components (Roles, Users, Tenants, etc.) with custom implementations
145
+ - Replace layouts (Application, Account, Empty)
146
+ - Replace UI elements (Logo, Routes, NavItems)
147
+
148
+ **Basic Usage:**
149
+ ```typescript
150
+ import { ReplaceableComponentsService } from '@abp/ng.core';
151
+ import { eIdentityComponents } from '@abp/ng.identity';
152
+
153
+ constructor(private replaceableComponents: ReplaceableComponentsService) {
154
+ this.replaceableComponents.add({
155
+ component: YourCustomComponent,
156
+ key: eIdentityComponents.Roles,
157
+ });
158
+ }
159
+ ```
160
+
161
+ **Important Notes:**
162
+ - Component templates must include `<router-outlet></router-outlet>` for layouts
163
+ - Use the second parameter as `true` for runtime replacement (refreshes route)
164
+ - Runtime replacement clears component state and re-runs initialization logic
165
+
166
+ **📚 Full Documentation:**
167
+ For detailed examples, layout replacement, and advanced scenarios:
168
+ [Component Replacement Guide](https://abp.io/docs/latest/framework/ui/angular/customization-user-interface)
169
+
170
+ ---
171
+
172
+ ## 🔒 4. Combined Full-Stack Practices
173
+ - Ensure backend and frontend follow consistent **DTO contracts** and **naming conventions**.
174
+ - Maintain shared models (e.g., via a `contracts` package or OpenAPI generation).
175
+ - Version APIs carefully and handle changes in Angular clients.
176
+ - Use ABP’s **CORS**, **Swagger**, and **Identity** modules to simplify frontend integration.
177
+ - Apply **global error handling** and consistent response wrappers in both layers.
178
+ - Monitor performance with tools like **Application Insights**, **ABP auditing**, or **Angular profiler**.
179
+
180
+ ---
181
+
182
+ ## ✅ Summary
183
+ This document defines a unified standard for developing **ABP + Angular full-stack applications**, ensuring:
184
+ - Code is **modular**, **performant**, and **maintainable**.
185
+ - Teams follow **consistent conventions** across backend and frontend.
186
+ - Every layer (Domain, Application, UI) is **clean, testable, and scalable**.
@@ -0,0 +1,186 @@
1
+ # 💻 ABP Full-Stack Development Rules
2
+ _Expert Guidelines for .NET Backend (ABP) and Angular Frontend Development_
3
+
4
+ You are a **senior full-stack developer** specializing in **ABP Framework (.NET)** and **Angular (TypeScript)**.
5
+ You write **clean, maintainable, and modular** code following **ABP, ASP.NET Core, and Angular best practices**.
6
+
7
+ ---
8
+
9
+ ## 🧩 1. General Principles
10
+ - Maintain a clear separation between backend (ABP/.NET) and frontend (Angular) layers.
11
+ - Follow **modular architecture** — each layer or feature should be independently testable and reusable.
12
+ - Always adhere to **official ABP documentation** ([docs.abp.io](https://docs.abp.io)) and **Angular official guides**.
13
+ - Prioritize **readability, maintainability, and performance**.
14
+ - Write **idiomatic** and **self-documenting** code.
15
+
16
+ ---
17
+
18
+ ## ⚙️ 2. ABP / .NET Development Rules
19
+
20
+ ### Code Style and Structure
21
+ - Follow ABP’s standard folder structure:
22
+ - `*.Application`, `*.Domain`, `*.EntityFrameworkCore`, `*.HttpApi`
23
+ - Write concise, idiomatic C# code using modern language features.
24
+ - Apply **modular and layered design** (Domain, Application, Infrastructure, UI).
25
+ - Prefer **LINQ** and **lambda expressions** for collection operations.
26
+ - Use **descriptive method and variable names** (`GetActiveUsers`, `CalculateTotalAmount`).
27
+
28
+ ### Naming Conventions
29
+ - **PascalCase** → Classes, Methods, Properties
30
+ - **camelCase** → Local variables and private fields
31
+ - **UPPER_CASE** → Constants
32
+ - Prefix interfaces with **`I`** (e.g., `IUserRepository`).
33
+
34
+ ### C# and .NET Usage
35
+ - Use **C# 10+ features** (records, pattern matching, null-coalescing assignment).
36
+ - Utilize **ABP modules** (Permission Management, Setting Management, Audit Logging).
37
+ - Integrate **Entity Framework Core** with ABP’s repository abstractions.
38
+
39
+ ### Syntax and Formatting
40
+ - Follow [Microsoft C# Coding Conventions](https://learn.microsoft.com/dotnet/csharp/fundamentals/coding-style/coding-conventions).
41
+ - Use `var` when the type is clear.
42
+ - Use `string interpolation` and null-conditional operators.
43
+ - Keep code consistent and well-formatted.
44
+
45
+ ### Error Handling and Validation
46
+ - Use exceptions only for exceptional cases.
47
+ - Log errors via ABP’s built-in logging or a compatible provider.
48
+ - Validate models with **DataAnnotations** or **FluentValidation**.
49
+ - Rely on ABP’s global exception middleware for unified responses.
50
+ - Return consistent HTTP status codes and error DTOs.
51
+
52
+ ### API Design
53
+ - Build RESTful APIs via `HttpApi` layer and **ABP conventional controllers**.
54
+ - Use **attribute-based routing** and versioning when needed.
55
+ - Apply **action filters/middleware** for cross-cutting concerns (auditing, authorization).
56
+
57
+ ### Performance Optimization
58
+ - Use `async/await` for I/O operations.
59
+ - Use `IDistributedCache` over `IMemoryCache`.
60
+ - Avoid N+1 queries — include relations explicitly.
61
+ - Implement pagination with `PagedResultDto`.
62
+
63
+ ### Key Conventions
64
+ - Use **Dependency Injection** via ABP’s DI system.
65
+ - Apply **repository pattern** or EF Core directly as needed.
66
+ - Use **AutoMapper** or ABP object mapping for DTOs.
67
+ - Implement **background jobs** with ABP’s job system or `IHostedService`.
68
+ - Follow **domain-driven design (DDD)** principles:
69
+ - Business rules in Domain layer.
70
+ - Use `AuditedAggregateRoot`, `FullAuditedEntity`, etc.
71
+ - Avoid unnecessary dependencies between layers.
72
+
73
+ ### Testing
74
+ - Use **xUnit**, **Shouldly**, and **NSubstitute** for testing.
75
+ - Write **unit and integration tests** per module (`Application.Tests`, `Domain.Tests`).
76
+ - Mock dependencies properly and use ABP’s test base classes.
77
+
78
+ ### Security
79
+ - Use **OpenIddict** for authentication & authorization.
80
+ - Implement permission checks through ABP’s infrastructure.
81
+ - Enforce **HTTPS** and properly configure **CORS**.
82
+
83
+ ### API Documentation
84
+ - Use **Swagger / OpenAPI** (Swashbuckle or NSwag).
85
+ - Add XML comments to controllers and DTOs.
86
+ - Follow ABP’s documentation conventions for module APIs.
87
+
88
+ **Reference Best Practices:**
89
+ - [Domain Services](https://abp.io/docs/latest/framework/architecture/best-practices/domain-services)
90
+ - [Repositories](https://abp.io/docs/latest/framework/architecture/best-practices/repositories)
91
+ - [Entities](https://abp.io/docs/latest/framework/architecture/best-practices/entities)
92
+ - [Application Services](https://abp.io/docs/latest/framework/architecture/best-practices/application-services)
93
+ - [DTOs](https://abp.io/docs/latest/framework/architecture/best-practices/data-transfer-objects)
94
+ - [Entity Framework Integration](https://abp.io/docs/latest/framework/architecture/best-practices/entity-framework-core-integration)
95
+
96
+ ---
97
+
98
+ ## 🌐 3. Angular / TypeScript Development Rules
99
+
100
+ ### TypeScript Best Practices
101
+ - Enable **strict type checking** in `tsconfig.json`.
102
+ - Use **type inference** when the type is obvious.
103
+ - Avoid `any`; use `unknown` or generics instead.
104
+ - Use interfaces and types for clarity and structure.
105
+
106
+ ### Angular Best Practices
107
+ - Prefer **standalone components** (no `NgModules`).
108
+ - Do **NOT** set `standalone: true` manually — it’s default.
109
+ - Use **signals** for state management.
110
+ - Implement **lazy loading** for feature routes.
111
+ - Avoid `@HostBinding` / `@HostListener`; use `host` object in decorators.
112
+ - Use **`NgOptimizedImage`** for static images (not base64).
113
+
114
+ ### Components
115
+ - Keep components small, focused, and reusable.
116
+ - Use `input()` and `output()` functions instead of decorators.
117
+ - Use `computed()` for derived state.
118
+ - Always set `changeDetection: ChangeDetectionStrategy.OnPush`.
119
+ - Use **inline templates** for small components.
120
+ - Prefer **Reactive Forms** over template-driven forms.
121
+ - Avoid `ngClass` → use `[class]` bindings.
122
+ - Avoid `ngStyle` → use `[style]` bindings.
123
+
124
+ ### State Management
125
+ - Manage **local component state** with signals.
126
+ - Use **`computed()`** for derived data.
127
+ - Keep state transformations **pure and predictable**.
128
+ - Avoid `mutate()` on signals — use `update()` or `set()`.
129
+
130
+ ### Templates
131
+ - Use **native control flow** (`@if`, `@for`, `@switch`) instead of structural directives.
132
+ - Keep templates minimal and declarative.
133
+ - Use the **async pipe** for observable bindings.
134
+
135
+ ### Services
136
+ - Design services for **single responsibility**.
137
+ - Provide services using `providedIn: 'root'`.
138
+ - Use the **`inject()` function** instead of constructor injection.
139
+
140
+ ### Component Replacement
141
+ ABP Angular provides a powerful **component replacement** system via `ReplaceableComponentsService`:
142
+
143
+ **Key Features:**
144
+ - Replace ABP default components (Roles, Users, Tenants, etc.) with custom implementations
145
+ - Replace layouts (Application, Account, Empty)
146
+ - Replace UI elements (Logo, Routes, NavItems)
147
+
148
+ **Basic Usage:**
149
+ ```typescript
150
+ import { ReplaceableComponentsService } from '@abp/ng.core';
151
+ import { eIdentityComponents } from '@abp/ng.identity';
152
+
153
+ constructor(private replaceableComponents: ReplaceableComponentsService) {
154
+ this.replaceableComponents.add({
155
+ component: YourCustomComponent,
156
+ key: eIdentityComponents.Roles,
157
+ });
158
+ }
159
+ ```
160
+
161
+ **Important Notes:**
162
+ - Component templates must include `<router-outlet></router-outlet>` for layouts
163
+ - Use the second parameter as `true` for runtime replacement (refreshes route)
164
+ - Runtime replacement clears component state and re-runs initialization logic
165
+
166
+ **📚 Full Documentation:**
167
+ For detailed examples, layout replacement, and advanced scenarios:
168
+ [Component Replacement Guide](https://abp.io/docs/latest/framework/ui/angular/customization-user-interface)
169
+
170
+ ---
171
+
172
+ ## 🔒 4. Combined Full-Stack Practices
173
+ - Ensure backend and frontend follow consistent **DTO contracts** and **naming conventions**.
174
+ - Maintain shared models (e.g., via a `contracts` package or OpenAPI generation).
175
+ - Version APIs carefully and handle changes in Angular clients.
176
+ - Use ABP’s **CORS**, **Swagger**, and **Identity** modules to simplify frontend integration.
177
+ - Apply **global error handling** and consistent response wrappers in both layers.
178
+ - Monitor performance with tools like **Application Insights**, **ABP auditing**, or **Angular profiler**.
179
+
180
+ ---
181
+
182
+ ## ✅ Summary
183
+ This document defines a unified standard for developing **ABP + Angular full-stack applications**, ensuring:
184
+ - Code is **modular**, **performant**, and **maintainable**.
185
+ - Teams follow **consistent conventions** across backend and frontend.
186
+ - Every layer (Domain, Application, UI) is **clean, testable, and scalable**.
@@ -0,0 +1,3 @@
1
+ import { Rule } from '@angular-devkit/schematics';
2
+ import { AiConfigSchema } from './model';
3
+ export default function (options: AiConfigSchema): Rule;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const schematics_1 = require("@angular-devkit/schematics");
4
+ const core_1 = require("@angular-devkit/core");
5
+ const utils_1 = require("../../utils");
6
+ function default_1(options) {
7
+ return async (tree) => {
8
+ if (!options.tool || options.tool.trim() === '') {
9
+ console.log('ℹ️ No AI tools selected. Skipping configuration generation.');
10
+ console.log('');
11
+ console.log('💡 Usage examples:');
12
+ console.log(' ng g @abp/ng.schematics:ai-config --tool=claude,cursor');
13
+ console.log(' ng g @abp/ng.schematics:ai-config --tool="claude, cursor"');
14
+ console.log(' ng g @abp/ng.schematics:ai-config --tool=gemini --tool=cursor');
15
+ console.log(' ng g @abp/ng.schematics:ai-config --tool=gemini --target-project=my-app');
16
+ console.log('');
17
+ console.log('Available tools: claude, copilot, cursor, gemini, junie, windsurf');
18
+ return tree;
19
+ }
20
+ const tools = options.tool.split(/[\s,]+/).filter(t => t);
21
+ const validTools = ['claude', 'copilot', 'cursor', 'gemini', 'junie', 'windsurf'];
22
+ const invalidTools = tools.filter(tool => !validTools.includes(tool));
23
+ if (invalidTools.length > 0) {
24
+ throw new schematics_1.SchematicsException(`Invalid AI tool(s): ${invalidTools.join(', ')}. Valid options are: ${validTools.join(', ')}`);
25
+ }
26
+ if (tools.length === 0) {
27
+ console.log('ℹ️ No AI tools selected. Skipping configuration generation.');
28
+ return tree;
29
+ }
30
+ const workspace = await (0, utils_1.getWorkspace)(tree);
31
+ let targetPath = '/';
32
+ if (options.targetProject) {
33
+ const trimmedTargetProject = options.targetProject.trim();
34
+ const project = workspace.projects.get(trimmedTargetProject);
35
+ if (!project) {
36
+ throw new schematics_1.SchematicsException(`Project "${trimmedTargetProject}" not found in workspace.`);
37
+ }
38
+ targetPath = (0, core_1.normalize)(project.root);
39
+ }
40
+ console.log('🚀 Generating AI configuration files...');
41
+ console.log(`📁 Target path: ${targetPath}`);
42
+ console.log(`🤖 Selected tools: ${tools.join(', ')}`);
43
+ const rules = tools.map(tool => generateConfigForTool(tool, targetPath, options.overwrite || false));
44
+ return (0, schematics_1.chain)([
45
+ ...rules,
46
+ (tree) => {
47
+ console.log('✅ AI configuration files generated successfully!');
48
+ console.log('\n📝 Generated files:');
49
+ tools.forEach(tool => {
50
+ const configPath = getConfigPath(tool, targetPath);
51
+ console.log(` - ${configPath}`);
52
+ });
53
+ console.log('\n💡 Tip: Restart your IDE or AI tool to apply the new configurations.');
54
+ return tree;
55
+ },
56
+ ]);
57
+ };
58
+ }
59
+ exports.default = default_1;
60
+ function generateConfigForTool(tool, targetPath, overwrite) {
61
+ return (tree) => {
62
+ const configPath = getConfigPath(tool, targetPath);
63
+ if (tree.exists(configPath) && !overwrite) {
64
+ console.log(`⚠️ Configuration file already exists: ${configPath}`);
65
+ console.log(` Use --overwrite flag to replace existing files.`);
66
+ return tree;
67
+ }
68
+ const sourceDir = `./files/${tool}`;
69
+ const source = (0, schematics_1.apply)((0, schematics_1.url)(sourceDir), [
70
+ (0, schematics_1.filter)(path => {
71
+ return !path.endsWith('.DS_Store');
72
+ }),
73
+ ]);
74
+ return (0, schematics_1.mergeWith)(source, overwrite ? schematics_1.MergeStrategy.Overwrite : schematics_1.MergeStrategy.Default);
75
+ };
76
+ }
77
+ function getConfigPath(tool, basePath) {
78
+ const configFiles = {
79
+ claude: '.claude/CLAUDE.md',
80
+ copilot: '.github/copilot-instructions.md',
81
+ cursor: '.cursor/rules/cursor.mdc',
82
+ gemini: '.gemini/GEMINI.md',
83
+ junie: '.junie/guidelines.md',
84
+ windsurf: '.windsurf/rules/guidelines.md',
85
+ };
86
+ const configFile = configFiles[tool];
87
+ return (0, core_1.join)((0, core_1.normalize)(basePath), configFile);
88
+ }
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/schematics/src/commands/ai-config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare type AiTool = 'claude' | 'copilot' | 'cursor' | 'gemini' | 'junie' | 'windsurf';
2
+ export interface AiConfigSchema {
3
+ tool?: string;
4
+ targetProject?: string;
5
+ overwrite?: boolean;
6
+ }
7
+ export interface AiConfigFile {
8
+ path: string;
9
+ content: string;
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../packages/schematics/src/commands/ai-config/model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "SchematicsABPAiConfig",
4
+ "title": "ABP AI Configuration Generator Schema",
5
+ "type": "object",
6
+ "properties": {
7
+ "tool": {
8
+ "description": "Comma-separated list of AI tools (e.g., claude,cursor,gemini)",
9
+ "type": "string",
10
+ "x-prompt": {
11
+ "message": "Which AI tools would you like to generate configuration files for? (comma-separated)",
12
+ "type": "input"
13
+ }
14
+ },
15
+ "targetProject": {
16
+ "description": "The target project name to generate AI configuration files for",
17
+ "type": "string",
18
+ "x-prompt": {
19
+ "message": "Which project would you like to generate AI config for?",
20
+ "type": "input"
21
+ }
22
+ },
23
+ "overwrite": {
24
+ "description": "Overwrite existing AI configuration files",
25
+ "type": "boolean",
26
+ "default": false
27
+ }
28
+ },
29
+ "required": []
30
+ }
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@abp/ng.schematics",
3
- "version": "10.0.2",
3
+ "version": "10.1.0-rc.1",
4
4
  "author": "",
5
5
  "schematics": "./collection.json",
6
6
  "dependencies": {
7
- "@angular-devkit/core": "~20.0.0",
8
- "@angular-devkit/schematics": "~20.0.0",
9
- "@angular/cli": "~20.0.0",
7
+ "@angular-devkit/core": "~21.0.0",
8
+ "@angular-devkit/schematics": "~21.0.0",
9
+ "@angular/cli": "~21.0.0",
10
10
  "got": "^11.5.2",
11
11
  "jsonc-parser": "^2.3.0",
12
12
  "should-quote": "^1.0.0",
13
- "typescript": "~5.8.0"
13
+ "typescript": "~5.9.0"
14
14
  },
15
15
  "devDependencies": {
16
- "@schematics/angular": "~20.0.0",
16
+ "@schematics/angular": "~21.0.0",
17
17
  "@types/jest": "29.4.4",
18
18
  "@types/node": "20.2.5",
19
19
  "jest": "29.4.3",