syntaxis/core/crates/api/schema.sql

75 lines
2.2 KiB
MySQL
Raw Permalink Normal View History

-- workspace-api database schema
-- SQLite 3.x compatible
-- Users table
CREATE TABLE IF NOT EXISTS users (
id TEXT PRIMARY KEY NOT NULL,
email TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
name TEXT NOT NULL,
role TEXT NOT NULL DEFAULT 'user',
tenant_id TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
-- Checklist items (tasks)
CREATE TABLE IF NOT EXISTS checklist_items (
id TEXT PRIMARY KEY NOT NULL,
project_id TEXT NOT NULL,
phase TEXT,
task_id TEXT,
description TEXT NOT NULL,
completed BOOLEAN NOT NULL DEFAULT 0,
completed_at TEXT,
created_at TEXT NOT NULL,
parent_task_id TEXT,
assignee_id TEXT,
deadline TEXT,
priority TEXT,
tags TEXT
);
-- Task attachments
CREATE TABLE IF NOT EXISTS task_attachments (
id TEXT PRIMARY KEY NOT NULL,
task_id TEXT NOT NULL,
filename TEXT NOT NULL,
file_size INTEGER NOT NULL,
mime_type TEXT NOT NULL,
storage_path TEXT NOT NULL,
uploaded_by TEXT NOT NULL,
uploaded_at TEXT NOT NULL
);
-- Task comments
CREATE TABLE IF NOT EXISTS task_comments (
id TEXT PRIMARY KEY NOT NULL,
task_id TEXT NOT NULL,
user_id TEXT NOT NULL,
content TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
-- Filter presets
CREATE TABLE IF NOT EXISTS filter_presets (
id TEXT PRIMARY KEY NOT NULL,
user_id TEXT NOT NULL,
name TEXT NOT NULL,
filters_json TEXT NOT NULL,
is_default BOOLEAN NOT NULL DEFAULT 0,
created_at TEXT NOT NULL,
updated_at TEXT
);
-- Create indexes for common queries
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
CREATE INDEX IF NOT EXISTS idx_checklist_items_project ON checklist_items(project_id);
CREATE INDEX IF NOT EXISTS idx_checklist_items_task ON checklist_items(task_id);
CREATE INDEX IF NOT EXISTS idx_checklist_items_parent ON checklist_items(parent_task_id);
CREATE INDEX IF NOT EXISTS idx_checklist_items_assignee ON checklist_items(assignee_id);
CREATE INDEX IF NOT EXISTS idx_task_attachments_task ON task_attachments(task_id);
CREATE INDEX IF NOT EXISTS idx_task_comments_task ON task_comments(task_id);
CREATE INDEX IF NOT EXISTS idx_filter_presets_user ON filter_presets(user_id);