diff --git a/app/Actions/SendMessageAction.php b/app/Actions/SendMessageAction.php index 1b7c292..d270013 100644 --- a/app/Actions/SendMessageAction.php +++ b/app/Actions/SendMessageAction.php @@ -15,13 +15,17 @@ public function __construct(private CreateOrGetInboxAction $inboxAction) {} public function execute(User $sender, User $recipient, array $data): void { // find the inbox between the two users + \DB::beginTransaction(); $inbox = $this->inboxAction->execute($recipient, $sender); + $inbox->last_message = $data['message']; + $inbox->last_user_id = $sender->id; + $inbox->save(); $message = $inbox->messages()->create([ 'message' => $data['message'], 'user_id' => $sender->id, ]); broadcast(new MessageSent($message))->toOthers(); - + \DB::commit(); } } diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php index 4546d39..88b38f6 100644 --- a/app/Http/Controllers/ChatController.php +++ b/app/Http/Controllers/ChatController.php @@ -13,7 +13,8 @@ class ChatController extends Controller // public function index(#[CurrentUser] User $user) { - return view('dashboards.user.chat'); + return view('dashboards.user.chat') + ->with('inboxes', $user->inboxes); } public function show(#[CurrentUser] User $sender, User $recipient, CreateOrGetInboxAction $action) @@ -27,7 +28,8 @@ public function show(#[CurrentUser] User $sender, User $recipient, CreateOrGetIn return view('dashboards.user.chat') ->with('recipient', $recipient) - ->with('chats', $inbox->messages()->latest()->get()); + ->with('inboxes', $sender->inboxes) + ->with('messages', $inbox->messages()->latest()->get()); } /** diff --git a/app/Models/Inbox.php b/app/Models/Inbox.php index f0bf79f..5675f92 100644 --- a/app/Models/Inbox.php +++ b/app/Models/Inbox.php @@ -3,9 +3,9 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Database\Eloquent\Relations\HasOne; /** * @property int $id @@ -37,13 +37,19 @@ public function users(): BelongsToMany return $this->belongsToMany(User::class); } - public function lastUser(): HasOne + public function lastUser(): BelongsTo { - return $this->hasOne(User::class, 'id', 'last_user_id'); + return $this->belongsTo(User::class, 'id', 'last_user_id'); } public function messages(): HasMany { return $this->hasMany(Message::class, 'inbox_id'); } + + public function getRecipientAttribute(): User + { + // first user in the relationship that is NOT the authenticated user + return $this->users->where('id', '!=', auth()->id())->first(); + } } diff --git a/resources/js/message.js b/resources/js/message.js index 91d1d1d..4f9eda1 100644 --- a/resources/js/message.js +++ b/resources/js/message.js @@ -23,7 +23,7 @@ export const addMessageToChat = (message, right = false) => { const messagePlaceholder = `
No Messages Found!
diff --git a/resources/views/components/chat/message.blade.php b/resources/views/components/chat/message.blade.php index cdef15c..4ba36dd 100644 --- a/resources/views/components/chat/message.blade.php +++ b/resources/views/components/chat/message.blade.php @@ -1,6 +1,7 @@ @props(['right' => false])Control Panel
+Chat
+ +Start a chat !
-Start a chat !
+