diff --git a/app/Actions/CreateOrGetInbox.php b/app/Actions/CreateOrGetInbox.php deleted file mode 100644 index 3c459b2..0000000 --- a/app/Actions/CreateOrGetInbox.php +++ /dev/null @@ -1,22 +0,0 @@ - - */ - public function execute(User $recipient, User $sender): array - { - $chatExists = DB::table('inbox_user as sender') - ->join('inbox_user as recipient', 'sender.inbox_id', '=', 'recipient.inbox_id') - ->where('sender.user_id', $sender->id) - ->where('recipient.user_id', $recipient->id) - ->get(); - - } -} diff --git a/app/Actions/CreateOrGetInboxAction.php b/app/Actions/CreateOrGetInboxAction.php new file mode 100644 index 0000000..c4bb121 --- /dev/null +++ b/app/Actions/CreateOrGetInboxAction.php @@ -0,0 +1,32 @@ + $q->where('id', $sender->id)) + ->whereHas('users', fn($q) => $q->where('id', $recipient->id)) + ->first(); + + if ($existingInbox) { + return $existingInbox; + } + + return DB::transaction(function () use ($sender, $recipient) { + $inbox = Inbox::create(); + $inbox->users()->attach([$sender->id, $recipient->id]); + + return $inbox; + }, 2); + } +} diff --git a/app/Http/Middleware/EnsureUserFollowedBroker.php b/app/Http/Middleware/EnsureUserFollowedBroker.php new file mode 100644 index 0000000..0ee86b0 --- /dev/null +++ b/app/Http/Middleware/EnsureUserFollowedBroker.php @@ -0,0 +1,38 @@ +isBroker()) { + return $next($request); + } + + $recipientUser = $request->route('recipient'); + if ($recipientUser->isBroker()) { + $recipient = $recipientUser->type; + + $isFollowing = $recipient->followers->contains($sender->id); + + if ($isFollowing) { + return $next($request); + } + + abort(403, 'You are not following this broker.'); + } + + abort('404', 'Broker not found.'); + } +} diff --git a/bootstrap/cache/packages.php b/bootstrap/cache/packages.php index dec9a80..ced985f 100755 --- a/bootstrap/cache/packages.php +++ b/bootstrap/cache/packages.php @@ -20,6 +20,13 @@ 0 => 'BladeUI\\Icons\\BladeIconsServiceProvider', ), ), + 'laradumps/laradumps' => + array ( + 'providers' => + array ( + 0 => 'LaraDumps\\LaraDumps\\LaraDumpsServiceProvider', + ), + ), 'laravel-notification-channels/webpush' => array ( 'providers' => diff --git a/bootstrap/cache/services.php b/bootstrap/cache/services.php index efb46c6..9dad3ad 100755 --- a/bootstrap/cache/services.php +++ b/bootstrap/cache/services.php @@ -27,18 +27,19 @@ 23 => 'Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider', 24 => 'BladeUI\\Heroicons\\BladeHeroiconsServiceProvider', 25 => 'BladeUI\\Icons\\BladeIconsServiceProvider', - 26 => 'NotificationChannels\\WebPush\\WebPushServiceProvider', - 27 => 'Laravel\\Pail\\PailServiceProvider', - 28 => 'Laravel\\Reverb\\ApplicationManagerServiceProvider', - 29 => 'Laravel\\Reverb\\ReverbServiceProvider', - 30 => 'Laravel\\Sail\\SailServiceProvider', - 31 => 'Laravel\\Tinker\\TinkerServiceProvider', - 32 => 'Carbon\\Laravel\\ServiceProvider', - 33 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', - 34 => 'Termwind\\Laravel\\TermwindServiceProvider', - 35 => 'Opcodes\\LogViewer\\LogViewerServiceProvider', - 36 => 'Pest\\Laravel\\PestServiceProvider', - 37 => 'App\\Providers\\AppServiceProvider', + 26 => 'LaraDumps\\LaraDumps\\LaraDumpsServiceProvider', + 27 => 'NotificationChannels\\WebPush\\WebPushServiceProvider', + 28 => 'Laravel\\Pail\\PailServiceProvider', + 29 => 'Laravel\\Reverb\\ApplicationManagerServiceProvider', + 30 => 'Laravel\\Reverb\\ReverbServiceProvider', + 31 => 'Laravel\\Sail\\SailServiceProvider', + 32 => 'Laravel\\Tinker\\TinkerServiceProvider', + 33 => 'Carbon\\Laravel\\ServiceProvider', + 34 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', + 35 => 'Termwind\\Laravel\\TermwindServiceProvider', + 36 => 'Opcodes\\LogViewer\\LogViewerServiceProvider', + 37 => 'Pest\\Laravel\\PestServiceProvider', + 38 => 'App\\Providers\\AppServiceProvider', ), 'eager' => array ( @@ -54,15 +55,16 @@ 9 => 'Illuminate\\View\\ViewServiceProvider', 10 => 'BladeUI\\Heroicons\\BladeHeroiconsServiceProvider', 11 => 'BladeUI\\Icons\\BladeIconsServiceProvider', - 12 => 'NotificationChannels\\WebPush\\WebPushServiceProvider', - 13 => 'Laravel\\Pail\\PailServiceProvider', - 14 => 'Laravel\\Reverb\\ReverbServiceProvider', - 15 => 'Carbon\\Laravel\\ServiceProvider', - 16 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', - 17 => 'Termwind\\Laravel\\TermwindServiceProvider', - 18 => 'Opcodes\\LogViewer\\LogViewerServiceProvider', - 19 => 'Pest\\Laravel\\PestServiceProvider', - 20 => 'App\\Providers\\AppServiceProvider', + 12 => 'LaraDumps\\LaraDumps\\LaraDumpsServiceProvider', + 13 => 'NotificationChannels\\WebPush\\WebPushServiceProvider', + 14 => 'Laravel\\Pail\\PailServiceProvider', + 15 => 'Laravel\\Reverb\\ReverbServiceProvider', + 16 => 'Carbon\\Laravel\\ServiceProvider', + 17 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', + 18 => 'Termwind\\Laravel\\TermwindServiceProvider', + 19 => 'Opcodes\\LogViewer\\LogViewerServiceProvider', + 20 => 'Pest\\Laravel\\PestServiceProvider', + 21 => 'App\\Providers\\AppServiceProvider', ), 'deferred' => array ( diff --git a/composer.json b/composer.json index 0494ff4..6bcd056 100644 --- a/composer.json +++ b/composer.json @@ -20,6 +20,7 @@ "require-dev": { "barryvdh/laravel-ide-helper": "^3.6", "fakerphp/faker": "^1.23", + "laradumps/laradumps": "^5.0", "laravel/pail": "^1.2.2", "laravel/pint": "^1.24", "laravel/sail": "^1.41", diff --git a/composer.lock b/composer.lock index 7e85e75..584ebef 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ad2793fd6165fc58fbde1567e1d3df58", + "content-hash": "e7b0ba578b3dd4a72b6d312716d071f2", "packages": [ { "name": "blade-ui-kit/blade-heroicons", @@ -158,16 +158,16 @@ }, { "name": "brick/math", - "version": "0.14.6", + "version": "0.14.8", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "32498d5e1897e7642c0b961ace2df6d7dc9a3bc3" + "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/32498d5e1897e7642c0b961ace2df6d7dc9a3bc3", - "reference": "32498d5e1897e7642c0b961ace2df6d7dc9a3bc3", + "url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629", + "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629", "shasum": "" }, "require": { @@ -206,7 +206,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.6" + "source": "https://github.com/brick/math/tree/0.14.8" }, "funding": [ { @@ -214,7 +214,7 @@ "type": "github" } ], - "time": "2026-02-05T07:59:58+00:00" + "time": "2026-02-10T14:33:43+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -1447,16 +1447,16 @@ }, { "name": "laravel/framework", - "version": "v12.50.0", + "version": "v12.51.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "174ffed91d794a35a541a5eb7c3785a02a34aaba" + "reference": "ce4de3feb211e47c4f959d309ccf8a2733b1bc16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/174ffed91d794a35a541a5eb7c3785a02a34aaba", - "reference": "174ffed91d794a35a541a5eb7c3785a02a34aaba", + "url": "https://api.github.com/repos/laravel/framework/zipball/ce4de3feb211e47c4f959d309ccf8a2733b1bc16", + "reference": "ce4de3feb211e47c4f959d309ccf8a2733b1bc16", "shasum": "" }, "require": { @@ -1665,20 +1665,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-02-04T18:34:13+00:00" + "time": "2026-02-10T18:20:19+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.12", + "version": "v0.3.13", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "4861ded9003b7f8a158176a0b7666f74ee761be8" + "reference": "ed8c466571b37e977532fb2fd3c272c784d7050d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/4861ded9003b7f8a158176a0b7666f74ee761be8", - "reference": "4861ded9003b7f8a158176a0b7666f74ee761be8", + "url": "https://api.github.com/repos/laravel/prompts/zipball/ed8c466571b37e977532fb2fd3c272c784d7050d", + "reference": "ed8c466571b37e977532fb2fd3c272c784d7050d", "shasum": "" }, "require": { @@ -1722,9 +1722,9 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.12" + "source": "https://github.com/laravel/prompts/tree/v0.3.13" }, - "time": "2026-02-03T06:57:26+00:00" + "time": "2026-02-06T12:17:10+00:00" }, { "name": "laravel/reverb", @@ -2768,16 +2768,16 @@ }, { "name": "nette/schema", - "version": "v1.3.3", + "version": "v1.3.4", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004" + "reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004", - "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004", + "url": "https://api.github.com/repos/nette/schema/zipball/086497a2f34b82fede9b5a41cc8e131d087cd8f7", + "reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7", "shasum": "" }, "require": { @@ -2785,8 +2785,8 @@ "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^2.0@stable", + "nette/tester": "^2.6", + "phpstan/phpstan": "^2.0@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -2827,22 +2827,22 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.3" + "source": "https://github.com/nette/schema/tree/v1.3.4" }, - "time": "2025-10-30T22:57:59+00:00" + "time": "2026-02-08T02:54:00+00:00" }, { "name": "nette/utils", - "version": "v4.1.2", + "version": "v4.1.3", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5" + "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/f76b5dc3d6c6d3043c8d937df2698515b99cbaf5", - "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5", + "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe", + "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe", "shasum": "" }, "require": { @@ -2854,8 +2854,10 @@ }, "require-dev": { "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", "nette/tester": "^2.5", - "phpstan/phpstan": "^2.0@stable", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -2916,9 +2918,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.1.2" + "source": "https://github.com/nette/utils/tree/v4.1.3" }, - "time": "2026-02-03T17:21:09+00:00" + "time": "2026-02-13T03:05:33+00:00" }, { "name": "nikic/php-parser", @@ -7984,29 +7986,29 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.5", + "version": "1.1.6", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "conflict": { - "phpunit/phpunit": "<=7.5 || >=13" + "phpunit/phpunit": "<=7.5 || >=14" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", "psr/log": "^1 || ^2 || ^3" }, "suggest": { @@ -8026,9 +8028,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" }, - "time": "2025-04-07T20:06:18+00:00" + "time": "2026-02-07T07:09:04+00:00" }, { "name": "fakerphp/faker", @@ -8336,6 +8338,148 @@ }, "time": "2025-03-19T14:43:43+00:00" }, + { + "name": "laradumps/laradumps", + "version": "v5.0.4", + "source": { + "type": "git", + "url": "https://github.com/laradumps/laradumps.git", + "reference": "bfce9338576fc052ed2271f8d6f1dc1da88b6e60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laradumps/laradumps/zipball/bfce9338576fc052ed2271f8d6f1dc1da88b6e60", + "reference": "bfce9338576fc052ed2271f8d6f1dc1da88b6e60", + "shasum": "" + }, + "require": { + "illuminate/mail": "^11.0|^12.0", + "illuminate/support": "^11.0|^12.0", + "laradumps/laradumps-core": "^4.0.3", + "php": "^8.2" + }, + "require-dev": { + "larastan/larastan": "^3.8", + "laravel/framework": "^11.0|^12.0", + "laravel/pint": "^1.26.0", + "livewire/livewire": "^3.7.1|^4.0", + "mockery/mockery": "^1.6.12", + "orchestra/testbench-core": "^9.4|^10.0", + "pestphp/pest": "^3.7.0|^4.0.0", + "symfony/var-dumper": "^7.1.3|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaraDumps\\LaraDumps\\LaraDumpsServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "LaraDumps\\LaraDumps\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luan Freitas", + "email": "luanfreitas10@protonmail.com", + "role": "Developer" + } + ], + "description": "LaraDumps is a friendly app designed to boost your Laravel PHP coding and debugging experience.", + "homepage": "https://github.com/laradumps/laradumps", + "support": { + "issues": "https://github.com/laradumps/laradumps/issues", + "source": "https://github.com/laradumps/laradumps/tree/v5.0.4" + }, + "funding": [ + { + "url": "https://github.com/luanfreitasdev", + "type": "github" + } + ], + "time": "2026-02-06T12:07:25+00:00" + }, + { + "name": "laradumps/laradumps-core", + "version": "v4.0.3", + "source": { + "type": "git", + "url": "https://github.com/laradumps/laradumps-core.git", + "reference": "28d7997a26bae46c538844e20bcd51e023389e62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laradumps/laradumps-core/zipball/28d7997a26bae46c538844e20bcd51e023389e62", + "reference": "28d7997a26bae46c538844e20bcd51e023389e62", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": "^8.2", + "ramsey/uuid": "^4.9.1", + "spatie/backtrace": "^1.5", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "require-dev": { + "illuminate/support": "^12", + "laravel/pint": "^1.26.0", + "pestphp/pest": "^3.0|^4.0", + "phpstan/phpstan": "^1.10.50" + }, + "suggest": { + "nunomaduro/termwind": "For a better terminal experience" + }, + "bin": [ + "bin/laradumps" + ], + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "LaraDumps\\LaraDumpsCore\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luan Freitas", + "email": "luanfreitas10@protonmail.com", + "role": "Developer" + } + ], + "description": "LaraDumps is a friendly app designed to boost your Laravel / PHP coding and debugging experience.", + "homepage": "https://github.com/laradumps/laradumps-core", + "support": { + "issues": "https://github.com/laradumps/laradumps-core/issues", + "source": "https://github.com/laradumps/laradumps-core/tree/v4.0.3" + }, + "funding": [ + { + "url": "https://github.com/luanfreitasdev", + "type": "github" + } + ], + "time": "2026-02-06T12:03:23+00:00" + }, { "name": "laravel/pail", "version": "v1.2.5", @@ -11079,6 +11223,70 @@ ], "time": "2025-02-07T05:00:38+00:00" }, + { + "name": "spatie/backtrace", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "8c0f16a59ae35ec8c62d85c3c17585158f430110" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/8c0f16a59ae35ec8c62d85c3c17585158f430110", + "reference": "8c0f16a59ae35ec8c62d85c3c17585158f430110", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ext-json": "*", + "laravel/serializable-closure": "^1.3 || ^2.0", + "phpunit/phpunit": "^9.3 || ^11.4.3", + "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", + "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2025-08-26T08:22:30+00:00" + }, { "name": "staabm/side-effects-detector", "version": "1.0.5", diff --git a/resources/views/components/dashboard/user/broker-contact.blade.php b/resources/views/components/dashboard/user/broker-contact.blade.php index de9ffdd..79b74a4 100644 --- a/resources/views/components/dashboard/user/broker-contact.blade.php +++ b/resources/views/components/dashboard/user/broker-contact.blade.php @@ -1,13 +1,13 @@ -@props(['broker' => '', 'is_followed' => false]) +@props(['broker', 'is_followed' => false])
Broker Contact
No Deals found !
@endforelse diff --git a/routes/web/chat.php b/routes/web/chat.php index 4f38a4c..0f74916 100644 --- a/routes/web/chat.php +++ b/routes/web/chat.php @@ -1,6 +1,12 @@ name('chat'); -Route::get('/chat/{recipient}', [ChatController::class, 'show'])->name('chat.show'); +Route::middleware('auth')->group(function () { + Route::get('/chat', [ChatController::class, 'index'])->name('chat'); + + Route::get('/chat/{recipient}', [ChatController::class, 'show']) + ->middleware(EnsureUserFollowedBroker::class) + ->name('chat.show'); +});