NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Messages for Laravel

Schránka a potvrdenia o prečítaní

Messages::inboxFor() vráti stránkovanie vlákien účastníka — od najnovšej aktivity — s prednačítanou poslednou správou (aj jej odosielateľom), účastníkmi a počtom unread_count pre každé vlákno, takže bočný panel chatu sa vykreslí bez N+1 dopytov:

use RoundlyConsulting\Messages\Facades\Messages;

$inbox = Messages::inboxFor($bob, perPage: 20);

foreach ($inbox as $thread) {
    $thread->unread_count;            // integer
    $thread->latestMessagePreview();  // short, type-aware preview string
}

Každé vlákno nesie denormalizovaný ukazovateľ last_message_id, takže načítanie poslednej správy je jedno indexované vyhľadanie na stránku namiesto prechodu všetkými správami všetkých vlákien — schránka zostáva rýchla aj pri raste vlákien. Ukazovateľ sa aktualizuje automaticky pri každom odoslaní, úprave, zrušení odoslania, obnovení aj prune; nikdy ho neudržiavate sami.

Podkladový scope je verejný, takže doň môžete pridať vlastné podmienky:

use RoundlyConsulting\Messages\Models\Thread;

// The same query as a scope — add your own constraints on top
Thread::query()->inboxFor($bob)->whereNull('archived_at')->paginate(20);

Pomocníci vlákna a správy

$thread->markReadFor($bob);          // same as Messages::markRead($thread, $bob)
$thread->latestMessagePreview();     // null when the thread is empty
$message->isReadBy($bob);            // has $bob read up to this message?

Potvrdenia o prečítaní a počty neprečítaných

$thread->unreadCountFor($user);   // messages $user hasn't read (excludes their own)
$thread->seenBy($message);        // participants whose read pointer is at/after $message

$participant->hasUnread();
$participant->markAsRead();       // same as Messages::markRead() for that participant

Stav prečítania sa riadi ukazovateľom prečítania každého účastníka, last_read_message_id — správou, po ktorú sa dostal, keď vlákno naposledy označil ako prečítané. Správa je neprečítaná, ak je zoradená za touto správou (podľa created_at, potom podľa kľúča) alebo účastník ešte nič nečítal, a zároveň nie je jej odosielateľom; systémové správy bez odosielateľa sa rátajú pre všetkých. read_at zaznamenáva len to, kedy čítal, takže odpoveď, ktorá príde v tej istej sekunde ako prečítanie, sa stále ráta ako neprečítaná. Ak sa správa ukazovateľa neskôr zmaže cez prune, zastúpi ju read_at.

Správy v zmazanom vlákne sa nerátajú nikdy — globálne unreadCount() sa zhoduje so schránkou.

Označenie vlákna ako prečítaného

Messages::markRead($thread, $bob);            // facade
Messages::thread($thread)->markRead($bob);    // thread handle
$bob->markThreadRead($thread);                // HasMessaging
$thread->markReadFor($bob);                   // thread helper
$participant->markAsRead();                   // participant row
// all go through the manager: MarkRead runs, ThreadRead fires, the fake records it

Označenie presunie ukazovateľ na najnovšiu správu vlákna a do read_at zapíše aktuálny čas. Všetky uvedené cesty sú tá istá operácia — vrátane Participant::markAsRead() — takže sa spustí ThreadRead a Messages::fake() ju zaznamená; markAsRead() vyhodí ParticipationException::participantMissing(), ak jeho model už neexistuje. Označenie pre model, ktorý vo vlákne nie je, vyhodí ParticipationException::notAParticipant().

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.