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:
@@ -0,0 +1,189 @@
|
||||
[
|
||||
{
|
||||
"id": "card_bronze_001",
|
||||
"name": "Lucas Santos",
|
||||
"overall": 62,
|
||||
"position": "ST",
|
||||
"nation": "Brazil",
|
||||
"league": "Serie B",
|
||||
"club": "Santos FC",
|
||||
"pace": 72,
|
||||
"shooting": 61,
|
||||
"passing": 52,
|
||||
"dribbling": 63,
|
||||
"defending": 30,
|
||||
"physical": 64,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_bronze_002",
|
||||
"name": "Marco Ferri",
|
||||
"overall": 60,
|
||||
"position": "CM",
|
||||
"nation": "Italy",
|
||||
"league": "Serie C",
|
||||
"club": "Modena FC",
|
||||
"pace": 58,
|
||||
"shooting": 52,
|
||||
"passing": 63,
|
||||
"dribbling": 59,
|
||||
"defending": 55,
|
||||
"physical": 60,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_bronze_003",
|
||||
"name": "Eko Jabari",
|
||||
"overall": 61,
|
||||
"position": "CB",
|
||||
"nation": "Nigeria",
|
||||
"league": "NPFL",
|
||||
"club": "Kano Pillars",
|
||||
"pace": 60,
|
||||
"shooting": 25,
|
||||
"passing": 48,
|
||||
"dribbling": 42,
|
||||
"defending": 64,
|
||||
"physical": 70,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_bronze_004",
|
||||
"name": "Pieter Van Dijk",
|
||||
"overall": 63,
|
||||
"position": "LB",
|
||||
"nation": "Netherlands",
|
||||
"league": "Eerste Divisie",
|
||||
"club": "FC Volendam",
|
||||
"pace": 65,
|
||||
"shooting": 38,
|
||||
"passing": 60,
|
||||
"dribbling": 61,
|
||||
"defending": 65,
|
||||
"physical": 62,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_bronze_005",
|
||||
"name": "Tomás Ruiz",
|
||||
"overall": 62,
|
||||
"position": "GK",
|
||||
"nation": "Spain",
|
||||
"league": "Segunda B",
|
||||
"club": "SD Compostela",
|
||||
"pace": 40,
|
||||
"shooting": 10,
|
||||
"passing": 35,
|
||||
"dribbling": 20,
|
||||
"defending": 62,
|
||||
"physical": 58,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_bronze_006",
|
||||
"name": "James Okafor",
|
||||
"overall": 60,
|
||||
"position": "RM",
|
||||
"nation": "Ghana",
|
||||
"league": "Ghana Premier League",
|
||||
"club": "Asante Kotoko",
|
||||
"pace": 75,
|
||||
"shooting": 55,
|
||||
"passing": 58,
|
||||
"dribbling": 66,
|
||||
"defending": 32,
|
||||
"physical": 55,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_bronze_007",
|
||||
"name": "Stefan Kovac",
|
||||
"overall": 61,
|
||||
"position": "CDM",
|
||||
"nation": "Serbia",
|
||||
"league": "Super liga Srbije",
|
||||
"club": "FK Partizan",
|
||||
"pace": 55,
|
||||
"shooting": 50,
|
||||
"passing": 60,
|
||||
"dribbling": 56,
|
||||
"defending": 63,
|
||||
"physical": 68,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_bronze_008",
|
||||
"name": "Hiroshi Tanaka",
|
||||
"overall": 63,
|
||||
"position": "CAM",
|
||||
"nation": "Japan",
|
||||
"league": "J2 League",
|
||||
"club": "Gamba Osaka",
|
||||
"pace": 68,
|
||||
"shooting": 60,
|
||||
"passing": 66,
|
||||
"dribbling": 70,
|
||||
"defending": 38,
|
||||
"physical": 52,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_bronze_009",
|
||||
"name": "Aleksei Morozov",
|
||||
"overall": 60,
|
||||
"position": "RB",
|
||||
"nation": "Russia",
|
||||
"league": "FNL",
|
||||
"club": "Torpedo Moscow",
|
||||
"pace": 62,
|
||||
"shooting": 40,
|
||||
"passing": 56,
|
||||
"dribbling": 58,
|
||||
"defending": 62,
|
||||
"physical": 60,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_bronze_010",
|
||||
"name": "Kwame Asante",
|
||||
"overall": 62,
|
||||
"position": "LM",
|
||||
"nation": "Ghana",
|
||||
"league": "Ghana Premier League",
|
||||
"club": "Hearts of Oak",
|
||||
"pace": 73,
|
||||
"shooting": 58,
|
||||
"passing": 60,
|
||||
"dribbling": 65,
|
||||
"defending": 35,
|
||||
"physical": 58,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_bronze_011",
|
||||
"name": "Ivan Petrov",
|
||||
"overall": 61,
|
||||
"position": "CB",
|
||||
"nation": "Bulgaria",
|
||||
"league": "First League",
|
||||
"club": "CSKA Sofia",
|
||||
"pace": 58,
|
||||
"shooting": 22,
|
||||
"passing": 50,
|
||||
"dribbling": 44,
|
||||
"defending": 63,
|
||||
"physical": 67,
|
||||
"rarity": "bronze",
|
||||
"image_path": null
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,87 @@
|
||||
[
|
||||
{
|
||||
"id": "card_gold_001",
|
||||
"name": "Alejandro Vargas",
|
||||
"overall": 82,
|
||||
"position": "ST",
|
||||
"nation": "Argentina",
|
||||
"league": "Primera Division",
|
||||
"club": "River Plate",
|
||||
"pace": 85,
|
||||
"shooting": 84,
|
||||
"passing": 72,
|
||||
"dribbling": 80,
|
||||
"defending": 40,
|
||||
"physical": 78,
|
||||
"rarity": "gold",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_gold_002",
|
||||
"name": "Thomas Beaumont",
|
||||
"overall": 80,
|
||||
"position": "CM",
|
||||
"nation": "France",
|
||||
"league": "Ligue 2",
|
||||
"club": "FC Toulouse",
|
||||
"pace": 72,
|
||||
"shooting": 74,
|
||||
"passing": 83,
|
||||
"dribbling": 78,
|
||||
"defending": 68,
|
||||
"physical": 74,
|
||||
"rarity": "gold",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_gold_003",
|
||||
"name": "Dimitri Kovalenko",
|
||||
"overall": 81,
|
||||
"position": "CB",
|
||||
"nation": "Ukraine",
|
||||
"league": "Premier League UA",
|
||||
"club": "Shakhtar Donetsk",
|
||||
"pace": 75,
|
||||
"shooting": 38,
|
||||
"passing": 65,
|
||||
"dribbling": 60,
|
||||
"defending": 83,
|
||||
"physical": 82,
|
||||
"rarity": "gold",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_gold_004",
|
||||
"name": "Felipe Moura",
|
||||
"overall": 83,
|
||||
"position": "LW",
|
||||
"nation": "Brazil",
|
||||
"league": "Brasileirao",
|
||||
"club": "Palmeiras",
|
||||
"pace": 88,
|
||||
"shooting": 80,
|
||||
"passing": 76,
|
||||
"dribbling": 86,
|
||||
"defending": 44,
|
||||
"physical": 68,
|
||||
"rarity": "gold",
|
||||
"image_path": null
|
||||
},
|
||||
{
|
||||
"id": "card_gold_005",
|
||||
"name": "Lars Eriksson",
|
||||
"overall": 79,
|
||||
"position": "GK",
|
||||
"nation": "Sweden",
|
||||
"league": "Allsvenskan",
|
||||
"club": "Malmo FF",
|
||||
"pace": 45,
|
||||
"shooting": 12,
|
||||
"passing": 58,
|
||||
"dribbling": 32,
|
||||
"defending": 80,
|
||||
"physical": 76,
|
||||
"rarity": "gold",
|
||||
"image_path": null
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,19 @@
|
||||
[
|
||||
{
|
||||
"id": "card_icon_loan_001",
|
||||
"name": "The Maestro (Loan)",
|
||||
"overall": 94,
|
||||
"position": "CAM",
|
||||
"nation": "France",
|
||||
"league": "Icons",
|
||||
"club": "Icons",
|
||||
"pace": 82,
|
||||
"shooting": 88,
|
||||
"passing": 95,
|
||||
"dribbling": 92,
|
||||
"defending": 60,
|
||||
"physical": 72,
|
||||
"rarity": "icon",
|
||||
"image_path": null
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user