A Laravel-based API project built with Domain-Driven Design and Clean Architecture principles.
Designed for modularity, testability, and long-term maintainability.
This project follows a layered Clean Architecture:
- Presentation Layer: Controllers, ViewModels
- Application Layer: UseCases, Commands, DTOs, QueryServiceInterfaces
- Domain Layer: Entities, Value Objects, RepositoryInterfaces
- Infrastructure Layer: Eloquent Repositories, QueryServices
- Controller constructs a Command object from request input.
- The Command is passed to a UseCase.
- UseCase invokes domain logic and persists data via a Repository.
- Resulting Entity is mapped to a DTO.
- The DTO is passed to a ViewModel and returned as a JsonResponse.
- PHP 8.x / Laravel 10.x
- MySQL or PostgreSQL
- PHPUnit (Unit/Feature testing)
- Laravel Scout + Elasticsearch (optional)
app/
└── Posts/
├── Application/
│ ├── ApplicationTests/
│ ├── UseCases/
│ ├── UseCommands/
│ ├── Dtos/
│ └── QueryServiceInterface/
├── Domain/
│ ├── DomainTests/
│ ├── Entities/
│ ├── ValueObjects/
│ └── RepositoryInterfaces/
├── Infrastructure/
│ ├── InfrastructureTests/
│ ├── Repositories/
│ └── QueryServices/
└── Presentation/
├── Controllers/
├── PresentationTests/
└── ViewModels/
└── Users/
├── Application/
│ ├── ApplicationTests/
│ ├── UseCases/
│ ├── UseCommands/
│ ├── Dtos/
│ └── QueryServiceInterface/
├── Domain/
│ ├── DomainTests/
│ ├── Entities/
│ ├── ValueObjects/
│ └── RepositoryInterfaces/
├── Infrastructure/
│ ├── InfrastructureTests/
│ ├── Repositories/
│ └── QueryServices/
└── Presentation/
├── Controllers/
├── PresentationTests/
└── ViewModels/