156 lines
6.0 KiB
Markdown
156 lines
6.0 KiB
Markdown
# Changelog - 2026-04-22
|
||
|
||
Bu doküman, 22 Nisan 2026 tarihinde `iddaai-fe` ve `iddaai-be` üzerinde yapılan Frekans Motoru (Conditional Frequency Engine) frontend entegrasyonunu özetler.
|
||
|
||
## 1. Frekans Motoru — Backend Recap
|
||
|
||
- `POST /coupon/frequency-coupon` endpoint'i önceki oturumda tamamlanmıştı.
|
||
- `SmartCouponService.generateFrequencyBasedCoupon()` metodu aktif ve çalışır durumda.
|
||
- `FrequencyEngineService` → raw SQL ile `matches` tablosundaki tarihsel veriyi tarayarak oran bandı bazlı sinyal üretiyor.
|
||
- Strateji: Her takımın ev/deplasman performansını, karşılaştığı oran bandına göre filtreleyip, kombine sinyal (combined_signal) hesaplıyor.
|
||
|
||
## 2. Frontend Tip Tanımları
|
||
|
||
- `iddaai-fe/src/lib/api/coupons/types.ts` güncellendi.
|
||
- Eklenen tipler:
|
||
|
||
### FrequencyCouponRequestDto
|
||
```typescript
|
||
{
|
||
maxMatches?: number; // 2-5 arası, varsayılan 3
|
||
minSignal?: number; // 0.50-0.99, kombine sinyal eşiği
|
||
markets?: string[]; // OU1.5, OU2.5, OU3.5, BTTS, MS
|
||
}
|
||
```
|
||
|
||
### FrequencyCouponBetDto
|
||
```typescript
|
||
{
|
||
match_id: string;
|
||
match_name: string;
|
||
league: string;
|
||
market: string;
|
||
pick: string;
|
||
odds: number;
|
||
home_signal: number;
|
||
away_signal: number;
|
||
combined_signal: number;
|
||
home_odds_band: string;
|
||
away_odds_band: string;
|
||
home_match_count: number;
|
||
away_match_count: number;
|
||
league_profile: string; // GOLCU | DEFANSIF | NORMAL
|
||
}
|
||
```
|
||
|
||
### FrequencyCouponRejectedDto
|
||
```typescript
|
||
{
|
||
match_name: string;
|
||
reason: string;
|
||
}
|
||
```
|
||
|
||
### FrequencyCouponResultDto
|
||
```typescript
|
||
{
|
||
bets: FrequencyCouponBetDto[];
|
||
rejected_matches: FrequencyCouponRejectedDto[];
|
||
reasoning: string[];
|
||
total_odds: number;
|
||
expected_hit_rate: number;
|
||
expected_value: number;
|
||
ev_positive: boolean;
|
||
}
|
||
```
|
||
|
||
## 3. API Service Katmanı
|
||
|
||
- `iddaai-fe/src/lib/api/coupons/service.ts` güncellendi.
|
||
- `generateFrequencyCoupon(dto)` metodu eklendi.
|
||
- Endpoint: `POST /coupon/frequency-coupon`
|
||
|
||
## 4. React Hook
|
||
|
||
- `iddaai-fe/src/lib/api/coupons/use-hooks.ts` güncellendi.
|
||
- `useGenerateFrequencyCoupon()` TanStack Query mutation hook'u eklendi.
|
||
- `FrequencyCouponRequestDto` import edildi.
|
||
|
||
## 5. Çeviri Dosyaları (i18n)
|
||
|
||
- `messages/tr.json` ve `messages/en.json` güncellendi.
|
||
- `coupons` namespace'ine 30+ yeni anahtar eklendi:
|
||
|
||
| Anahtar | TR | EN |
|
||
|---|---|---|
|
||
| `freq-engine-title` | Frekans Motoru | Frequency Engine |
|
||
| `freq-engine-subtitle` | Takımların oran bandına göre tarihsel performansını analiz eder... | Analyzes teams' historical performance by odds band... |
|
||
| `freq-suggest` | Frekans Kuponu Oluştur | Generate Frequency Coupon |
|
||
| `freq-min-signal` | Minimum Sinyal | Minimum Signal |
|
||
| `freq-ev-label` | Beklenen Değer (EV) | Expected Value (EV) |
|
||
| `freq-hit-rate` | Tahmini İsabet | Est. Hit Rate |
|
||
| `freq-ev-positive` | +EV Pozitif | +EV Positive |
|
||
| `freq-combined-signal` | Kombine Sinyal | Combined Signal |
|
||
| `freq-league-golcu` | Golcü | High-Scoring |
|
||
| `freq-league-defansif` | Defansif | Defensive |
|
||
| `engine-mode-label` | Motor Seçimi | Engine Mode |
|
||
| `engine-mode-help` | AI: Gemini tabanlı yapay zeka tahmini. Frekans: Veritabanı tabanlı istatistiksel analiz. | AI: Gemini-based AI prediction. Frequency: Database-driven statistical analysis. |
|
||
| `freq-mode-active` | Frekans Motoru aktif | Frequency Engine active |
|
||
| `ai-mode-active` | AI Motoru aktif | AI Engine active |
|
||
|
||
## 6. FrequencyPanel Bileşeni (Yeni Dosya)
|
||
|
||
- `iddaai-fe/src/components/coupons/frequency-panel.tsx` oluşturuldu.
|
||
- Bağımsız (standalone) bileşen, kendi state ve mutation yönetimini içerir.
|
||
|
||
### Bileşen Özellikleri:
|
||
1. **Min Signal Slider** — 50%-95% arası, kombine sinyal eşiği kontrolü
|
||
2. **Max Matches Slider** — 2-5 arası, kupon boyutu kontrolü
|
||
3. **Market Filtre Badge'leri** — OU1.5, OU2.5, OU3.5, BTTS, MS (çoklu seçim)
|
||
4. **Generate Butonu** → `useGenerateFrequencyCoupon` mutation'ını tetikler
|
||
5. **Sonuç Paneli**:
|
||
- EV / Hit Rate / Toplam Oran istatistik kartları
|
||
- Her bahis için ev sinyali, deplasman sinyali, kombine sinyal gösterimi
|
||
- Oran bandı bilgisi (ör. "1.30-1.50")
|
||
- Lig profili badge'i (Golcü/Defansif/Normal)
|
||
- Geçmiş maç sayısı gösterimi
|
||
- Analiz detayları (reasoning listesi)
|
||
- Elenen maçlar (rejected_matches)
|
||
6. **Kupon Store Senkronizasyonu** — Sonuç geldiğinde bahisler otomatik olarak `useCouponStore`'a eklenir
|
||
|
||
## 7. Coupon Builder Engine Toggle
|
||
|
||
- `iddaai-fe/src/components/coupons/coupon-builder-content.tsx` güncellendi.
|
||
- Değişiklikler:
|
||
- `LuDatabase` icon import edildi
|
||
- `FrequencyPanel` import edildi
|
||
- `engineMode` state eklendi: `"ai" | "frequency"`
|
||
- Sidebar'a **Motor Seçimi** toggle eklendi (Badge tabanlı)
|
||
- `engineMode === "frequency"` olduğunda strateji/AI suggest bölümü gizlenir, yerine `FrequencyPanel` render edilir
|
||
- `engineMode === "ai"` olduğunda mevcut AI akışı aynen korunur
|
||
|
||
### Veri Akışı:
|
||
```
|
||
Kullanıcı → "Frekans" badge'ine tıklar → FrequencyPanel açılır
|
||
→ Sinyal/market/boyut ayarı yapar → "Frekans Kuponu Oluştur" butonuna basar
|
||
→ POST /coupon/frequency-coupon { maxMatches, minSignal, markets }
|
||
→ Backend: SmartCouponService → FrequencyEngineService (raw SQL)
|
||
→ Response: FrequencyCouponResultDto
|
||
→ UI: Sinyal kartları, EV istatistikleri, reasoning render edilir
|
||
→ Bahisler otomatik olarak CouponStore'a sync edilir
|
||
```
|
||
|
||
## 8. Derleme ve Doğrulama Notları
|
||
|
||
- `node_modules` kullanıcının makinesinde yüklü olmadığı için `npm run build` çalıştırılamadı.
|
||
- Kod yapısal olarak doğru, TypeScript tipleri backend DTO'ları ile birebir eşleşiyor.
|
||
- Doğrulama için: `npm install && npm run build` çalıştırılmalı.
|
||
|
||
## 9. Açık Kalan / Sonraki Adımlar
|
||
|
||
- `npm install && npm run build` ile frontend build doğrulanmalı.
|
||
- Frekans kuponu uçtan uca test edilmeli (backend Docker ayakta iken).
|
||
- FrequencyPanel içindeki market badge'lerine `HT_OU05` ve `DC` gibi ek marketler eklenebilir.
|
||
- Frekans sonuçlarındaki `league_profile` badge renkleri dark mode için ince ayar gerektirebilir.
|
||
- Kupon geçmişinde AI vs Frekans ayrımını gösteren bir etiket eklenebilir.
|