use serde::{Deserialize, Serialize}; /// SBC definition from data/sbcs/*.json #[derive(Debug, Clone, Serialize, Deserialize)] pub struct SbcDefinition { pub id: String, pub name: String, pub description: String, pub requirements: SbcRequirements, pub reward: SbcReward, pub expires_at: Option, pub repeatable: bool, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct SbcRequirements { pub squad_size: u8, pub min_overall: Option, pub max_overall: Option, pub min_chemistry: Option, pub required_leagues: Vec, pub required_nations: Vec, pub required_clubs: Vec, pub min_players_from_same_league: Option, pub min_players_from_same_nation: Option, pub min_players_from_same_club: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct SbcReward { pub coins: i64, pub xp: i64, pub pack_id: Option, } /// DB record of a completed submission. #[derive(Debug, Clone, Serialize, Deserialize, sqlx::FromRow)] pub struct SbcSubmission { pub id: String, pub profile_id: String, pub club_id: Option, pub sbc_id: String, pub submitted_card_ids: String, pub passed: bool, pub submitted_at: String, pub repeatable: bool, } #[derive(Debug, Deserialize)] pub struct SubmitSbcRequest { pub sbc_id: String, pub owned_card_ids: Vec, } #[derive(Debug, Deserialize)] pub struct SaveSbcSquadRequest { pub owned_card_ids: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct SbcSquadState { pub sbc_id: String, pub owned_card_ids: Vec, } #[derive(Debug, Serialize)] pub struct SbcResult { pub passed: bool, pub failures: Vec, pub reward: Option, }