From 7cef787f385ada692bfe731d10b608006db2de2f Mon Sep 17 00:00:00 2001 From: Tao Tien <29749622+taotien@users.noreply.github.com> Date: Wed, 11 Feb 2026 01:18:24 -0800 Subject: [PATCH] use deprecated RLS until views work in bevy_stdb --- .ignore | 1 + Cargo.toml | 4 +++- jong/src/game.rs | 44 ++++++++++++++++----------------------- spacetimedb/src/tables.rs | 12 +++++++++-- 4 files changed, 32 insertions(+), 29 deletions(-) create mode 100644 .ignore diff --git a/.ignore b/.ignore new file mode 100644 index 0000000..c380951 --- /dev/null +++ b/.ignore @@ -0,0 +1 @@ +jong/src/stdb diff --git a/Cargo.toml b/Cargo.toml index c283329..eb2e720 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,9 @@ bevy.default-features = false bevy_ratatui = "0.10.0" bevy_spacetimedb = "0.7" -spacetimedb = "1.11.*" +spacetimedb.version = "1.11.*" +spacetimedb.features = ["unstable"] + spacetimedb-sdk = "1.11.*" strum.version = "0.27.2" diff --git a/jong/src/game.rs b/jong/src/game.rs index 0a0f91e..c00eee6 100644 --- a/jong/src/game.rs +++ b/jong/src/game.rs @@ -45,11 +45,15 @@ impl Plugin for Riichi { .with_uri("http://localhost:3000") .with_module_name("jongline") .with_run_fn(DbConnection::run_threaded) + // TODO why don't I need to call add_reducer? // TODO do these need to be subscription & vice-versa? .add_table(RemoteTables::player) .add_table(RemoteTables::lobby) + + // TODO until views work, we're using RLS .add_table(RemoteTables::hand) + // .add_table_without_pk(RemoteTables::view_player_hand) // semicolon stopper ; @@ -83,7 +87,11 @@ impl Plugin for Riichi { .add_systems(Update, on_player_insert_update) .add_systems(Update, on_lobby_insert_update) // .add_systems(OnEnter(GameState::Lobby), join_or_create_lobby) - .add_systems(Update, view_hand.run_if(in_state(GameState::Play))) + + // TODO figure out how to run_if OR run_if? + .add_systems(Update, on_hand_insert_update.run_if(in_state(GameState::Deal))) + .add_systems(Update, on_hand_insert_update.run_if(in_state(GameState::Play))) + // semicolon stopper ; } @@ -115,7 +123,8 @@ fn subscriptions(stdb: SpacetimeDB) { stdb.identity() ), "SELECT l.* FROM lobby l JOIN player p ON l.host_player_id = p.id".to_string(), - "SELECT * FROM view_player_hand vph".to_string(), + // "SELECT * FROM view_player_hand vph".to_string(), + "SELECT * FROM hand".to_string(), // TODO remove once views work ]); // .subscribe_to_all_tables(); } @@ -130,7 +139,7 @@ fn on_player_insert_update( use player::*; for msg in messages.read() { - debug!("player_insert_update msg:\n{:#?}", msg.new); + // debug!("player_insert_update msg:\n{:#?}", msg.new); if let Some(ref player) = player { // if msg.old.as_ref().is_some_and(|m| !m.ready) && msg.new.ready { // trace!("entered ready"); @@ -152,21 +161,6 @@ fn on_player_insert_update( } } -// fn join_or_create_lobby(stdb: SpacetimeDB) { -// let player = stdb -// .db() -// .player() -// .identity() -// .find(&stdb.identity()) -// .unwrap(); - -// if player.lobby_id == 0 { -// stdb.reducers().join_or_create_lobby(0).unwrap(); -// } else { -// info!("in lobby: {}", player.lobby_id) -// } -// } - fn on_lobby_insert_update( stdb: SpacetimeDB, mut messages: ReadInsertUpdateMessage, @@ -175,7 +169,7 @@ fn on_lobby_insert_update( mut next_gamestate: ResMut>, ) { for msg in messages.read() { - trace!("on_lobby_insert_update msg:\n{:#?}", msg.new); + // trace!("on_lobby_insert_update msg:\n{:#?}", msg.new); let player = stdb .db() @@ -218,19 +212,17 @@ fn on_lobby_insert_update( } } -fn view_hand( +fn on_hand_insert_update( stdb: SpacetimeDB, + mut messages: ReadInsertUpdateMessage, mut commands: Commands, tiles: Query<(&Tile, Entity)>, hand_ent: Single>, ) { - // trace!("view_hand"); - if let Some(view) = stdb.db().view_player_hand().iter().next() { - let mut view = view.tiles.iter().map(Tile::from).collect::>(); - // view.sort(); - debug!("view: {view:?}"); - + for msg in messages.read() { + trace!("view_hand"); + let mut view: Vec<_> = msg.new.tiles.iter().map(Tile::from).collect(); let tiles = tiles .iter() .filter(|(tt, _)| { diff --git a/spacetimedb/src/tables.rs b/spacetimedb/src/tables.rs index 02efc8e..e06de8e 100644 --- a/spacetimedb/src/tables.rs +++ b/spacetimedb/src/tables.rs @@ -1,4 +1,4 @@ -use spacetimedb::{Identity, SpacetimeType, table}; +use spacetimedb::{Filter, Identity, SpacetimeType, client_visibility_filter, table}; use jong_types::*; @@ -63,7 +63,15 @@ pub struct Wall { pub tiles: Vec, } -#[table(name = hand)] +// TODO temp use deprecated RLS instead of view until bevy_spacetimedb supp is better +#[client_visibility_filter] +const HAND_FILTER: Filter = Filter::Sql( + "SELECT h.* FROM hand h + JOIN player p ON h.id = p.hand_id + WHERE p.identity = :sender", +); + +#[table(name = hand, public)] pub struct Hand { #[primary_key] #[auto_inc]