From 57ac80a66608d23b36f9e21259863680dcabd0a3 Mon Sep 17 00:00:00 2001 From: Te amo Date: Thu, 26 Feb 2026 14:03:46 +0700 Subject: [PATCH] first commit --- README.md | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..459268e --- /dev/null +++ b/README.md @@ -0,0 +1,140 @@ +# 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