# Changelog - 2027-04-09

Bu doküman, 2027-04-09 tarihinde `Suggest-Bet-BE` ve `Suggest-Bet-FE` projelerinde yapılan ilgili ürün ve entegrasyon değişikliklerini özetler.

## Kapsam

- Maç detay tahmin kartı (`prediction-card`) UX ve metin iyileştirmeleri
- Kupon oluşturucu (`coupon-builder`) veri akışı ve güvenlik düzeltmeleri
- Backend kupon aday maç filtreleme mantığının sertleştirilmesi
- Frontend locale, tooltip ve okunabilirlik iyileştirmeleri

## Backend Değişiklikleri

### 1. Kupon için uygun maç filtreleme mantığı güçlendirildi

Dosya:
- `src/modules/matches/matches.service.ts`

Yapılanlar:
- `LIVE`, `FINISHED` ve `UPCOMING` mantıkları yardımcı filtrelere ayrıldı.
- `findMatches()` içinde `status === 'UPCOMING'` ve `status === 'NOT_STARTED'` desteği eklendi.
- Varsayılan maç sorguları artık yalnızca kupona uygun yaklaşan maçları döndürecek şekilde sıkılaştırıldı.
- `findUpcomingMatches()` artık:
  - sadece ilgili spor dalını,
  - gelecekteki maçları,
  - canlı olmayan maçları,
  - bitmemiş maçları
  döndürüyor.

Amaç:
- Bitmiş veya canlı maçların yanlışlıkla kupon aday havuzuna düşmesini engellemek.

### 2. Kullanıcıdan gelen match ID listesi backend’de sanitize edilmeye başlandı

Dosyalar:
- `src/modules/matches/matches.service.ts`
- `src/modules/coupons/coupons.controller.ts`

Yapılanlar:
- `filterUpcomingMatchIds()` yardımcı metodu eklendi.
- `/coupon/suggest` ve `/coupon/daily-banko` içinde:
  - kullanıcı `matchIds` gönderse bile
  - sadece henüz başlamamış futbol maçları korunuyor
  - canlı/bitmiş maçlar backend tarafında eleniyor.
- Sanitization sonrası uygun maç kalmazsa kullanıcıya anlamlı hata mesajı dönülüyor.

Amaç:
- UI’de opsiyonel olarak bitmiş maçlar gösterilse bile,
- kupon üretiminde skor, maç sonu durum veya sonradan oluşmuş istatistiklerin AI akışına sızmasını kesin olarak önlemek.

## Frontend Değişiklikleri

### 1. Prediction card okunabilirliği ve fallback mantığı geliştirildi

Dosyalar:
- `Suggest-Bet-FE/src/components/matches/prediction-card.tsx`
- `Suggest-Bet-FE/messages/en.json`
- `Suggest-Bet-FE/messages/tr.json`

Yapılanlar:
- `IntlError: MISSING_MESSAGE` üreten dinamik reason key kullanımı güvenli hale getirildi.
- Locale mesajı varsa çeviri, yoksa güvenli fallback metin kullanılıyor.
- `edge`, `stake` gibi teknik terimler açıklayıcı tooltiplerle desteklendi.
- Market etiketleri locale tabanlı hale getirildi.
- Tahmin kartı daha okunur bir karar paneli yapısına dönüştürüldü:
  - ana öneri
  - güven / oran / stake / play score
  - motor kırılımı
  - alternatif marketler
  - market panosu
  - skor senaryoları

Amaç:
- Kullanıcının API’den gelen tahmin verisini ek açıklama gerektirmeden anlayabilmesi.

### 2. Coupon Builder ekranı yeniden kurgulandı

Dosya:
- `Suggest-Bet-FE/src/components/coupons/coupon-builder-content.tsx`

Yapılanlar:
- Sayfa artık generic maç listesi değil, kupon oluşturma akışına özel bir ekran gibi davranıyor.
- Yaklaşan maçlar:
  - seçilebilir
  - AI’ye manuel havuz olarak gönderilebilir
- Hiç seçim yapılmazsa:
  - sistem tüm uygun yaklaşan futbol maç havuzundan otomatik öneri üretiyor
- Sağ panelde:
  - strateji seçimi
  - seçilen maç havuzu
  - AI önerilen bahisler
  - toplam oran
  - beklenen kazanma oranı
  net şekilde gösteriliyor.
- Bilgi ikonları ve tooltip açıklamaları eklendi.

Amaç:
- Kupon oluşturucu akışını kullanıcı için sezgisel hale getirmek
- “hangi havuzdan öneri üretildi?” sorusunu görünür kılmak

### 3. Bitmiş maçlar opsiyonel referans listesi olarak eklendi

Dosya:
- `Suggest-Bet-FE/src/components/coupons/coupon-builder-content.tsx`

Yapılanlar:
- Kullanıcı isterse bitmiş maçları ayrı bir bölümde görebiliyor.
- Bu bölüm:
  - varsayılan olarak kapalı
  - sadece referans amaçlı
  - salt okunur
  - seçilemez
- UI üzerinde bu maçların tahmine dahil edilmediği açıkça belirtiliyor.

Amaç:
- Kullanıcıya geçmiş görünürlük vermek
- aynı anda tahmin güvenliğini bozmamak

### 4. Kupon API response tipleri güncellendi

Dosyalar:
- `Suggest-Bet-FE/src/lib/api/coupons/types.ts`
- `Suggest-Bet-FE/src/lib/api/coupons/service.ts`
- `Suggest-Bet-FE/src/lib/api/matches/types.ts`

Yapılanlar:
- `/coupon/suggest` response yapısı için ayrı `SmartCouponResultDto` tanımlandı.
- `SuggestedCouponBetDto` ve rejected match tipleri eklendi.
- Match status tipine `UPCOMING` / `NOT_STARTED` desteği eklendi.
- Coupon builder UI’si gerçek API kontratına göre güncellendi.

Amaç:
- Frontend’in gerçek backend response yapısıyla birebir uyumlu çalışması

## Ürün Etkisi

Sonuç olarak:

- Kupon oluşturucu artık bitmiş maçlarla yanlış öneri üretmiyor.
- Backend tarafı güvenlik filtresi sayesinde istemciye güvenmeden doğru maç havuzunu seçiyor.
- Frontend tarafı kullanıcıya:
  - hangi maçların aday olduğunu,
  - hangilerinin sadece referans olduğunu,
  - AI’nin hangi stratejiyle ne önerdiğini
  açık şekilde gösteriyor.
- Prediction card tarafında tahmin verileri daha anlaşılır ve daha stabil hale geldi.

## Doğrulama

Yapılan kontroller:

- Backend:
  - `npm run build` geçti
- Frontend:
  - `npx tsc --noEmit --pretty false --incremental false` geçti

## Not

Frontend repo içinde ayrı bir `mds` klasörü bulunmadığı için bu ortak changelog backend repo içindeki `mds` klasörüne eklendi.
