diff --git a/app/Actions/GetAvailableOAuthProviders.php b/app/Actions/GetAvailableOAuthProviders.php index e7ac14e..bd13c75 100644 --- a/app/Actions/GetAvailableOAuthProviders.php +++ b/app/Actions/GetAvailableOAuthProviders.php @@ -6,7 +6,7 @@ namespace App\Actions; use App\Enums\OAuthProviders; -final class GetAvailableOAuthProviders +final readonly class GetAvailableOAuthProviders { /** @return array */ public function handle(): array diff --git a/app/Actions/GetPathFromUser.php b/app/Actions/GetPathFromUser.php index a14f8c3..c4cc769 100644 --- a/app/Actions/GetPathFromUser.php +++ b/app/Actions/GetPathFromUser.php @@ -6,7 +6,7 @@ namespace App\Actions; use App\Models\User; -final class GetPathFromUser +final readonly class GetPathFromUser { public function handle(): string { diff --git a/app/Actions/GetPathFromVault.php b/app/Actions/GetPathFromVault.php index 7de943c..af42f2c 100644 --- a/app/Actions/GetPathFromVault.php +++ b/app/Actions/GetPathFromVault.php @@ -7,7 +7,7 @@ namespace App\Actions; use App\Models\User; use App\Models\Vault; -final class GetPathFromVault +final readonly class GetPathFromVault { public function handle(Vault $vault): string { diff --git a/app/Actions/GetPathFromVaultNode.php b/app/Actions/GetPathFromVaultNode.php index d2279dc..3f68b5f 100644 --- a/app/Actions/GetPathFromVaultNode.php +++ b/app/Actions/GetPathFromVaultNode.php @@ -8,7 +8,7 @@ use App\Models\User; use App\Models\Vault; use App\Models\VaultNode; -final class GetPathFromVaultNode +final readonly class GetPathFromVaultNode { public function handle(VaultNode $node, bool $includeSelf = true): string { diff --git a/app/Actions/GetUrlFromVaultNode.php b/app/Actions/GetUrlFromVaultNode.php index 12ff21c..405fc27 100644 --- a/app/Actions/GetUrlFromVaultNode.php +++ b/app/Actions/GetUrlFromVaultNode.php @@ -6,7 +6,7 @@ namespace App\Actions; use App\Models\VaultNode; -final class GetUrlFromVaultNode +final readonly class GetUrlFromVaultNode { public function handle(VaultNode $node): string { diff --git a/app/Actions/GetVaultNodeFromPath.php b/app/Actions/GetVaultNodeFromPath.php index c4ec1bd..7b0337b 100644 --- a/app/Actions/GetVaultNodeFromPath.php +++ b/app/Actions/GetVaultNodeFromPath.php @@ -7,7 +7,7 @@ namespace App\Actions; use App\Models\VaultNode; use Illuminate\Support\Str; -final class GetVaultNodeFromPath +final readonly class GetVaultNodeFromPath { public function handle(int $vaultId, string $path, ?int $parentId = null): ?VaultNode { diff --git a/app/Actions/ProcessImportedFile.php b/app/Actions/ProcessImportedFile.php index 9989242..91e0bbe 100644 --- a/app/Actions/ProcessImportedFile.php +++ b/app/Actions/ProcessImportedFile.php @@ -11,7 +11,7 @@ use App\Services\VaultFiles\Note; use Illuminate\Http\File; use Illuminate\Support\Facades\Storage; -final class ProcessImportedFile +final readonly class ProcessImportedFile { public function handle(Vault $vault, VaultNode $parent, string $fileName, string $filePath): void { diff --git a/app/Actions/ProcessImportedVault.php b/app/Actions/ProcessImportedVault.php index 697580e..387da42 100644 --- a/app/Actions/ProcessImportedVault.php +++ b/app/Actions/ProcessImportedVault.php @@ -10,7 +10,7 @@ use App\Services\VaultFiles\Note; use Illuminate\Support\Facades\Storage; use ZipArchive; -final class ProcessImportedVault +final readonly class ProcessImportedVault { public function handle(string $fileName, string $filePath): void { diff --git a/app/Actions/ResolveTwoPaths.php b/app/Actions/ResolveTwoPaths.php index ce9d508..fc5a3cc 100644 --- a/app/Actions/ResolveTwoPaths.php +++ b/app/Actions/ResolveTwoPaths.php @@ -7,7 +7,7 @@ namespace App\Actions; use GuzzleHttp\Psr7\UriResolver; use GuzzleHttp\Psr7\Utils; -final class ResolveTwoPaths +final readonly class ResolveTwoPaths { public function handle(string $currentPath, string $path): string { diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php deleted file mode 100644 index e2af3d2..0000000 --- a/app/Http/Controllers/Controller.php +++ /dev/null @@ -1,10 +0,0 @@ -preset()->php(); arch()->preset()->laravel(); arch()->preset()->security(); + +arch('controllers') + ->expect('App\Http\Controllers') + ->not->toBeUsed(); + +arch('avoid mutation') + ->expect('App') + ->classes() + ->toBeReadonly() + ->ignoring([ + 'App\Exceptions', + 'App\Jobs', + 'App\Livewire', + 'App\Models', + 'App\Providers', + 'App\Services', + ]); + +arch('avoid inheritance') + ->expect('App') + ->classes() + ->toExtendNothing() + ->ignoring([ + 'App\Exceptions', + 'App\Jobs', + 'App\Livewire', + 'App\Models', + 'App\Providers', + 'App\Services', + ]); + +arch('avoid open for extension') + ->expect('App') + ->classes() + ->toBeFinal() + ->ignoring([ + 'App\Livewire', + ]); + +arch('avoid abstraction') + ->expect('App') + ->not->toBeAbstract(); + +arch('factories') + ->expect('Database\Factories') + ->toExtend(Factory::class) + ->toHaveMethod('definition') + ->toOnlyBeUsedIn([ + 'App\Models', + ]); + +arch('models') + ->expect('App\Models') + ->toHaveMethod('casts') + ->toOnlyBeUsedIn([ + 'App\Actions', + 'App\Http', + 'App\Jobs', + 'App\Livewire', + 'App\Models', + 'App\Observers', + 'App\Policies', + 'App\Providers', + 'App\Services', + 'Database\Factories', + 'Database\Seeders', + ]); + +arch('actions') + ->expect('App\Actions') + ->toHaveMethod('handle');