2026-02-16 00:05:57 -08:00
|
|
|
use spacetimedb::{SpacetimeType, table};
|
2026-02-08 23:47:57 -08:00
|
|
|
|
2026-02-16 00:05:57 -08:00
|
|
|
use jong_types::{
|
|
|
|
|
states::{GameState, TurnState},
|
2026-02-20 03:20:29 -08:00
|
|
|
tiles::Tile,
|
2026-02-16 00:05:57 -08:00
|
|
|
};
|
2026-02-08 23:47:57 -08:00
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
|
#[table(name = lobby, public)]
|
|
|
|
|
pub struct Lobby {
|
|
|
|
|
#[primary_key]
|
|
|
|
|
#[auto_inc]
|
|
|
|
|
pub id: u32,
|
|
|
|
|
|
|
|
|
|
#[unique]
|
|
|
|
|
pub host_player_id: u32,
|
2026-02-16 00:05:57 -08:00
|
|
|
pub players: Vec<PlayerOrBot>,
|
2026-02-13 08:16:41 -08:00
|
|
|
pub dealer_idx: u8,
|
|
|
|
|
pub current_idx: u8,
|
2026-02-08 23:47:57 -08:00
|
|
|
|
|
|
|
|
pub game_state: GameState,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[table(name = wall)]
|
2026-02-12 17:06:28 -08:00
|
|
|
pub struct DbWall {
|
2026-02-08 23:47:57 -08:00
|
|
|
#[primary_key]
|
|
|
|
|
pub lobby_id: u32,
|
|
|
|
|
|
2026-02-12 17:06:28 -08:00
|
|
|
pub tiles: Vec<DbTile>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[table(name = tile)]
|
2026-02-13 07:49:09 -08:00
|
|
|
#[derive(Debug, Clone, Copy)]
|
2026-02-12 17:06:28 -08:00
|
|
|
pub struct DbTile {
|
|
|
|
|
#[primary_key]
|
|
|
|
|
#[auto_inc]
|
|
|
|
|
pub id: u32,
|
|
|
|
|
|
2026-02-16 00:05:57 -08:00
|
|
|
pub tile: Tile,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, SpacetimeType)]
|
|
|
|
|
pub enum PlayerOrBot {
|
|
|
|
|
Player { id: u32 },
|
|
|
|
|
Bot { id: u32 },
|
2026-02-08 23:47:57 -08:00
|
|
|
}
|
2026-02-20 03:20:29 -08:00
|
|
|
|
|
|
|
|
#[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<String>,
|
|
|
|
|
|
|
|
|
|
#[index(btree)]
|
|
|
|
|
pub lobby_id: u32,
|
|
|
|
|
pub ready: bool,
|
|
|
|
|
|
|
|
|
|
pub turn_state: TurnState,
|
|
|
|
|
|
|
|
|
|
pub sort: bool,
|
|
|
|
|
|
|
|
|
|
pub hand: Vec<DbTile>,
|
|
|
|
|
pub pond: Vec<DbTile>,
|
|
|
|
|
|
|
|
|
|
pub drawn_tile: Option<DbTile>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[table(name = bot)]
|
|
|
|
|
pub struct Bot {
|
|
|
|
|
#[primary_key]
|
|
|
|
|
#[auto_inc]
|
|
|
|
|
pub id: u32,
|
|
|
|
|
|
|
|
|
|
#[index(btree)]
|
|
|
|
|
pub lobby_id: u32,
|
|
|
|
|
|
|
|
|
|
pub hand: Vec<DbTile>,
|
|
|
|
|
pub pond: Vec<DbTile>,
|
|
|
|
|
|
|
|
|
|
pub drawn_tile: Option<DbTile>,
|
|
|
|
|
}
|