Proje: OkulUp API · Hub: OkulUp API — Domain

OkulUp API — Mesajlaşma Sistemi

Conversation Türleri

TürAçıklama
directİki kullanıcı (parent-teacher veya admin dahil)
groupSınıf bazlı çok katılımcılı
broadcastÖğretmenden sınıfa tek yönlü (veli/öğrenci reply veremez)

Reply Policy

PolicyKim Cevap Verebilir
everyoneHerkese açık
teacher_onlyÖğretmen + admin + manager
no_repliesSadece konuşmayı başlatan öğretmen + admin/manager

Varsayılan message_reply_default policy → SchoolSetting’den gelir (default: teacher_only).

Conversation Üyelik Kuralları

  • Direct: parent_id veya teacher_id alanına bakılır
  • Group/Broadcast: conversation_participants pivot tablosu

Direct konuşmada admin varsa, admin olmayan kullanıcılar cevap veremez (hasAdminParticipant() kontrolü).

Okunmamış Mesaj Sayımı

Message::scopeUnreadForUser() — karmaşık bir sorgu:

  • sender_id != user_id (kendi mesajları sayılmaz)
  • message_reads tablosunda user kaydı yok
  • Legacy uyum için: direct konuşmalarda read_at IS NULL (eski yöntem)

Real-time (WebSocket)

Laravel Reverb v1 ile broadcasting yapılıyor. Channels route’ları routes/channels.php’de, prefix api, auth sanctum.

Feature Flag

feature:messaging — varsayılan ON. Kapalıysa tüm mesajlaşma endpointleri 403 döner.
feature:broadcast_messaging — toplu mesaj için ayrı flag.

Typing Indicator

POST /conversations/{id}/typing — WebSocket üzerinden typing event yayınlar.