Allmine API
Live Stream

Live Stream create — guest block validation

Misafir oluşturma ve block doğrulama kuralları

Live Stream Create Guest Block Validation

Amaç

Bu değişiklik, duo canlı yayın oluşturma akışında creator ile seçilen guest kullanıcılar arasında aktif bir block ilişkisi varsa create işlemini baştan reddetmek için yapıldı.

Temel ihtiyaç şuydu:

  • Creator, kendışıni engellemiş bir kullanıcıyı guest olarak seçerek yayın oluşturmamalı.
  • Creator, kendışınin engellediği bir kullanıcıyı da guest olarak seçerek yayın oluşturmamalı.
  • Bu kontrol yayın oluşturma anında yapılmalı; daha geç bir aşamaya bırakılmamalı.

Problem Neydi

Değişiklikten önce POST /live-stream/create akışında duo yayınlar için şu doğrulamalar vardı:

  • durationGoal var mı
  • guest listesi boş mu
  • creator kendışıni guest olarak eklemiş mi
  • guest kullanıcı gerçekten var mı
  • DUOSELF ise creator bakiyesi guest ücretini karşılıyor mu

Ancak creator ile guest arasında block ilişkisi olup olmadığı kontrol edilmiyordu.

Bu durum şu ürün tutarsızlıklarına yol açabiliyordu:

  • İletişim olarak engelli iki kullanıcı için duo yayın planlanabiliyordu.
  • Kullanıcı arama ve profil gibi akışlarda block kuralı uygulanırken live stream create akışında uygulanmıyordu.
  • Uygulama ileride join veya davet tarafında hata verse bile create aşaması gereksiz yere başarılı olabiliyordu.

Yapılan Değişiklik

Create validation akışına block kontrolü eklendi.

Davranış şu şekilde düzenlendi:

  • Kontrol yalnızca DUOCROWD ve DUOSELF yayın tiplerinde çalışır.
  • guests listesindeki her kullanıcı için creator ile guest arasında çift yönlü communication block var mı bakılır.
  • Bu kontrol mevcut IsCommunicationBlockedUseCase üzerinden yapılır.
  • Herhangi bir guest için block ilişkisi bulunursa create işlemi 400 Bad Request ile reddedilir.

Dönen hata artık localization üzerinden üretilir.

Raw exception key:

live-stream.errors.guest-blocked

Türkçe locale ile görünen mesaj:

Seçilen misafir kullanıcı ile aranızda engel bulunduğu için canlı yayın oluşturulamaz

Etkilenen Akışlar

Bu değişiklik doğrudan aşağıdaki public akışı etkiler:

  • POST /live-stream/create

Bu endpoint içinde artık şu ek kural geçerlidir:

  • liveStreamType = DUOCROWD veya liveStreamType = DUOSELF ise, guest listesinde creator ile block ilişkisi olan herhangi bir kullanıcı bulunamaz.

Bu değişiklik dolaylı olarak aşağıdaki internal akışları da etkiler:

  • CreateLiveStreamUseCase
  • validateLiveStreamCreate(...)
  • LiveStreamModule dependency wiring

Etkilenmeyen Alanlar

Bu değişiklik aşağıdaki alanları etkilemez:

  • SOLO yayın create akışı
  • CreateLiveStreamDto request shape
  • join-as-creator, join-as-guest, join endpoint’leri
  • mevcut guest existence kontrolü
  • mevcut DUOSELF bakiye yeterlilik kontrolü
  • thumbnail, access type, planned start ve funding davranışları

Önemli not:

  • Request/response contract değişmedi.
  • Yalnızca duo create için yeni bir 400 hata senaryosu eklendi.

Teknik Detay

Validation sırası artık duo yayınlar için şu şekildedir:

  1. durationGoal zorunluluğu kontrol edilir.
  2. minimum süre kuralı kontrol edilir.
  3. guests boş mu kontrol edilir.
  4. creator kendışıni guest olarak eklemiş mi kontrol edilir.
  5. guest kullanıcı gerçekten var mı kontrol edilir.
  6. creator ile guest arasında çift yönlü block ilişkisi var mı kontrol edilir.
  7. block yoksa mevcut finansal ve tip bazlı doğrulamalara devam edilir.

Block semantiği özellikle çift yönlü tutuldu:

  • creator guest’i engellediyse hata verilir
  • guest creator’ı engellediyse hata verilir

Birden fazla guest varsa kural şu şekildedir:

  • listedeki herhangi bir guest block ilişkisindeyse create tamamen reddedilir

Teknik tercih olarak yeni repository sorgusu eklenmedi.

Bunun yerine mevcut block modülündeki şu use-case tekrar kullanıldı:

  • IsCommunicationBlockedUseCase

Bu yaklaşımın avantajı:

  • block semantiği tek yerde korunur
  • live-stream katmanı block repository detayına bağımlı hale gelmez
  • users/profile/search gibi mevcut block davranışlarıyla aynı mantık kullanılır

Önceki ve Sonraki Davranış

Önce:

  • Creator block ilişkisi olan bir kullanıcıyı guest olarak seçerek duo yayın oluşturabiliyordu.

Sonra:

  • Creator block ilişkisi olan bir kullanıcıyı guest olarak seçerse create aşamasında hata alır.

Değişmeyen durum:

  • solo yayın oluşturma davranışı aynıdır
  • block ilişkisi olmayan duo yayınlar mevcut akışla oluşturulmaya devam eder
  • DUOSELF bakiye kontrolü block kontrolünden sonra çalışır

Etkilenen Dosyalar

  • src/live-stream/validators/live-stream-create.validate.ts
  • src/live-stream/use-cases/create-live-stream.usecase.ts
  • src/live-stream/live-stream.module.ts
  • src/live-stream/validators/live-stream-create.validate.spec.ts
  • src/live-stream/use-cases/create-live-stream.usecase.spec.ts

Test ve Doğrulama

Değişiklik aşağıdaki testlerle doğrulandı:

  • src/live-stream/validators/live-stream-create.validate.spec.ts
  • src/live-stream/use-cases/create-live-stream.usecase.spec.ts

Doğrulanan ana noktalar:

  • block yoksa duo create validation geçer
  • guest creator’ı engellediyse create reddedilir
  • creator guest’i engellediyse create reddedilir
  • birden fazla guest içinde yalnızca biri block ilişkisindeyse create reddedilir
  • guest bulunamadı kontrolü block kontrolünden önce çalışır
  • create use-case yeni block use-case bağımlılığını validator’a doğru şekilde iletir

Özet

Bu değişiklik sayesinde live stream create akışı, uygulamadaki genel block/iletişim kuralıyla uyumlu hale geldi.

Artık:

  • duo create akışında creator ile guest arasında block ilişkisi varsa işlem başarısız olur
  • request contract değişmez
  • yalnızca duo create için yeni bir 400 Bad Request hata senaryosu eklenmiş olur

On this page