Phases 0–18: core meetings, webinar, breakouts, team chat, live streaming, town hall, billing, and Ladill Mail calendar wiring. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Meet;
|
||||
|
||||
use App\Models\DirectConversation;
|
||||
use App\Models\DirectMessage;
|
||||
use App\Models\DirectParticipant;
|
||||
use App\Models\Organization;
|
||||
use App\Models\User;
|
||||
|
||||
class DirectMessageService
|
||||
{
|
||||
public function findOrCreateDm(User $user, Organization $organization, string $otherUserRef): DirectConversation
|
||||
{
|
||||
$ownerRef = $user->ownerRef();
|
||||
$userRef = $ownerRef;
|
||||
|
||||
$existing = DirectConversation::owned($ownerRef)
|
||||
->where('organization_id', $organization->id)
|
||||
->where('type', 'dm')
|
||||
->whereHas('participants', fn ($q) => $q->where('user_ref', $userRef))
|
||||
->whereHas('participants', fn ($q) => $q->where('user_ref', $otherUserRef))
|
||||
->first();
|
||||
|
||||
if ($existing) {
|
||||
return $existing;
|
||||
}
|
||||
|
||||
$conversation = DirectConversation::create([
|
||||
'owner_ref' => $ownerRef,
|
||||
'organization_id' => $organization->id,
|
||||
'type' => 'dm',
|
||||
]);
|
||||
|
||||
foreach ([$userRef, $otherUserRef] as $ref) {
|
||||
DirectParticipant::create([
|
||||
'conversation_id' => $conversation->id,
|
||||
'user_ref' => $ref,
|
||||
]);
|
||||
}
|
||||
|
||||
return $conversation;
|
||||
}
|
||||
|
||||
public function postMessage(DirectConversation $conversation, User $user, string $body, ?int $parentId = null): DirectMessage
|
||||
{
|
||||
abort_unless(
|
||||
$conversation->participants()->where('user_ref', $user->ownerRef())->exists(),
|
||||
403,
|
||||
);
|
||||
|
||||
return DirectMessage::create([
|
||||
'owner_ref' => $conversation->owner_ref,
|
||||
'conversation_id' => $conversation->id,
|
||||
'sender_ref' => $user->ownerRef(),
|
||||
'sender_name' => $user->name,
|
||||
'body' => trim($body),
|
||||
'parent_id' => $parentId,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user