Proje: OkulUp API · Hub: OkulUp API — Domain
OkulUp API — Mesajlaşma Sistemi
Conversation Türleri
| Tür | Açıklama |
|---|---|
direct | İki kullanıcı (parent-teacher veya admin dahil) |
group | Sınıf bazlı çok katılımcılı |
broadcast | Öğretmenden sınıfa tek yönlü (veli/öğrenci reply veremez) |
Reply Policy
| Policy | Kim Cevap Verebilir |
|---|---|
everyone | Herkese açık |
teacher_only | Öğretmen + admin + manager |
no_replies | Sadece konuşmayı başlatan öğretmen + admin/manager |
Varsayılan message_reply_default policy → SchoolSetting’den gelir (default: teacher_only).
Conversation Üyelik Kuralları
- Direct:
parent_idveyateacher_idalanına bakılır - Group/Broadcast:
conversation_participantspivot 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_readstablosunda 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.
Related
- feature-flag-sistemi — messaging ve broadcast_messaging flagleri
- bildirim-sistemi — MessageReceived bildirimi
- veritabani-sema — conversations, messages, message_reads tabloları