Datenmodell
Modelle definieren
Abschnitt betitelt „Modelle definieren“Ein Schema definiert Felder, Defaults, Indizes, Relationen und Zugriffsregeln. Ein schema()-Aufruf erzeugt die Tabellenregistry der Engine, die SQL-Migrationen und die Typen des Clients. Die Typen werden aus dem Schema abgeleitet; es gibt keinen Codegen-Schritt.
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() (als Epoch-Millisekunden gespeichert) und t.json().
Modifikatoren: .optional(), .default(value), .index() und .unique().
Relationen: t.belongsTo("model") besitzt den Foreign Key (board speichert boardId); t.hasMany("model") ist die Inverse. onDelete kann auf einer belongs-to-Relation gesetzt werden.
Jede Zeile trägt id (client-generiert, zeitgeordnet), createdAt und updatedAt.
Zugriff
Abschnitt betitelt „Zugriff“Zugriffsregeln gehören zur Modelldefinition, neben den Feldern. Siehe Zugriff und Identität für die drei Regeltypen und ihre Defaults.