commit 088b08bb5d626bc92e576ffde4adc54660f2c8b1 Author: blas Date: Tue Mar 24 07:47:39 2026 +0000 Añadir Introduction diff --git a/Introduction.md b/Introduction.md new file mode 100644 index 0000000..c1f9aed --- /dev/null +++ b/Introduction.md @@ -0,0 +1,102 @@ +🏗️ OpenAPI Clean Architecture Generator | Contributor Wiki +=========================================================== + +Welcome to the internal development wiki. This project is designed to bridge the gap between OpenAPI specifications and Clean Architecture in Angular environments. As a contributor, your mission is to maintain the generator's core logic, refine Mustache templates, and ensure the generated code adheres to strict architectural boundaries. + +* * * * * + +🎯 Project Mission +------------------ + +To provide an opinionated yet flexible generator that enforces **Separation of Concerns**. We aim to make Angular applications easier to test and scale by completely decoupling the **Domain** (Business Logic) from the **Data** (Infrastructure/HTTP). + +* * * * * + +🛠️ Contributor Quick Start +--------------------------- + +If you are looking to modify the generator or add new features, follow these steps: + +1\. Development Environment +--------------------------- + +Clone the repository and install the core toolset: + +`git clone ` + +`npm install` + +`npm run setup` *(Validates openapi-generator-cli and local environment)* + +2\. Project Structure +--------------------- + +Understanding where to apply changes: + +- **`templates/`**: The core engine. Contains `.mustache` files that define how the Angular code is written. + +3\. Testing Changes +------------------- + +To test template modifications without polluting your project, always use the development script with a sample schema: + +`npm run generate:dev -- -i swagger.yaml --dry-run` + +* * * * * + +📂 Architecture Overview (The "Clean" Blueprint) +------------------------------------------------ + +All contributions must respect the following layer boundaries to prevent circular dependencies: + +| **Layer** | **Responsibility** | **Contributor Focus** | +| --- | --- | --- | +| **Domain** | Business Logic | Ensure interfaces and use-cases remain framework-agnostic. | +| **Data** | Infrastructure | Maintain DTO-to-Entity mapping logic and API implementations. | +| **DI** | Dependency Injection | Keep Angular `InjectionToken` and `Provider` logic up to date (e.g., `inject()`). | +| **Entities** | Models | Manage the core domain models used across the entire app. | + +* * * * * + +🔧 Core Areas for Contribution +------------------------------ + +📄 Template Engineering (`/templates`) +-------------------------------------- + +This is where 90% of the logic lives. If we need to support new Angular features (like **Signals** or **Standalone Components**), we update these Mustache files. + +- **`api.repository.impl.mustache`**: Handles the HTTP layer logic. + +- **`mapper.mustache`**: Ensures Data Transfer Objects (DTOs) are correctly converted to Domain Entities. + +⚙️ CLI Orchestration +-------------------- + +The internal engine reads the OpenAPI output and distributes files into the Clean Architecture folders. We are constantly looking to optimize the `generation-report.json` and improve the CLI's developer experience (DX). + +* * * * * + +📜 Development Guidelines +------------------------- + +1. **Strict Typing**: Any logic added to the generator must be fully typed in TypeScript. + +2. **Framework Alignment**: Ensure generated code follows the latest Angular style guides (Angular 17+ focus). + +3. **No Logic in Templates**: Keep `.mustache` files as declarative as possible. Move complex logic to the generator's TS source. + +4. **Dry-Run Verification**: Never submit a PR without verifying the generated output folder structure. + +* * * * * + +🐛 Reporting & Feedback +----------------------- + +- **Bug in Generated Code**: Provide the specific `swagger.yaml` snippet that causes the issue. + +- **Feature Request**: Describe the desired Clean Architecture folder structure and provide an example of the expected `.ts` output. + +* * * * * + +> 💡 **Contributor Note**: This tool assumes the consumer uses the `inject()` function. Avoid adding traditional constructor-based DI to the templates unless explicitly required for backward compatibility. \ No newline at end of file