Ga naar inhoud

Datamodel

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.

tapedb.schema.ts
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(),
}),
});

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.

Toegangsregels horen bij de modeldefinitie, naast de velden. Zie Toegang en identiteit voor de drie regeltypes en hun defaults.