Datenmodelle
Alle Modelle in src/models/. Jedes Modul hat eigene Datei.
NeobetMatch / NeobetLeague
NeobetLeague { country, league, first_match_time?, match_count? }
NeobetMatch { country, league, home_team, away_team, kickoff_time?, date }
Quelle: Neobet Scraper. Verwendet fuer Liga-Matching.
FlashscoreMatch / FlashscoreLeague
FlashscoreMatch {
match_id, home_team, away_team,
home_team_id, away_team_id, // fuer URL-Konstruktion
kickoff_time?, date,
country, league, h2h_url,
final_score? // nur bei beendeten Spielen
}
FlashscoreLeague { country, league, league_id? }
MatchScore { home, away } // Methods: total_goals(), is_over(), is_btts()
AnalyzedMatch (Hauptstruktur)
Das zentrale Datenobjekt nach H2H-Analyse. Wird fuer Scoring + Export verwendet.
AnalyzedMatch {
h2h_url, kickoff_time, match_name, country, league,
// Durchschnitte (venue-specific)
home_avg_scored?, home_avg_conceded?,
away_avg_scored?, away_avg_conceded?,
sum_conceded?, sum_scored?,
// Backtesting
backtesting_result?, // "2:1" bei beendeten Spielen
// Spiele seit letztem Event
games_since_o15_home?, games_since_o15_away?,
games_since_o25_home?, games_since_o25_away?,
games_since_zero_home?, games_since_zero_away?,
// Intervall-Daten (venue + overall)
intervals: MatchIntervals,
// Quoten (alle Maerkte)
odds?: MatchOdds,
}
MatchIntervals
32 Felder: 16 venue-specific + 16 overall. Jedes Feld ist Option<IntervalData>.
Venue-specific: o15_home/away, o25_home/away, o35_home/away, o45_home/away, u05_home/away, u15_home/away, bts_home/away, ots_home/away
Overall: gleiche 8 Typen mit _overall Suffix.
IntervalData {
intervals: Vec<u32>, // Spiele zwischen Events [3,1,2,5]
current_streak: u32, // Spiele seit letztem Event
raw: String, // "3,1,2,5 (2)" fuer CSV
}
// Methods: parse(s), average(), max(), min()
MatchOdds
MatchOdds {
ou_full_time: Vec<OverUnderOdds>, // pro Schwellwert (0.5-4.5)
ou_first_half: Vec<OverUnderOdds>,
ou_second_half: Vec<OverUnderOdds>,
btts?: BttsOdds,
one_x_two?: OneXTwoOdds,
double_chance?: DoubleChanceOdds,
draw_no_bet?: DrawNoBetOdds,
}
// Lookup: ou_ft(2.5), ou_1h(1.5), ou_2h(1.5)
Quoten-Typen:
| Typ | Felder |
|---|---|
| OverUnderOdds | threshold, over, under, bookmaker_count |
| OneXTwoOdds | home, draw, away, bookmaker_count |
| BttsOdds | yes, no, bookmaker_count |
| DoubleChanceOdds | home_draw, home_away, draw_away, bookmaker_count |
| DrawNoBetOdds | home, away, bookmaker_count |
Scoring-Modelle
ScoringResult { date, total_matches, over_picks, under_picks, over_criteria_count=7, under_criteria_count=5 }
Pick { match_name, kickoff_time, country, league, score, max_score, criteria: Vec<ScoringCriterion> }
ScoringCriterion { name, value, rank }
Export-Modelle
ExportConfig { directory="../exports", csv=true, excel=true, filename_prefix="match_data" }
ExportResult { date, match_count, csv_path?, excel_path?, exported_at, scoring? }