Probleem
BuildoraDataTableController en RelationDatatableController delen ~80% van hun logica:
- Request parsing (search term, sort, page, filters)
- Resource resolution
- Datatable instantiatie + column building
- JSON response shaping
Het enige reële verschil is dat de relation-variant eerst een parent-model resolved.
Voorstel
Extract een DatatableRequestHandler service:
class DatatableRequestHandler
{
public function handle(Request \$request, BuildoraResource \$resource, ?Model \$parent = null): JsonResponse
{
// shared logic
}
}
Beide controllers worden thin wrappers:
public function __invoke(Request \$request, string \$resource)
{
return \$this->handler->handle(\$request, \$this->resolve(\$resource));
}
Acceptatiecriteria
Probleem
BuildoraDataTableControllerenRelationDatatableControllerdelen ~80% van hun logica:Het enige reële verschil is dat de relation-variant eerst een parent-model resolved.
Voorstel
Extract een
DatatableRequestHandlerservice:Beide controllers worden thin wrappers:
Acceptatiecriteria
DatatableRequestHandlerservice bestaat