Live Stream
Live Stream reminder — backend
Hatırlatma servisi mimarisi ve zamanlama
Live Stream Reminder - Backend (Minimal)
Endpointler
POST /api/v1/live-stream/:id/reminderDELETE /api/v1/live-stream/:id/reminder- Auth:
Role.USER
Sozlesme
POST body:
{ "minute": 15 }minute:
nullveya0-> yayin gercekten basladiginda (ON_START)1+-> yayin oncesi (BEFORE_START)
Set response data:
{
"streamId": "...",
"minute": 15,
"mode": "BEFORE_START",
"scheduledFor": "2026-03-05T18:45:00.000Z",
"status": "SCHEDULED"
}Cancel response data:
{ "streamId": "...", "cancelled": true }Davranis
- Tek aktif reminder kuralı:
userId + streamId - Ayni user/stream için yeni
POST, onceki secimi replace eder DELETEidempotenttir- Stream terminal durumda ise (
ENDED/EXPIRED/CANCELLED_*) set islemi400
Veri Modeli
Collection: LiveStreamUserReminder
userIdstreamIdminutemode:ON_START | BEFORE_STARTscheduledForstatus:ACTIVE | SENT | CANCELLEDsentAtcreatedAt,updatedAt
Indexler:
- unique:
{ userId: 1, streamId: 1 } - sorgu:
{ streamId: 1, mode: 1, status: 1 }
Queue
- Queue:
user-live-stream-reminders - Job ID:
user-reminder:${streamId}:${userId}
Akis:
minute > 0:plannedStartDate - minutezamanina schedule- Gecmis pencereyse immediate queue
minute = 0: streamACTIVEoldugunda queue
Stream Baslangici Tetikleyicisi
join-live-stream-as-guest içinde stream ACTIVE olunca:
enqueueOnStreamStarted(streamId)
Bu sayede minute=0 reminder sadece gercek baslangicta gönderilir.
Consumer Guardlari
- DB kaydi yoksa skip
status !== ACTIVEise skip- Job payload ile DB (
minute/mode) uyusmazsa stale skip - Gonderim sonrasi
markSentile kapanis
Ana Dosyalar
src/live-stream/schemas/live-stream-user-reminder.schema.tssrc/live-stream/repository/live-stream-user-reminder.repository.tssrc/live-stream/use-cases/set-live-stream-reminder.usecase.tssrc/live-stream/use-cases/cancel-live-stream-reminder.usecase.tssrc/queues/services/user-live-stream-reminder-queue.service.tssrc/queues/consumers/user-live-stream-reminder.consumer.tssrc/live-stream/services/live-stream-user-reminder-notification.service.ts