use spacetimedb::{SpacetimeType, table}; use jong_types::{ states::{GameState, TurnState}, tiles::Tile, }; #[derive(Debug, Clone)] #[table(name = lobby, public)] pub struct Lobby { #[primary_key] #[auto_inc] pub id: u32, #[unique] pub host_player_id: u32, pub players: Vec, pub dealer_idx: u8, pub current_idx: u8, pub game_state: GameState, } #[table(name = wall)] pub struct DbWall { #[primary_key] pub lobby_id: u32, pub tiles: Vec, } #[table(name = tile)] #[derive(Debug, Clone, Copy)] pub struct DbTile { #[primary_key] #[auto_inc] pub id: u32, pub tile: Tile, } #[derive(Debug, Clone, SpacetimeType)] pub enum PlayerOrBot { Player { id: u32 }, Bot { id: u32 }, } #[table(name = advance_state_timer)] pub struct AdvanceStateTimer { #[primary_key] #[auto_inc] scheduled_id: u64, scheduled_at: spacetimedb::ScheduleAt, lobby_id: u32, } // FIXME this shant be public, use views #[table(name = player, public)] #[derive(Debug)] pub struct Player { #[primary_key] pub identity: spacetimedb::Identity, #[unique] #[auto_inc] pub id: u32, pub name: Option, #[index(btree)] pub lobby_id: u32, pub ready: bool, pub turn_state: TurnState, pub sort: bool, pub hand: Vec, pub pond: Vec, pub drawn_tile: Option, } #[table(name = bot)] pub struct Bot { #[primary_key] #[auto_inc] pub id: u32, #[index(btree)] pub lobby_id: u32, pub hand: Vec, pub pond: Vec, pub drawn_tile: Option, }