Skip to content

Views

SpacetimeDB: Views ↗

Views are callable group endpoints with return value types. Sender views use StdbFn.view(...); anonymous views use StdbFn.anonymousView(...).

import * as Effect from "effect/Effect"
import * as Stdb from "effect-spacetimedb"
const user = Stdb.table("user", {
public: true,
columns: {
id: Stdb.string().primaryKey(),
name: Stdb.string(),
},
})
const Users = Stdb.StdbGroup.make("Users")
.add(Stdb.StdbFn.view("self_user", { returns: Stdb.option(user.row) }))
.add(Stdb.StdbFn.anonymousView("all_users", { returns: Stdb.array(user.row) }))
const Module = Stdb.StdbModule.make("app").addTables(user).add(Users)
const { ReadonlyDb, ViewCtx } = Module
const UsersLive = Stdb.StdbBuilder.group(Module, "Users", {
self_user: Effect.fn(function* () {
const ctx = yield* ViewCtx
const db = yield* ReadonlyDb
return yield* db.user.id.find(String(ctx.sender))
}),
all_users: Effect.fn(function* () {
const db = yield* ReadonlyDb
return yield* db.user.toArray()
}),
})

Views are read-only Effect handlers. Sender views may yield ViewCtx; anonymous views may yield AnonymousViewCtx. Both may yield ReadonlyDb and From.