# MyNewProjectName - Clean Architecture Template A Clean Architecture template for .NET 9 applications. ## 📁 Project Structure ``` ├── MyNewProjectName.Domain # Enterprise Business Rules (Entities, Value Objects, Domain Events) ├── MyNewProjectName.Application # Application Business Rules (Use Cases, CQRS, Validators) ├── MyNewProjectName.Contracts # DTOs for external communication (Requests, Responses) ├── MyNewProjectName.Infrastructure # External concerns (Database, Identity, Services) ├── MyNewProjectName.WebAPI # Web API presentation layer ├── MyNewProjectName.AdminAPI # Admin API presentation layer └── MyNewProjectName.UnitTest # Unit tests ``` ## 🏗️ Architecture This template follows **Clean Architecture** principles: ``` ┌─────────────────────────────────────────────────────────┐ │ Presentation Layer (WebAPI, AdminAPI) │ ├─────────────────────────────────────────────────────────┤ │ Infrastructure Layer (EF Core, Identity, Services) │ ├─────────────────────────────────────────────────────────┤ │ Application Layer (MediatR, AutoMapper, Validators) │ ├─────────────────────────────────────────────────────────┤ │ Domain Layer (Entities, ValueObjects, Interfaces) │ └─────────────────────────────────────────────────────────┘ ``` ### Dependency Rule - Inner layers know nothing about outer layers - Dependencies point inward ## 🚀 Getting Started ### Prerequisites - .NET 9 SDK - SQL Server (or modify connection string for other databases) ### Setup 1. **Clone and rename the template** ```bash # Clone the repository git clone MyNewProject cd MyNewProject # Run the rename script ./rename-project.sh MyNewProject ``` 2. **Update connection string** Edit `appsettings.json` in WebAPI/AdminAPI projects: ```json { "ConnectionStrings": { "DefaultConnection": "Your-Connection-String" } } ``` 3. **Run migrations** ```bash cd MyNewProjectName.Infrastructure dotnet ef migrations add InitialCreate --startup-project ../MyNewProjectName.WebAPI dotnet ef database update --startup-project ../MyNewProjectName.WebAPI ``` 4. **Run the application** ```bash dotnet run --project MyNewProjectName.WebAPI ``` ## NuGet Packages ### Application Layer - **MediatR** - CQRS pattern implementation - **AutoMapper** - Object-to-object mapping - **FluentValidation** - Validation rules ### Infrastructure Layer - **Entity Framework Core** - ORM - **Microsoft.AspNetCore.Identity** - Authentication/Authorization ## 🔧 Key Features - Clean Architecture structure - CQRS with MediatR - Validation pipeline with FluentValidation - Logging pipeline behavior - Global exception handling - Generic Repository pattern - Unit of Work pattern - AutoMapper integration - Multi-API support (WebAPI + AdminAPI) - Auditable entities - Soft delete support - Domain events support ## 📝 Usage Examples ### Creating a new Feature 1. **Add Entity** in `Domain/Entities/` 2. **Add Repository Interface** in `Domain/Interfaces/` 3. **Add Command/Query** in `Application/Features/{FeatureName}/` 4. **Add DTO** in `Contracts/DTOs/` 5. **Add Controller** in `WebAPI/Controllers/` ### Sample CQRS Structure ``` Application/Features/Sample/ ├── Commands/ │ └── CreateSample/ │ ├── CreateSampleCommand.cs │ ├── CreateSampleCommandHandler.cs │ └── CreateSampleCommandValidator.cs └── Queries/ └── GetSamples/ ├── GetSamplesQuery.cs ├── GetSamplesQueryHandler.cs └── SampleDto.cs ``` ## 🔄 Renaming the Project Use the provided script to rename all occurrences of `MyNewProjectName`: ```bash ./rename-project.sh NewProjectName ``` ## 📄 License MIT License