Clone
1
Introduction
blas edited this page 2026-03-24 07:47:39 +00:00

🏗️ 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 <repo-url>

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.