|
| 1 | +import { schema, t, table } from 'spacetimedb/server'; |
| 2 | + |
| 3 | +const view_pk_player = table( |
| 4 | + { name: 'view_pk_player', public: true }, |
| 5 | + { |
| 6 | + id: t.u64().primaryKey(), |
| 7 | + name: t.string(), |
| 8 | + } |
| 9 | +); |
| 10 | + |
| 11 | +const view_pk_membership = table( |
| 12 | + { name: 'view_pk_membership', public: true }, |
| 13 | + { |
| 14 | + id: t.u64().primaryKey(), |
| 15 | + player_id: t.u64().index('btree'), |
| 16 | + } |
| 17 | +); |
| 18 | + |
| 19 | +const view_pk_membership_secondary = table( |
| 20 | + { name: 'view_pk_membership_secondary', public: true }, |
| 21 | + { |
| 22 | + id: t.u64().primaryKey(), |
| 23 | + player_id: t.u64().index('btree'), |
| 24 | + } |
| 25 | +); |
| 26 | + |
| 27 | +const spacetimedb = schema({ |
| 28 | + view_pk_player, |
| 29 | + view_pk_membership, |
| 30 | + view_pk_membership_secondary, |
| 31 | +}); |
| 32 | +export default spacetimedb; |
| 33 | + |
| 34 | +export const insert_view_pk_player = spacetimedb.reducer( |
| 35 | + { id: t.u64(), name: t.string() }, |
| 36 | + (ctx, { id, name }) => { |
| 37 | + ctx.db.view_pk_player.insert({ id, name }); |
| 38 | + } |
| 39 | +); |
| 40 | + |
| 41 | +export const update_view_pk_player = spacetimedb.reducer( |
| 42 | + { id: t.u64(), name: t.string() }, |
| 43 | + (ctx, { id, name }) => { |
| 44 | + ctx.db.view_pk_player.id.update({ id, name }); |
| 45 | + } |
| 46 | +); |
| 47 | + |
| 48 | +export const insert_view_pk_membership = spacetimedb.reducer( |
| 49 | + { id: t.u64(), player_id: t.u64() }, |
| 50 | + (ctx, { id, player_id }) => { |
| 51 | + ctx.db.view_pk_membership.insert({ id, player_id }); |
| 52 | + } |
| 53 | +); |
| 54 | + |
| 55 | +export const insert_view_pk_membership_secondary = spacetimedb.reducer( |
| 56 | + { id: t.u64(), player_id: t.u64() }, |
| 57 | + (ctx, { id, player_id }) => { |
| 58 | + ctx.db.view_pk_membership_secondary.insert({ id, player_id }); |
| 59 | + } |
| 60 | +); |
| 61 | + |
| 62 | +export const all_view_pk_players = spacetimedb.view( |
| 63 | + { name: 'all_view_pk_players', public: true }, |
| 64 | + t.query(view_pk_player.rowType), |
| 65 | + ctx => { |
| 66 | + return ctx.from.view_pk_player.build(); |
| 67 | + } |
| 68 | +); |
| 69 | + |
| 70 | +export const sender_view_pk_players_a = spacetimedb.view( |
| 71 | + { name: 'sender_view_pk_players_a', public: true }, |
| 72 | + t.query(view_pk_player.rowType), |
| 73 | + ctx => { |
| 74 | + return ctx.from.view_pk_membership |
| 75 | + .rightSemijoin(ctx.from.view_pk_player, (membership, player) => |
| 76 | + membership.player_id.eq(player.id) |
| 77 | + ) |
| 78 | + .build(); |
| 79 | + } |
| 80 | +); |
| 81 | + |
| 82 | +export const sender_view_pk_players_b = spacetimedb.view( |
| 83 | + { name: 'sender_view_pk_players_b', public: true }, |
| 84 | + t.query(view_pk_player.rowType), |
| 85 | + ctx => { |
| 86 | + return ctx.from.view_pk_membership_secondary |
| 87 | + .rightSemijoin(ctx.from.view_pk_player, (membership, player) => |
| 88 | + membership.player_id.eq(player.id) |
| 89 | + ) |
| 90 | + .build(); |
| 91 | + } |
| 92 | +); |
0 commit comments