Proje: OkulUp · Hub: OkulUp — Architecture
Chat Real-Time Mimarisi
useRealtimeMessages Hook
const { isTyping, typingUserName } = useRealtimeMessages(conversationId);subscribeToConversation(conversationId, callbacks) ile:
onNewMessage→ React Query cache invalidate (conversation + conversations list)onMessageRead→ conversation cache invalidateonTyping→ typing indicator state
Typing Indicator
- Backend:
POST /api/conversations/:id/typing— kullanıcı yazıyor event’i - Frontend: 3 saniye sonra otomatik clear
TypingIndicatorcomponent — chat ekranında gösteriliyor
Chat Bileşenleri (src/components/modules/chat/)
MessageBubble— mesaj balonu (sent/received)MessageBubbleAttachment— dosya/resim ekli mesajlarMessageComposer— yazma alanı + gönderChatAttachmentButton— dosya/resim ekleme butonuChatAttachmentPreview— seçilen ek önizlemeChatHeader— sohbet başlığı (karşı taraf bilgisi)DateSeparator— tarih ayrımıTypingIndicator— “yazıyor…” göstergesi
Messages List Bileşenleri (src/components/modules/messages/)
ChatListItem— konuşma listesi itemChatListHeader— liste başlığıChatSearchBar— konuşma aramaChatDateSection— tarih bazlı gruplama
Message Routes
app/(tabs)/messages.tsx— konuşma listesiapp/chat/[id].tsx— tek konuşma (gerçek zamanlı)app/message-direct.tsx— yeni direkt mesajapp/message-broadcast.tsx— sınıfa toplu mesaj (STAFF)
Related
- realtime-infrastructure — Echo/WebSocket client
- messaging-system — mesajlaşma domain kuralları