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/