Some checks are pending
dev - build & deploy naar test / build-and-deploy (push) Waiting to run
34 lines
1.4 KiB
SQL
34 lines
1.4 KiB
SQL
-- Initieel schema voor teach.
|
|
-- Dit bestand wordt bij een verse Postgres-container automatisch uitgevoerd
|
|
-- (docker-entrypoint-initdb.d). Bij bestaande databases draai je migraties apart.
|
|
--
|
|
-- Onderstaande tabellen zijn een startpunt: ze weerspiegelen wat nu in
|
|
-- localStorage zit (gebruikers en borden). Pas ze aan zodra de API-vorm vaststaat.
|
|
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
username TEXT NOT NULL UNIQUE,
|
|
role TEXT NOT NULL DEFAULT 'teacher',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS folders (
|
|
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
owner_id BIGINT REFERENCES users(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS boards (
|
|
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
folder_id BIGINT REFERENCES folders(id) ON DELETE SET NULL,
|
|
owner_id BIGINT REFERENCES users(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
-- De volledige bordinhoud (tekeningen, widgets, blokken) als JSON.
|
|
content JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_boards_owner ON boards(owner_id);
|
|
CREATE INDEX IF NOT EXISTS idx_boards_folder ON boards(folder_id);
|