# dandoetech/laravel-generic-api architecture

> Architecture diagram of the GitHub repository dandoetech/laravel-generic-api, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dandoetech/laravel-generic-api
- Repository: https://github.com/dandoetech/laravel-generic-api

## Overview

Laravel Generic API is a registry-driven CRUD package: clients call shared resource endpoints, which resolve resource definitions, validate and authorize requests, apply query rules, access Eloquent models, and return JSON. The graph also preserves its mass-action and built-in clone capability. Query profiles, scoped ownership access, computed fields, and pagination are included as documented or sampled stages. Some routing and service wiring is documented but not fully excerpted; edges reflect only shown source references or README statements.

Main entry points: [`src/Http/Controllers/GenericController.php`](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Controllers/GenericController.php) (Generic controller), [`src/Providers/GenericApiServiceProvider.php`](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Providers/GenericApiServiceProvider.php) (Service provider), [`src/Domain/EloquentRepositoryAdapter.php`](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/EloquentRepositoryAdapter.php) (Repository adapter), [`routes/generic.php`](https://github.com/dandoetech/laravel-generic-api/blob/main/routes/generic.php) (Resource routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_routes["Resource routes<br/>[generic.php]"]
  node_auth["Resource authorization"]
  node_controller["Generic controller"]
  node_store["Create validation<br/>[StoreRequest.php]"]
  node_update["Update validation<br/>[UpdateRequest.php]"]
  node_actionrequest["Action validation<br/>[ActionRequest.php]"]
  node_json["JSON responses<br/>[ResourceJson.php]"]
end

subgraph group_query["Query Processing"]
  node_profiles["Profile resolution"]
  node_criteria["Criteria parsing<br/>[QueryCriteria.php]"]
  node_criteriaerror["Criteria errors"]
  node_registryutils["Registry utilities<br/>[RegistryUtils.php]"]
  node_queryapplier["Query application<br/>[QueryApplier.php]"]
end

subgraph group_domain["Domain Operations"]
  node_adapter["Repository adapter"]
  node_interface["Repository contract"]
  node_db[("Eloquent database")]
  node_registry["Resource registry"]
  node_massrequest["Mass action request"]
  node_massexecutor["Registry action executor"]
  node_massinterface["Mass action contract"]
  node_clone["Clone handler"]
end

subgraph group_wiring["Laravel Integration"]
  node_provider["Service provider"]
  node_config["API configuration<br/>[ddt_api.php]"]
end

node_client(("API client"))

node_client -->|"calls endpoints"| node_routes
node_routes -->|"applies middleware"| node_auth
node_routes -->|"dispatches requests"| node_controller
node_controller -->|"resolves resource"| node_registry
node_auth -->|"looks up resource"| node_registry
node_controller -->|"validates create"| node_store
node_controller -->|"validates update"| node_update
node_controller -->|"validates action"| node_actionrequest
node_controller -->|"resolves fallback"| node_profiles
node_controller -->|"parses query"| node_criteria
node_criteria -->|"raises invalid criteria"| node_criteriaerror
node_controller -->|"gets field names"| node_registryutils
node_controller -->|"requests data operations"| node_interface
node_interface -->|"implemented by"| node_adapter
node_adapter -->|"applies query criteria"| node_queryapplier
node_adapter -->|"gets resource model"| node_registry
node_adapter -->|"queries and persists"| node_db
node_controller -->|"formats response"| node_json
node_controller -->|"executes mass action"| node_massinterface
node_massinterface -->|"implemented by"| node_massexecutor
node_massexecutor -->|"accepts request"| node_massrequest
node_massexecutor -->|"dispatches handler"| node_clone
node_clone -->|"resolves model"| node_registry
node_clone -->|"duplicates records"| node_db
node_provider -->|"binds adapter"| node_interface
node_provider -->|"binds executor"| node_massinterface
node_provider -->|"registers service"| node_queryapplier
node_provider -->|"loads routes"| node_routes
node_provider -->|"merges configuration"| node_config

click node_routes "https://github.com/dandoetech/laravel-generic-api/blob/main/routes/generic.php"
click node_auth "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Middleware/AuthorizeResource.php"
click node_controller "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Controllers/GenericController.php"
click node_store "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Requests/StoreRequest.php"
click node_update "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Requests/UpdateRequest.php"
click node_actionrequest "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Requests/ActionRequest.php"
click node_json "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Resources/ResourceJson.php"
click node_profiles "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Support/CriteriaProfileResolver.php"
click node_criteria "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Support/QueryCriteria.php"
click node_criteriaerror "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Exceptions/InvalidCriteriaException.php"
click node_registryutils "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Support/RegistryUtils.php"
click node_adapter "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/EloquentRepositoryAdapter.php"
click node_interface "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/RepositoryAdapterInterface.php"
click node_queryapplier "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/QueryApplier.php"
click node_massrequest "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/MassAction/MassActionRequest.php"
click node_massexecutor "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/Actions/RegistryActionExecutor.php"
click node_massinterface "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/MassAction/MassActionExecutorInterface.php"
click node_clone "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/Actions/CloneActionHandler.php"
click node_provider "https://github.com/dandoetech/laravel-generic-api/blob/main/src/Providers/GenericApiServiceProvider.php"
click node_config "https://github.com/dandoetech/laravel-generic-api/blob/main/config/ddt_api.php"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_routes,node_auth,node_controller,node_store,node_update,node_actionrequest,node_json,node_client toneBlue
class node_profiles,node_criteria,node_criteriaerror,node_registryutils,node_queryapplier toneAmber
class node_adapter,node_interface,node_db,node_registry,node_massrequest,node_massexecutor,node_massinterface,node_clone toneMint
class node_provider,node_config toneRose
```

## Components

### HTTP API

- [Resource routes](https://github.com/dandoetech/laravel-generic-api/blob/main/routes/generic.php): `routes/generic.php`
- [Resource authorization](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Middleware/AuthorizeResource.php): `src/Http/Middleware/AuthorizeResource.php`
- [Generic controller](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Controllers/GenericController.php): `src/Http/Controllers/GenericController.php`
- [Create validation](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Requests/StoreRequest.php): `src/Http/Requests/StoreRequest.php`
- [Update validation](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Requests/UpdateRequest.php): `src/Http/Requests/UpdateRequest.php`
- [Action validation](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Requests/ActionRequest.php): `src/Http/Requests/ActionRequest.php`
- [JSON responses](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Http/Resources/ResourceJson.php): `src/Http/Resources/ResourceJson.php`

### Query Processing

- [Profile resolution](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Support/CriteriaProfileResolver.php): `src/Support/CriteriaProfileResolver.php`
- [Criteria parsing](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Support/QueryCriteria.php): `src/Support/QueryCriteria.php`
- [Criteria errors](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Exceptions/InvalidCriteriaException.php): `src/Exceptions/InvalidCriteriaException.php`
- [Registry utilities](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Support/RegistryUtils.php): `src/Support/RegistryUtils.php`
- [Query application](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/QueryApplier.php): `src/Domain/QueryApplier.php`

### Domain Operations

- [Repository adapter](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/EloquentRepositoryAdapter.php): `src/Domain/EloquentRepositoryAdapter.php`
- [Repository contract](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/RepositoryAdapterInterface.php): `src/Domain/RepositoryAdapterInterface.php`
- **Eloquent database**
- **Resource registry**
- [Mass action request](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/MassAction/MassActionRequest.php): `src/Domain/MassAction/MassActionRequest.php`
- [Registry action executor](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/Actions/RegistryActionExecutor.php): `src/Domain/Actions/RegistryActionExecutor.php`
- [Mass action contract](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/MassAction/MassActionExecutorInterface.php): `src/Domain/MassAction/MassActionExecutorInterface.php`
- [Clone handler](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Domain/Actions/CloneActionHandler.php): `src/Domain/Actions/CloneActionHandler.php`

### Laravel Integration

- [Service provider](https://github.com/dandoetech/laravel-generic-api/blob/main/src/Providers/GenericApiServiceProvider.php): `src/Providers/GenericApiServiceProvider.php`
- [API configuration](https://github.com/dandoetech/laravel-generic-api/blob/main/config/ddt_api.php): `config/ddt_api.php`

### Other components

- **API client**

## Connections

- API client → Resource routes: calls endpoints (evidence: `README.md`)
- Resource routes → Resource authorization: applies middleware (evidence: `README.md`)
- Resource routes → Generic controller: dispatches requests (evidence: `README.md`)
- Generic controller → Resource registry: resolves resource (evidence: `src/Http/Controllers/GenericController.php`)
- Resource authorization → Resource registry: looks up resource (evidence: `src/Http/Middleware/AuthorizeResource.php`)
- Generic controller → Create validation: validates create (evidence: `src/Http/Controllers/GenericController.php`)
- Generic controller → Update validation: validates update (evidence: `src/Http/Controllers/GenericController.php`)
- Generic controller → Action validation: validates action (evidence: `src/Http/Controllers/GenericController.php`)
- Generic controller → Profile resolution: resolves fallback (evidence: `src/Http/Controllers/GenericController.php`)
- Generic controller → Criteria parsing: parses query (evidence: `src/Http/Controllers/GenericController.php`)
- Criteria parsing → Criteria errors: raises invalid criteria (evidence: `src/Support/QueryCriteria.php`)
- Generic controller → Registry utilities: gets field names (evidence: `src/Http/Controllers/GenericController.php`)
- Generic controller → Repository contract: requests data operations (evidence: `src/Http/Controllers/GenericController.php`)
- Repository contract → Repository adapter: implemented by (evidence: `src/Providers/GenericApiServiceProvider.php`)
- Repository adapter → Query application: applies query criteria (evidence: `src/Domain/EloquentRepositoryAdapter.php`)
- Repository adapter → Resource registry: gets resource model (evidence: `src/Domain/EloquentRepositoryAdapter.php`)
- Repository adapter → Eloquent database: queries and persists (evidence: `src/Domain/EloquentRepositoryAdapter.php`)
- Generic controller → JSON responses: formats response (evidence: `src/Http/Controllers/GenericController.php`)
- Generic controller → Mass action contract: executes mass action (evidence: `src/Http/Controllers/GenericController.php`)
- Mass action contract → Registry action executor: implemented by (evidence: `src/Providers/GenericApiServiceProvider.php`)
- Registry action executor → Mass action request: accepts request (evidence: `src/Domain/Actions/RegistryActionExecutor.php`)
- Registry action executor → Clone handler: dispatches handler (evidence: `src/Domain/Actions/RegistryActionExecutor.php`)
- Clone handler → Resource registry: resolves model (evidence: `src/Domain/Actions/CloneActionHandler.php`)
- Clone handler → Eloquent database: duplicates records (evidence: `src/Domain/Actions/CloneActionHandler.php`)
- Service provider → Repository contract: binds adapter (evidence: `src/Providers/GenericApiServiceProvider.php`)
- Service provider → Mass action contract: binds executor (evidence: `src/Providers/GenericApiServiceProvider.php`)
- Service provider → Query application: registers service (evidence: `src/Providers/GenericApiServiceProvider.php`)
- Service provider → Resource routes: loads routes (evidence: `src/Providers/GenericApiServiceProvider.php`)
- Service provider → API configuration: merges configuration (evidence: `src/Providers/GenericApiServiceProvider.php`)
