2.8 KiB
2.8 KiB
| id | type | title | tags | importance | confidence | created | updated | relations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4dc83eed-b0b1-4924-b82e-faf352426785 | decision | SBA Scout Rust rewrite Phase 2 complete — API client, sync, and CSV importers |
|
0.8 | 0.8 | 2026-02-28T04:57:59.820017+00:00 | 2026-02-28T05:06:31.878711+00:00 |
|
SBA Scout Rust Rewrite — Phase 2 Complete
Phase 2 (API Client + Sync + CSV Import) committed as 3c70ecc on branch feat/rust-rewrite. 1,580 lines across 6 files.
Files Implemented
api/types.rs(175 lines): Serde response types with#[serde(rename)]for API field mismatches (sname→short_name,wara→swar,gmid→gm_discord_id, etc.)api/client.rs(225 lines):ApiErrorenum (Http/CloudflareBlocked/Request/Parse) +LeagueApiClientwith coreget<T>()and 10 endpoint methodsapi/sync.rs(243 lines):sync_teams(INSERT OR REPLACE),sync_players(ON CONFLICT omittinghandto preserve CSV data),sync_transactions(ON CONFLICT on composite key),sync_allorchestratorapi/importer.rs(666 lines):parse_float/parse_int/parse_endurancehelpers,import_batter_cards(30+ column mapping),import_pitcher_cards(different header names, endurance parsing),import_all_cards(resilient — tries both CSVs independently)
Key Decisions
- Serde rename:
#[serde(rename = "...")]handles API field name mismatches at deserialization layer — cleaner than manual mapping - sync_players ON CONFLICT: Uses
DO UPDATE SET ... (excluding hand column)to preserve hand data from CSV imports while updating all other fields from API - import_all_cards resilience: Doesn't abort if one CSV is missing — tries both independently so partial data is still loaded
- response.text() + serde_json::from_str(): Used instead of
response.json()to properly populateApiError::Parse(serde_json::Error)variant (see related fix memory)
Relates To
- Phase 1 decision: c9add129 (foundation layer — DB schema, queries, config)
- Branch:
feat/rust-rewrite