- APIs should follow REST style
- Controllers should follow CRUDy or Invokable style
- CRUDy controllers should use Service classes
- Invokable controllers should use Action classes
- Complex queries should be moved to Query classes to be used inside Service or Action classes
- Controllers should talk to Service/Action classes through Data Objects (DTO)
- Request classes should map input to DTOs
- Rules above must be monitored by CI pipelines using PestPHP Architecture Tests
App/Http/Controllers/{Group}{Group}CrudController(index,show,store,update,destroy){Group}ListExportController(__invoke)
App/Http/Requests/{Group}App/Actions/{Group}App/DTOs/{Group}App/Queries/{Group}App/Services/{Group}