SpacetimeDB: subscription-erfaringer, refresh med enrichFromPg, whitespace-fiks
- Dokumentert at subscriptions ikke støtter JOINs (feiler stille) - refresh() kaller enrichFromPg() for å hente fersk metadata fra PG - Whitespace-normalisering i autogenererte module_bindings Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
531defe986
commit
88a22e131b
11 changed files with 128 additions and 104 deletions
|
|
@ -107,5 +107,26 @@ Ny modell:
|
|||
- SyncOutbox-events prosesseres hver 1. sekund
|
||||
- Støtter: `messages/insert`, `messages/delete`, `messages/update`, `message_reactions/insert`, `message_reactions/delete`
|
||||
|
||||
## 7. Subscription-begrensninger
|
||||
|
||||
**SpacetimeDB-subscriptions støtter IKKE JOINs.** En subscription-query som `SELECT mr.* FROM message_reaction mr JOIN chat_message cm ON cm.id = mr.message_id WHERE ...` feiler stille — `onApplied` kalles aldri, og ingen data vises.
|
||||
|
||||
Bruk kun enkle `SELECT * FROM tabell WHERE ...`-queries i `.subscribe([...])`. Filtrer heller klient-side etter at data er lastet.
|
||||
|
||||
Eksempel:
|
||||
```typescript
|
||||
// FEIL — feiler stille, ingen data
|
||||
.subscribe([
|
||||
`SELECT * FROM chat_message WHERE channel_id = '${id}'`,
|
||||
`SELECT mr.* FROM message_reaction mr JOIN chat_message cm ON cm.id = mr.message_id WHERE cm.channel_id = '${id}'`
|
||||
]);
|
||||
|
||||
// RIKTIG — last alle reaksjoner, filtrer i koden
|
||||
.subscribe([
|
||||
`SELECT * FROM chat_message WHERE channel_id = '${id}'`,
|
||||
`SELECT * FROM message_reaction`
|
||||
]);
|
||||
```
|
||||
|
||||
### Fallback
|
||||
PG-polling adapter (`pg.svelte.ts`) brukes kun når SpacetimeDB ikke er konfigurert. Markeres som `readonly: true`.
|
||||
|
|
|
|||
|
|
@ -156,3 +156,4 @@ export class DbConnection extends __DbConnectionImpl<typeof REMOTE_MODULE> {
|
|||
return new SubscriptionBuilder(this);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,3 +42,4 @@ export const SyncOutbox = __t.object("SyncOutbox", {
|
|||
synced: __t.bool(),
|
||||
});
|
||||
export type SyncOutbox = __Infer<typeof SyncOutbox>;
|
||||
|
||||
|
|
|
|||
|
|
@ -25,3 +25,4 @@ export type LoadReactionsParams = __Infer<typeof LoadReactionsReducer>;
|
|||
export type MarkSyncedParams = __Infer<typeof MarkSyncedReducer>;
|
||||
export type RemoveReactionParams = __Infer<typeof RemoveReactionReducer>;
|
||||
export type SendMessageParams = __Infer<typeof SendMessageReducer>;
|
||||
|
||||
|
|
|
|||
|
|
@ -325,7 +325,7 @@ export function createSpacetimeChat(
|
|||
edit,
|
||||
delete: del,
|
||||
react,
|
||||
refresh: async () => { rebuildMessages(); },
|
||||
refresh: async () => { rebuildMessages(); await enrichFromPg(); },
|
||||
destroy
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue