Allmine API
Live Stream

Live Stream reminder — backend

Hatırlatma servisi mimarisi ve zamanlama

Live Stream Reminder - Backend (Minimal)

Endpointler

  • POST /api/v1/live-stream/:id/reminder
  • DELETE /api/v1/live-stream/:id/reminder
  • Auth: Role.USER

Sozlesme

POST body:

{ "minute": 15 }

minute:

  • null veya 0 -> 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
  • DELETE idempotenttir
  • Stream terminal durumda ise (ENDED/EXPIRED/CANCELLED_*) set islemi 400

Veri Modeli

Collection: LiveStreamUserReminder

  • userId
  • streamId
  • minute
  • mode: ON_START | BEFORE_START
  • scheduledFor
  • status: ACTIVE | SENT | CANCELLED
  • sentAt
  • createdAt, 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 - minute zamanina schedule
  • Gecmis pencereyse immediate queue
  • minute = 0: stream ACTIVE oldugunda 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 !== ACTIVE ise skip
  • Job payload ile DB (minute/mode) uyusmazsa stale skip
  • Gonderim sonrasi markSent ile kapanis

Ana Dosyalar

  • src/live-stream/schemas/live-stream-user-reminder.schema.ts
  • src/live-stream/repository/live-stream-user-reminder.repository.ts
  • src/live-stream/use-cases/set-live-stream-reminder.usecase.ts
  • src/live-stream/use-cases/cancel-live-stream-reminder.usecase.ts
  • src/queues/services/user-live-stream-reminder-queue.service.ts
  • src/queues/consumers/user-live-stream-reminder.consumer.ts
  • src/live-stream/services/live-stream-user-reminder-notification.service.ts

On this page