Datamodel
Modellen definiëren
Section titled “Modellen definiëren”Een schema definieert velden, defaults, indexen, relaties en toegangsregels. Eén schema()-aanroep levert de tabelregistry van de engine, de SQL-migraties en de types van de client. De types worden uit het schema afgeleid; er is geen codegen-stap.
import { check, filter, model, role, schema, t } from "tapedb/schema";
export default schema({ board: model({ name: t.string(), ownerId: t.string().index(), archived: t.boolean().default(false), columns: t.hasMany("column"), }).access({ read: filter(({ auth }) => ({ ownerId: auth.sub })), update: check(({ auth, row }) => row?.ownerId === auth.sub), delete: role("moderator"), }),
column: model({ name: t.string(), position: t.number().default(0).index(), board: t.belongsTo("board", { onDelete: "cascade" }), tasks: t.hasMany("task"), }),
task: model({ title: t.string(), done: t.boolean().default(false), due: t.date().optional(), meta: t.json().optional(), column: t.belongsTo("column").optional(), }),});Velden
Section titled “Velden”t.string(), t.number(), t.boolean(), t.date() (opgeslagen als epoch-milliseconden) en t.json().
Modifiers: .optional(), .default(value), .index() en .unique().
Relaties: t.belongsTo("model") bezit de foreign key (board slaat boardId op); t.hasMany("model") is de inverse. onDelete kan op een belongs-to-relatie worden gezet.
Elke rij heeft id (client-gegenereerd, tijdgeordend), createdAt en updatedAt.
Toegang
Section titled “Toegang”Toegangsregels horen bij de modeldefinitie, naast de velden. Zie Toegang en identiteit voor de drie regeltypes en hun defaults.