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/