server/migrations/0002_kanban.sql
vegard a93ffc6de5 Kanban-brett: PG-adapter, API-ruter, drag & drop UI + multi-workspace seed
- Migrering 0002: kanban_boards, kanban_columns, kanban_cards (REAL-posisjon)
- REST API: CRUD for kolonner, kort, flytt-kort
- PG polling-adapter med optimistisk UI-oppdatering
- KanbanBlock: drag & drop, redigeringsmodal, enkelt kort-input
- WorkspaceSwitcher: data-sveltekit-reload for korrekt workspace-bytte
- Seed: Foreningen Liberalistene som andre test-workspace

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 02:29:46 +01:00

63 lines
2.5 KiB
PL/PgSQL

-- Kanban: brett, kolonner og kort
-- Kort er nodes i kunnskapsgrafen (kan kobles til temaer/aktører senere).
-- Kolonner er IKKE nodes — de er intern struktur for brettet.
-- Posisjon bruker REAL for midtpunkts-innsetting uten re-nummerering.
BEGIN;
-- ============================================================
-- Kanban boards (er nodes → arver workspace via nodes-tabellen)
-- ============================================================
CREATE TABLE kanban_boards (
id UUID PRIMARY KEY REFERENCES nodes(id) ON DELETE CASCADE,
parent_id UUID NOT NULL REFERENCES nodes(id) ON DELETE CASCADE,
name TEXT NOT NULL DEFAULT 'Kanban'
);
CREATE INDEX idx_kanban_boards_parent ON kanban_boards(parent_id);
-- ============================================================
-- Kolonner
-- ============================================================
CREATE TABLE kanban_columns (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
board_id UUID NOT NULL REFERENCES kanban_boards(id) ON DELETE CASCADE,
name TEXT NOT NULL,
color TEXT, -- valgfri hex-fargekode (#ff6b6b)
position REAL NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX idx_kanban_columns_board ON kanban_columns(board_id, position);
-- ============================================================
-- Kort (er nodes → kan kobles i grafen, arver workspace)
-- ============================================================
CREATE TABLE kanban_cards (
id UUID PRIMARY KEY REFERENCES nodes(id) ON DELETE CASCADE,
column_id UUID NOT NULL REFERENCES kanban_columns(id) ON DELETE CASCADE,
title TEXT NOT NULL,
description TEXT,
assignee_id TEXT REFERENCES users(authentik_id) ON DELETE SET NULL,
position REAL NOT NULL DEFAULT 0,
created_by TEXT REFERENCES users(authentik_id) ON DELETE SET NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX idx_kanban_cards_column ON kanban_cards(column_id, position);
CREATE TRIGGER trg_kanban_cards_updated_at BEFORE UPDATE ON kanban_cards
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
-- ============================================================
-- Utvid node_type enum med 'kanban_board' og 'kanban_card'
-- ============================================================
ALTER TYPE node_type ADD VALUE IF NOT EXISTS 'kanban_board';
ALTER TYPE node_type ADD VALUE IF NOT EXISTS 'kanban_card';
COMMIT;