Files

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).