Files
task-team/db/migrations/001_initial_schema.sql
Claude CLI Agent 9d075455e3 Initial: Fastify API + DB schema + collab setup
- Fastify API on :3000 (tasks, groups, auth, connectors)
- PostgreSQL schema: users, tasks, task_groups, goals, connectors
- 8 default task groups
- JWT auth (register/login/me)
- API Bridge framework with webhooks
- CLAUDE.md + polling scripts
- Collab worker integration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 09:57:56 +00:00

110 lines
3.7 KiB
SQL

-- Task Team — Initial Schema — 2026-03-29
-- Extensions
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS pgcrypto;
-- Users
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
email VARCHAR(255) UNIQUE,
phone VARCHAR(50),
name VARCHAR(255) NOT NULL,
avatar_url TEXT,
auth_provider VARCHAR(50) DEFAULT 'email',
auth_provider_id TEXT,
language VARCHAR(5) DEFAULT 'cs',
settings JSONB DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Task groups
CREATE TABLE task_groups (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
name VARCHAR(100) NOT NULL,
color VARCHAR(20) NOT NULL,
icon VARCHAR(10),
order_index INTEGER DEFAULT 0,
time_zones JSONB DEFAULT '[]',
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Tasks
CREATE TABLE tasks (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
group_id UUID REFERENCES task_groups(id) ON DELETE SET NULL,
title VARCHAR(500) NOT NULL,
description TEXT DEFAULT '',
status VARCHAR(20) DEFAULT 'pending',
priority VARCHAR(10) DEFAULT 'medium',
scheduled_at TIMESTAMPTZ,
due_at TIMESTAMPTZ,
completed_at TIMESTAMPTZ,
assigned_to UUID[],
attachments JSONB DEFAULT '[]',
external_id TEXT,
external_source VARCHAR(50),
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Task comments
CREATE TABLE task_comments (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
task_id UUID REFERENCES tasks(id) ON DELETE CASCADE,
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
content TEXT NOT NULL,
is_ai BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Goals
CREATE TABLE goals (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
title VARCHAR(500) NOT NULL,
target_date TIMESTAMPTZ,
progress_pct INTEGER DEFAULT 0,
group_id UUID REFERENCES task_groups(id) ON DELETE SET NULL,
plan JSONB DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Connectors
CREATE TABLE connectors (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
type VARCHAR(50) NOT NULL,
config JSONB DEFAULT '{}',
enabled BOOLEAN DEFAULT true,
last_sync_at TIMESTAMPTZ,
sync_log JSONB DEFAULT '[]',
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Indexes
CREATE INDEX idx_tasks_user ON tasks(user_id);
CREATE INDEX idx_tasks_group ON tasks(group_id);
CREATE INDEX idx_tasks_status ON tasks(status);
CREATE INDEX idx_tasks_scheduled ON tasks(scheduled_at);
CREATE INDEX idx_task_groups_user ON task_groups(user_id);
CREATE INDEX idx_task_comments_task ON task_comments(task_id);
CREATE INDEX idx_goals_user ON goals(user_id);
-- Insert default groups
INSERT INTO task_groups (id, user_id, name, color, icon, order_index, time_zones) VALUES
(uuid_generate_v4(), NULL, 'Prace', '#3B82F6', 'B', 0, '[]'),
(uuid_generate_v4(), NULL, 'Nakup', '#10B981', 'S', 1, '[]'),
(uuid_generate_v4(), NULL, 'Study', '#8B5CF6', 'L', 2, '[]'),
(uuid_generate_v4(), NULL, 'Plany', '#F59E0B', 'M', 3, '[]'),
(uuid_generate_v4(), NULL, 'Sport', '#F97316', 'R', 4, '[]'),
(uuid_generate_v4(), NULL, 'Duchovni', '#D4A017', 'D', 5, '[]'),
(uuid_generate_v4(), NULL, 'Domaci', '#92400E', 'H', 6, '[]'),
(uuid_generate_v4(), NULL, 'Relax', '#06B6D4', 'X', 7, '[]');