Initial commit: OpenFUT Core

Offline Ultimate Team backend — game-independent REST API.

- 19 API endpoints: auth, profiles, clubs, cards, packs, squads,
  objectives, SBCs, match rewards, NPC market, statistics
- Axum + SQLite + SQLx with full migrations
- Weighted pack generator, SBC validation engine
- JSON-driven mod data (cards, packs, objectives, SBCs)
- 5 integration tests passing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-06-25 14:52:06 -07:00
commit 1ffe0ffa9f
60 changed files with 6152 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
[
{
"id": "daily_play_1_match",
"title": "Daily Match",
"description": "Play 1 match today.",
"objective_type": "daily",
"metric": "matchesplayed",
"target": 1,
"reward_coins": 500,
"reward_pack_id": null,
"reward_xp": 100
},
{
"id": "daily_score_3_goals",
"title": "Hat-Trick Hero",
"description": "Score 3 goals in matches today.",
"objective_type": "daily",
"metric": "goalsscored",
"target": 3,
"reward_coins": 750,
"reward_pack_id": null,
"reward_xp": 150
}
]
+46
View File
@@ -0,0 +1,46 @@
[
{
"id": "lifetime_10_wins",
"title": "10 Victories",
"description": "Win 10 matches total.",
"objective_type": "lifetime",
"metric": "matcheswon",
"target": 10,
"reward_coins": 2000,
"reward_pack_id": "gold_pack",
"reward_xp": 500
},
{
"id": "lifetime_open_5_packs",
"title": "Pack Opener",
"description": "Open 5 packs.",
"objective_type": "lifetime",
"metric": "packsopened",
"target": 5,
"reward_coins": 1000,
"reward_pack_id": null,
"reward_xp": 250
},
{
"id": "lifetime_complete_3_sbcs",
"title": "SBC Enthusiast",
"description": "Complete 3 Squad Building Challenges.",
"objective_type": "lifetime",
"metric": "sbcscompleted",
"target": 3,
"reward_coins": 5000,
"reward_pack_id": "rare_gold_pack",
"reward_xp": 750
},
{
"id": "lifetime_earn_50k_coins",
"title": "Coin Collector",
"description": "Earn 50,000 coins total.",
"objective_type": "lifetime",
"metric": "coinsearned",
"target": 50000,
"reward_coins": 10000,
"reward_pack_id": null,
"reward_xp": 1000
}
]