Files
iddaai-be/mds/changelog-2026-04-22.md
2026-04-22 02:17:02 +03:00

156 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.