100 lines
4.9 KiB
Markdown
100 lines
4.9 KiB
Markdown
# tippliga — Domain Models & Operations
|
|
|
|
Core domain package with match, matchday, team, and league models plus operations for creating, updating, and managing the prediction league schedule. All extend `TLWMatchesManagerBase` or `TLWMatchesCreatorBase`.
|
|
|
|
## Base Classes
|
|
|
|
### BaseMatch (`de.jeyp91.BaseMatch`)
|
|
Abstract class with shared match state: team IDs, goals (home/guest/overtime/penalty), datetime, status, KO flag, show-table flag, and a `COMPARISON` enum (`IDENTICAL`, `DIFFERENT`, `DIFFERENT_DATETIME`, `DIFFERENT_RESULT`).
|
|
|
|
Status constants:
|
|
- `STATUS_NOTSTARTED = 0`
|
|
- `STATUS_STARTED = 1`
|
|
- `STATUS_PROVISIONAL_RESULT_AVAILABLE = 2`
|
|
- `STATUS_FINISHED = 3`
|
|
- `STATUS_NOT_EVALUATED = 4`
|
|
|
|
### TLWMatchesCreatorBase
|
|
Abstract creator with `TLWMatches` list, `getSQLInsertString()` generating `REPLACE INTO` queries, `getMatchesForMatchday()`, and `getNumberOfMatchdays()`.
|
|
|
|
### TLWMatchesManagerBase
|
|
Shared helpers used by updaters:
|
|
- Date parsing from TLW (`yyyy-MM-dd HH:mm:ss`) and API-Football (`yyyy-MM-dd'T'HH:mm:ss`) formats
|
|
- `getFirstMatchtimeTLW()` / `getFirstMatchtimeAPIFootball()` — earliest match in a list
|
|
- `getDaysDifference()` — calendar day diff
|
|
- `getMatchesStartingFromSecondDay()` / `getMatchesStartingFromSecondWeek()` — filter helpers for delivery date computation
|
|
- `getMatchingMatch()` — matches an API match to a TLW match by home/guest team IDs
|
|
|
|
## Domain Models
|
|
|
|
### TLWMatch (extends BaseMatch)
|
|
Full match model mapped from `phpbb_footb_matches` table. Multiple constructors:
|
|
- From `ResultSet` (DB query)
|
|
- From `APIFootballMatch` + `TeamIDMatcher` (API sync)
|
|
- Manual constructors for creators
|
|
- Copy constructor
|
|
|
|
Key methods:
|
|
- `getSQLQueryInsert()` / `getSQLQueryReplace()` — generates SQL values
|
|
- `updateMatch(APIFootballMatch)` — updates teams, goals, datetime from API data
|
|
- `isSameMatchPlaceholder()` — matches placeholder config entries to existing matches
|
|
|
|
### TLWMatchday
|
|
Mapped from `phpbb_footb_matchdays`. Fields: season, league, matchday, status, 3 delivery dates, matchday name, match count.
|
|
|
|
### TLWTeam
|
|
Mapped from `phpbb_footb_teams`. Fields: season, league, team ID, name, short name, symbol, group ID, matchday.
|
|
|
|
### TLWLeague
|
|
Mapped from `phpbb_footb_leagues`. Fields: season, league ID, league name, short name.
|
|
|
|
## Operations
|
|
|
|
### TLWMatchesCreatorFootball
|
|
Builds match schedule from API-Football data and JSON config. For each matchday config entry:
|
|
1. Resolves API matches via `APIFootballMatchesProvider`
|
|
2. Creates `TLWMatch` objects with team IDs matched via `TeamIDMatcher`
|
|
3. Fills remaining slots with placeholder matches (empty teams)
|
|
|
|
Handles `deliveryDateMode`: in `"single"` mode, matches beyond the first day get `status = -1` to prevent early betting on later matches.
|
|
|
|
### TLWMatchesCreatorTipperLeague
|
|
Creates matches for tipper-vs-tipper leagues (where tippers are "teams"). Reads pairing config from `Tipper_Match_Pair_Config.json` and tipper-team mapping from `Tipper_Team_Config.json`.
|
|
|
|
### TLWMatchesCreatorTipperPokal
|
|
Creates single-matchday knockout tournament matches from a tipper list config. Each pair of tippers is one match with `koMatch = 1` and `showTable = false`.
|
|
|
|
### TLWMatchesUpdaterFootball
|
|
Compares current DB matches with latest API data and generates SQL UPDATE statements. Only operates on matchdays where the first match is still in the future. Updates:
|
|
- Team IDs (via `TeamIDMatcher`)
|
|
- Match datetimes
|
|
- Status flags (0 = current matchday, -1 = next-day match, -2 = later)
|
|
- `show_table` / `ko_match` flags
|
|
|
|
Also handles:
|
|
- `addMissingMatches()` — inserts API matches not yet in DB (finds placeholder slots by datetime/formula)
|
|
- `addPlaceholderMatches()` — adds config-defined placeholders for TBD matchups
|
|
|
|
### TLWMatchesResultsUpdater
|
|
For finished matches, compares DB goals with API goals and pushes updates to the website via `TippligaWebsiteConnector`. Detects changes to:
|
|
- Full-time goals
|
|
- Overtime goals (for KO matches with `betKOType = 2`)
|
|
- Penalty → overtime mapping (for `betKOType = 1` or `3`)
|
|
- Status transitions from provisional to confirmed
|
|
|
|
### TLWMatchdaysCreator
|
|
Computes delivery dates (betting deadlines) from match times. Supports two modes:
|
|
- **"single"**: one deadline = first match time
|
|
- **"multiple"** (default): 3 deadlines — first match, first match of second day, first match of second week
|
|
|
|
Also handles `additionalDeliveryDate` config flags for special matchday events.
|
|
|
|
### TLWMatchdaysUpdater
|
|
Compares original DB matchdays with recomputed deadlines and generates SQL UPDATEs and Google Calendar syncs. Only updates future matchdays (deadline in the past is skipped).
|
|
|
|
### TLWTeamsCreator
|
|
Extracts unique team IDs from a list of matches and generates `REPLACE INTO phpbb_footb_teams` SQL, preserving group and matchday info from match data.
|
|
|
|
### TLWTeamsUpdater
|
|
Detects teams referenced in matches but not yet present in the league's team table. Generates INSERT SQL to add them (copies team metadata from existing entries in other seasons/leagues).
|