# matheuspdias/laravel-clean-arch architecture

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

- Interactive diagram: https://gitdiagram.com/matheuspdias/laravel-clean-arch
- Repository: https://github.com/matheuspdias/laravel-clean-arch

## Overview

This is a Laravel REST API for user CRUD and Sanctum-based authentication, organized around Clean Architecture and DDD. The main workflow is an HTTP request routed to a controller, delegated to a use case, and handled through domain logic and repository persistence before a JSON response is returned. The graph preserves user CRUD, authentication, domain modeling, and Eloquent persistence. Some use-case implementations and route details were not excerpted; documented capabilities and SOURCE INDEX references support those links, while uncertain wiring is omitted.

Main entry points: [`app/Modules/User/Application/UseCases`](https://github.com/matheuspdias/laravel-clean-arch/tree/master/app/Modules/User/Application/UseCases) (User use cases), [`app/Modules/User/Domain/Repositories/UserRepository.php`](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Domain/Repositories/UserRepository.php) (Repository contract), [`app/Modules/Auth/Http/Controllers/AuthController.php`](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Http/Controllers/AuthController.php) (Auth controller), [`routes/api.php`](https://github.com/matheuspdias/laravel-clean-arch/blob/master/routes/api.php) (API routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_http["HTTP API"]
  node_routes["API routes<br/>[api.php]"]
  node_user_controller["User controller<br/>[UserController.php]"]
  node_user_resource["User resource<br/>[UserResource.php]"]
  node_auth_controller["Auth controller<br/>[AuthController.php]"]
end

subgraph group_application["Application and Domain"]
  node_user_use_cases["User use cases"]
  node_login_use_case["Login use case<br/>[LoginUseCase.php]"]
  node_logout_use_case["Logout use case<br/>[LogoutUseCase.php]"]
  node_user_domain["User domain<br/>[User.php]"]
  node_domain_service["User domain service"]
  node_user_repository_contract["Repository contract<br/>[UserRepository.php]"]
  node_user_values["User value objects"]
end

subgraph group_persistence["Persistence"]
  node_eloquent_repository["Eloquent repository"]
  node_user_model["User model<br/>[UserModel.php]"]
end

subgraph group_auth["Authentication"]
  node_token_contract["Token contract<br/>[TokenService.php]"]
  node_sanctum["Sanctum token service"]
end

node_client(("API client"))

node_client -->|"sends request"| node_routes
node_routes -->|"routes users"| node_user_controller
node_routes -->|"routes auth"| node_auth_controller
node_user_controller -->|"invokes"| node_user_use_cases
node_user_controller -->|"formats response"| node_user_resource
node_user_use_cases -->|"uses repository"| node_user_repository_contract
node_user_use_cases -->|"handles users"| node_user_domain
node_user_use_cases -->|"uses identifiers"| node_user_values
node_user_use_cases -->|"checks profile"| node_domain_service
node_domain_service -->|"checks email"| node_user_repository_contract
node_user_repository_contract -->|"returns entities"| node_user_domain
node_eloquent_repository -->|"queries and saves"| node_user_model
node_user_model -->|"maps entity"| node_user_domain
node_eloquent_repository -->|"implements"| node_user_repository_contract
node_auth_controller -->|"invokes login"| node_login_use_case
node_auth_controller -->|"invokes logout"| node_logout_use_case
node_auth_controller -->|"formats profile"| node_user_resource
node_login_use_case -->|"looks up user"| node_user_repository_contract
node_login_use_case -->|"creates token"| node_token_contract
node_logout_use_case -->|"revokes token"| node_token_contract
node_sanctum -->|"implements"| node_token_contract
node_sanctum -->|"creates user token"| node_user_model

click node_routes "https://github.com/matheuspdias/laravel-clean-arch/blob/master/routes/api.php"
click node_user_controller "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Http/Controllers/UserController.php"
click node_user_resource "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Http/Resources/UserResource.php"
click node_auth_controller "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Http/Controllers/AuthController.php"
click node_user_use_cases "https://github.com/matheuspdias/laravel-clean-arch/tree/master/app/Modules/User/Application/UseCases"
click node_login_use_case "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Application/UseCases/LoginUseCase.php"
click node_logout_use_case "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Application/UseCases/LogoutUseCase.php"
click node_user_domain "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Domain/Entities/User.php"
click node_domain_service "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Domain/Services/UserDomainService.php"
click node_user_repository_contract "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Domain/Repositories/UserRepository.php"
click node_user_values "https://github.com/matheuspdias/laravel-clean-arch/tree/master/app/Modules/User/Domain/ValueObjects"
click node_token_contract "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Application/Contracts/TokenService.php"
click node_sanctum "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Infrastructure/SanctumTokenService.php"
click node_eloquent_repository "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Infrastructure/Persistence/Eloquent/EloquentUserRepository.php"
click node_user_model "https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Infrastructure/Persistence/Eloquent/UserModel.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_user_controller,node_user_resource,node_auth_controller,node_client toneBlue
class node_user_use_cases,node_login_use_case,node_logout_use_case,node_user_domain,node_domain_service,node_user_repository_contract,node_user_values toneAmber
class node_eloquent_repository,node_user_model toneMint
class node_token_contract,node_sanctum toneRose
```

## Components

### HTTP API

- [API routes](https://github.com/matheuspdias/laravel-clean-arch/blob/master/routes/api.php): `routes/api.php`
- [User controller](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Http/Controllers/UserController.php): `app/Modules/User/Http/Controllers/UserController.php`
- [User resource](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Http/Resources/UserResource.php): `app/Modules/User/Http/Resources/UserResource.php`
- [Auth controller](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Http/Controllers/AuthController.php): `app/Modules/Auth/Http/Controllers/AuthController.php`

### Application and Domain

- [User use cases](https://github.com/matheuspdias/laravel-clean-arch/tree/master/app/Modules/User/Application/UseCases): `app/Modules/User/Application/UseCases`
- [Login use case](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Application/UseCases/LoginUseCase.php): `app/Modules/Auth/Application/UseCases/LoginUseCase.php`
- [Logout use case](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Application/UseCases/LogoutUseCase.php): `app/Modules/Auth/Application/UseCases/LogoutUseCase.php`
- [User domain](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Domain/Entities/User.php): `app/Modules/User/Domain/Entities/User.php`
- [User domain service](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Domain/Services/UserDomainService.php): `app/Modules/User/Domain/Services/UserDomainService.php`
- [Repository contract](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Domain/Repositories/UserRepository.php): `app/Modules/User/Domain/Repositories/UserRepository.php`
- [User value objects](https://github.com/matheuspdias/laravel-clean-arch/tree/master/app/Modules/User/Domain/ValueObjects): `app/Modules/User/Domain/ValueObjects`

### Persistence

- [Eloquent repository](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Infrastructure/Persistence/Eloquent/EloquentUserRepository.php): `app/Modules/User/Infrastructure/Persistence/Eloquent/EloquentUserRepository.php`
- [User model](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/User/Infrastructure/Persistence/Eloquent/UserModel.php): `app/Modules/User/Infrastructure/Persistence/Eloquent/UserModel.php`

### Authentication

- [Token contract](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Application/Contracts/TokenService.php): `app/Modules/Auth/Application/Contracts/TokenService.php`
- [Sanctum token service](https://github.com/matheuspdias/laravel-clean-arch/blob/master/app/Modules/Auth/Infrastructure/SanctumTokenService.php): `app/Modules/Auth/Infrastructure/SanctumTokenService.php`

### Other components

- **API client**

## Connections

- API client → API routes: sends request (evidence: `routes/api.php`)
- API routes → User controller: routes users (evidence: `routes/api.php`)
- API routes → Auth controller: routes auth (evidence: `routes/api.php`)
- User controller → User use cases: invokes (evidence: `app/Modules/User/Http/Controllers/UserController.php`)
- User controller → User resource: formats response (evidence: `app/Modules/User/Http/Controllers/UserController.php`)
- User use cases → Repository contract: uses repository (evidence: `app/Modules/User/Application/UseCases/GetUserUseCase.php`)
- User use cases → User domain: handles users (evidence: `app/Modules/User/Application/UseCases/GetUserUseCase.php`)
- User use cases → User value objects: uses identifiers (evidence: `app/Modules/User/Application/UseCases/GetUserUseCase.php`)
- User use cases → User domain service: checks profile (evidence: `app/Modules/User/Application/UseCases/UpdateUserUseCase.php`)
- User domain service → Repository contract: checks email (evidence: `app/Modules/User/Domain/Services/UserDomainService.php`)
- Repository contract → User domain: returns entities (evidence: `app/Modules/User/Domain/Repositories/UserRepository.php`)
- Eloquent repository → User model: queries and saves (evidence: `app/Modules/User/Infrastructure/Persistence/Eloquent/EloquentUserRepository.php`)
- User model → User domain: maps entity (evidence: `app/Modules/User/Infrastructure/Persistence/Eloquent/UserModel.php`)
- Eloquent repository → Repository contract: implements (evidence: `app/Modules/User/Infrastructure/Persistence/Eloquent/EloquentUserRepository.php`)
- Auth controller → Login use case: invokes login (evidence: `app/Modules/Auth/Http/Controllers/AuthController.php`)
- Auth controller → Logout use case: invokes logout (evidence: `app/Modules/Auth/Http/Controllers/AuthController.php`)
- Auth controller → User resource: formats profile (evidence: `app/Modules/Auth/Http/Controllers/AuthController.php`)
- Login use case → Repository contract: looks up user (evidence: `app/Modules/Auth/Application/UseCases/LoginUseCase.php`)
- Login use case → Token contract: creates token (evidence: `app/Modules/Auth/Application/UseCases/LoginUseCase.php`)
- Logout use case → Token contract: revokes token (evidence: `app/Modules/Auth/Application/UseCases/LogoutUseCase.php`)
- Sanctum token service → Token contract: implements (evidence: `app/Modules/Auth/Infrastructure/SanctumTokenService.php`)
- Sanctum token service → User model: creates user token (evidence: `app/Modules/Auth/Infrastructure/SanctumTokenService.php`)
