Se seguirán las convenciones y estructuras por defecto de Laravel, pero se buscará mantener livianos los controladores. Toda funcionalidad que resulte de utilidad común será extractada a un servicio aparte.
La lógica de negocio también estará encapsulada en un servicio aparte.
Se estructurarán en capas:
Base de datos
_________________________________
| |
| Modelos |
|_________________________________|
| |
| Controlador |
|_________________________________|
| | |
| Parser | Builder |
|________________|________________|
Requests Responses
Las funcionalidades comunes se extraerán en packages para ser utilizadas en ambas APIs.
Parser y Builder, al ser únicos trabajarán con una abstracción de las operaciones que se terminarán concretando en el Controlador con las llamadas a los Modelos.
En el caso de la API de estadísticas, el Controlador implementará una estructura similar a Pipes and Filters, a fin de obtener los datos necesarios y efectuar todas las transformaciones en el orden correcto. Dada su naturaleza, esta API no será REST sino Graphql.
Por el contrario, la API de calificaciones será netamente REST.