GH GambleHub

Məzmun kataloqu mühərriki

Kataloq mühərriki oyun vitrinlərinin və promosyon seçimlərinin özəyidir: provayderlərdən (RGS) meta məlumatları toplayır və normallaşdırır, axtarış/filtrələr/sıralamalar təmin edir, yurisdiksiya və brendlərdə əlçatanlıq qaydalarını tətbiq edir, fərdiləşdirmə və promosyon oyunlarını qarışdırır və sonra API vasitəsilə sürətli cavablar verir proqnozlaşdırıla bilən SLO.


1) Məqsədlər və prinsiplər

Sürətli oxu: kataloq/axtarış sorğusu üçün p95 ≤ 100-150 ms.
Həqiqət və təravət: əsas atributların (əlçatanlıq, cekpotlar, provayder statusları) zəmanətli aktuallığı.
Çeviklik: Redaktor kolleksiyaları və buraxılışsız promo slotları.
Uyğunluq: geo/yaş/məzmun qaydaları, lisenziyalar, məsuliyyətli oyun məhdudiyyətləri.
Multi-tenant/region: brendlərin izolyasiyası və data residency.
Müşahidə: emissiya keyfiyyətinin metrikləri, A/B, oyun/bahis çevirmə.


2) Domen modeli (minimum)

Mahiyyətlər:
  • Game - provayderin oyunu/məhsuludur.
  • Provider - RGS/studiya.
  • Variant - bir oyunun variantları (dəyişkənlik, xətlər, limitlər, server).
  • Collection - redaktor/avtomatik seçmə (məsələn, «Yeniliklər», «Cekpotlar»).
  • Placement - səhifədə/slotda sabit mövqe/banner/tayl.
  • Capability/Feature - oyun atributları (free spins, buy feature, jackpot).
  • JurisdictionRule - mövcudluq/məhdudiyyət qaydaları.
  • Siqnallar - davranış/əməliyyat siqnalları (populyarlıq, CTR, revenue).
  • Asset - media (nişanlar, posterlər, demo videolar) cihazlar/sıxlıqlar üçün variantları ilə.

Açarlar: 'game _ id' (sabit daxili, bərabər deyil provider_game_id), 'tenant _ id', 'region', 'locale'.


3) Ingest və normallaşma

Konveyer:

1. Source Adapters (Puller): RGS/studiyalarla inteqrasiya (kataloqlar, fiçlər, RTP, etiketlər).

2. Sanitize & Map: vahid lüğət xarici sahələri mapping (ACL), validasiya və deuplikasiya.

3. Enrich: lokalizasiyalar, kateqoriyalar, semantik etiketlər, yaş məhdudiyyətləri reytinqləri.

4. Moderate: bazarlar üzrə məzmun bayraqları (NSFW/dini simvollar/həssas mövzular).

5. Publish: hadisələr 'GameUpserted/ProviderStatusChanged' → kataloq proyeksiyaları.

İdempotentlik: bütün mesajlar 'source _ id' + 'version _ ts'; yan təsirləri olmadan təkrar emal edilir.
Təkamül sxemi: adapterlərdə 'schema _ version' + mapper miqrasiyaları.


4) Normallaşdırılmış sxem (sadələşdirilmiş)

json
{
"game_id": "g_3f92",
"tenant_id": "brand_eu",
"provider": { "id": "pr_evolution", "name": "Evolution" },
"title": { "en": "Lightning Roulette", "de": "Lightning Roulette" },
"capabilities": ["live","roulette","multiplier","bonus"],
"rtp": 97.3,
"volatility": "high",
"limits": { "min": 0.1, "max": 1000.0, "currency": "EUR" },
"jurisdiction": {
"allowed": ["MT","EE","DE"],
"blocked": ["NL","BE"],
"age_rating": 21
},
"assets": {
"tile": { "1x":"...", "2x":"..." },
"poster": { "web":"...", "mobile":"..." }
},
"tags": ["new","jackpot"],
"release_date": "2025-09-12",
"status": "active",
"variants": [{ "id":"v1","server":"eu-central-1","rtp":97.3 }]
}

5) Axtarış, filtrlər, fasetlər

Indekslər: ad/sinonim tam mətn, 'provider', 'capabilities', 'volatility', 'rtp _ bucket', 'tags' fasetləri.
Filtrlər: yurisdiksiya/region/dil/cihaz/yaş, yalnız aktiv/sertifikatlı.
Sinonimlər/stemminq: istifadəçi terminlərinin xəritəsi («kitablar», «meyvələr», «toplar»).
Çap səhvləri: tolerant search (edit distance ≤ 1-2) uzunluq məhdudiyyəti ilə.


6) Sıralama: siqnallar və formula

Siqnallar (nümunə):
  • Freshness (buraxılış vaxtı).
  • Populyarlıq (başlanğıc/saat, unikal oyunçular).
  • Quality (oyun kataloq CTR, 1/7 gün saxlamaq).
  • Biznes (marketinq bustları, sövdələşmələr, promo slotları).
  • Compliance (zəruri olduqda həssas məzmun üçün yumşaq enişlər).
  • Player-fit (profil uyğunluğu/üstünlükləri).
Kombinasiya (konsepsiya):

score = w1freshness + w2popularity + w3ctr + w4player_fit + w5boost

Çəkilər konfiqurasiya/təcrübələr tərəfindən idarə olunur; bütün siqnallar [0; 1].


7) Personallaşdırma

Qısa yaddaş: son başlanğıclar və janrlar, RYW - istifadəçi dərhal təzə hərəkətləri görür.
Uzun yaddaş: oyun və oyunçu profili embeddingi (oyun janrları/dəyişkənlik/sessiyalar).
Təhlükəsizlik: fərdiləşdirmə heç vaxt yurisdiksiya/yaş qaydalarını pozmur.
Fallback: siqnallar azdırsa - neytral sıralama + redaktor kolleksiyaları.


8) Kolleksiyalar və promosyon oyunlar

Kolleksiyalar:
  • Avtomatik: qayda/sorğu (məsələn, 'capabilities contains' jackpot 'AND release_date> = NOW () -30d').
  • Redaktor: sıra və şərtlərlə əl siyahısı.
  • Pleysmentlər: səhifələrdə sabit mövqelər (hero, row-1-slot-3), A/B, seqmentlər/yurisdiksiyalar üzrə hədəfləmə.
  • Vaxt və prioritetlər: 'starts _ at/ends _ at', münaqişələrin prioriteti, dərc edilməzdən əvvəl preview.

9) Uyğunluq və əlçatanlıq siyasəti

Geo/yurisdiksiya: ölkələrin/regionların ağ/qara siyahıları, lisenziyaların/sertifikatların yoxlanılması.
Yaş reytinqi: minimum yaş, xəbərdarlıq, uyğun olmayan bazarlar üçün gizlətmə.
Mövzu/simvol: ölkələr üzrə həssas məzmun bayraqları (din, alkoqol və s.).
Məsuliyyətli oyun: limitləri olan oyunçular üçün gizlətmə/endirmə/zaman-aut.
Audit: səbəbləri ilə əlçatanlıq dəyişməz log.


10) Multi-tenant və multi-region

Bütün məlumatlar 'tenant _ id' və 'region' ilə qeyd olunur.
İzolyasiya: regionlar üzrə kvorumlar/anbarlar; kross-regional proyeksiyalar - yalnız aqreqatlar.
Fairness: «səs-küylü» marka qalanları gecikdirməmək üçün ingest/per tenant nəşrləri üçün kvotalar.


11) Memarlıq konturu

Write-core kataloq (CP): normallaşdırma + əməliyyat outbox hadisələr.
Proyeksiyalar/Read Models (EC): axtarış indeksləri, materiallaşdırılmış kolleksiyalar, populyarlıq sayğacları.

Cache qatları:
  • «Soyuq» səhifələr/şəkillər üçün Edge/CDN.
  • Qaynar sorğular üçün In-memory caches (key = filters + səhifə + tenant + region).
  • Ficheflags: sıralama qaydalarının/kolleksiyaların buraxılışsız kirayəsi.

12) API (REST/GraphQL, nümunələr)

REST


GET /v1/catalog?tenant=brand_eu&region=EE&locale=ru
&filter=jackpot,true&sort=score_desc&page=1&size=24
→ 200 { items:[...], facets:{...}, as_of:"2025-10-31T12:10:02Z" }

GraphQL

graphql query Catalog($tenant:String!,$region:String!,$q:String,$filters:Filters){
catalog(tenant:$tenant, region:$region, q:$q, filters:$filters){
items { gameId title provider { name } score badges assets { tile } }
facets { providers { key,count } capabilities { key,count } }
freshnessMs
}
}
Müqavilələr:
  • Həmişə 'as _ of/freshnessMs', page, faset qaytarın.
  • Personalizasiya üçün - PII olmadan sessiya markeri (RYW).

13) Siqnallar və məlumat axını

Populyarlıq: oyunların başlaması zamanı inkrementlər → dəqiqəlik baketlər → proyeksiyada aqreqatlar.
CTR/konvertasiya: pleysmentlərdə/kolleksiyalarda klik/başlanğıc sayğacları.
Əməliyyat statusları: provayderlərin sağlamlığı (RGS), cekpotlar/limitlər (hadisə axını).
Marketinq Busts: oyunlar/kateqoriyalar/təchizatçılar üçün vaxt əmsalları.


14) Müşahidə və SLO

Kataloq ölçüləri:
  • `catalog_p95_ms`, `catalog_p99_ms`, `error_rate`.
  • 'index _ freshness _ ms' (layihə gecikməsi), 'ingest _ lag _ ms'.
  • 'ctr', 'click-to-launch', 'collection _ coverage' (kolleksiyaların paylanması%).
Personallaşdırma:
  • `lift_ctr`, `lift_conversion`, «explore vs exploit» доля.
Komplayens:
  • % düzgün tətbiq geo/yaş qaydaları, blokların sayı/saat.

Alertlər: 'ingest _ lag _ ms' böyüməsi, əsas kolleksiyalarda CTR-nin düşməsi, provayderin deqradasiyası (emissiya etiketləri).


15) Performans və caching

Strategiya: isti sorğular - filter açarı ilə 30-120 cache; şəxsi bloklar - qısa TTL (10-30 s) və ya cache olmadan.
Əlillik: hadisələrə görə 'GameUpserted/AvailabilityChanged/PlacementUpdated'.
Paqinasiya: sabit kursorlar, siqnalların yenilənməsi zamanı kartların «atlamaması» üçün.


16) Media ilə iş

Render profilləri: web/mobile/TV üçün ölçülər/sıxlıqlar.
Optimizasiya: WebP/AVIF, lazy-load, plitələr üçün sprite/atlas.
Məzmun təhlükəsizliyi: tarama, su işarələri, inline-PII qadağası.


17) Test

Adapterlər və API üçün Contract/Schema tests.
Relevancy tests: qızıl sorğu dəsti → gözlənilən nəticələr/sifariş.
Personalizasiya: offline AUC/NDCG + online A/B guardrail metrləri ilə (oyun vaxtı, depozitlər, RG siqnalları).
Chaos: provayderlərin deqradasiyası, ingest sıçrayışları, indeksləşdirmə gecikmələri.


18) Playbooks (runbooks)

1. Lag Index> SLO: ikinci dərəcəli kolleksiyaları dayandırmaq, ingest prioritetini artırmaq, reytinqi müvəqqəti sadələşdirmək.
2. «Qırmızı» provayder: aşağı/onun oyun gizlətmək, alternativ kolleksiyaları artırmaq.
3. API səhv sıçrayışı: cache/backend yoxlamaq, qoruyucu taymautları yandırmaq, səhifələrin ölçüsünü azaltmaq.
4. Yanlış mövcudluq: son qaydanı geri götürün, kritik bazarların «ağ siyahısını» daxil edin, dəyişikliklərin auditini keçirin.
5. Release sıralama: kanar rollout (5% → 25% → 50% → 100%), CTR/konversiya geri dönüş.


19) Tipik səhvlər

Siqnalların parçalanması və A/B olmadan sıralamanın yeganə «sehrli» formulu

Provayderlərin xarici sxemlərini daxili model ilə qarışdırın (ACL yoxdur).
Yox 'as _ of/freshness' → «köhnəlmiş» kataloq haqqında mübahisələr.
Yurisdiksiya qaydalarını pozan personallaşdırma.
Caching və kursorsuz böyük səhifələr → p99 «vurur».
Hadisə + proyeksiyalar əvəzinə indeks və OLTP-də dual-write.


20) Satış öncəsi yoxlama siyahısı

  • Bütün provayderlər üçün normallaşdırılmış sahə və ACL lüğəti.
  • İdempotent ingest, outbox/inbox, DLQ və redrave.
  • SLO təravəti ilə kataloq proyeksiyaları və axtarış indeksləri.
  • Idarə olunan tərəzi ilə sıralama, siqnalların parçalanması və A/B
  • Uyğunluq qaydaları (geo/yaş/mövzu) və audit dəyişikliklər.
  • Multi tenant/region: data izolyasiyası, fairness, residency.
  • 'as _ of', fasetlər, kursorlar ilə API; hadisələr üzrə cache və əlillik.
  • p95/p99 metrika, ingest/indeksasiya, CTR/konvertasiya; alertlər.
  • Hadisə Playbook; kanar relizlər və ficheflages.
  • Müvafiq, müqavilə, xaos və personalizasiya testləri.

Nəticə

Kataloq mühərriki oyun məzmunu üzərində "axtarış sistemi + qaydalar sistemi + vitrin 'dir. Güclü ACL, normallaşdırılmış məlumatlar, sürətli oxu proyeksiyaları, şəffaf sıralama siqnalları, guardrail metrləri ilə personalizasiya və ciddi uyğunluq kataloqu davamlı və ölçülə bilən məhsul artım qoluna çevirir - istehsalda sürprizlər olmadan və tənzimləyicilərlə kompromislər olmadan.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.