use deprecated RLS until views work in bevy_stdb

This commit is contained in:
Tao Tien 2026-02-11 01:18:24 -08:00
parent f6bd7fd6f7
commit 7cef787f38
4 changed files with 32 additions and 29 deletions

1
.ignore Normal file
View file

@ -0,0 +1 @@
jong/src/stdb

View file

@ -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"

View file

@ -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<stdb::Lobby>,
@ -175,7 +169,7 @@ fn on_lobby_insert_update(
mut next_gamestate: ResMut<NextState<GameState>>,
) {
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<stdb::Hand>,
mut commands: Commands,
tiles: Query<(&Tile, Entity)>,
hand_ent: Single<Entity, With<Hand>>,
) {
// trace!("view_hand");
if let Some(view) = stdb.db().view_player_hand().iter().next() {
let mut view = view.tiles.iter().map(Tile::from).collect::<Vec<_>>();
// 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, _)| {

View file

@ -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<Tile>,
}
#[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]