Signed-off-by: Max <ai-agent@topdoglabs.com>
This commit is contained in:
parent
7d66c99815
commit
9f0ea70a89
@ -9,14 +9,17 @@ CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|||||||
-- ============================================
|
-- ============================================
|
||||||
CREATE TABLE IF NOT EXISTS users (
|
CREATE TABLE IF NOT EXISTS users (
|
||||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
legacy_id TEXT UNIQUE, -- For migration from SQLite
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
email TEXT NOT NULL UNIQUE,
|
email TEXT NOT NULL UNIQUE,
|
||||||
avatar_url TEXT,
|
avatar_url TEXT,
|
||||||
|
password_hash TEXT NOT NULL,
|
||||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Create index on email for faster lookups
|
-- Create index on email for faster lookups
|
||||||
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
|
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_users_legacy_id ON users(legacy_id);
|
||||||
|
|
||||||
-- Enable RLS
|
-- Enable RLS
|
||||||
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
|
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
|
||||||
@ -29,17 +32,6 @@ CREATE POLICY "Users can read own data" ON users
|
|||||||
CREATE POLICY "Users can update own data" ON users
|
CREATE POLICY "Users can update own data" ON users
|
||||||
FOR UPDATE USING (auth.uid() = id);
|
FOR UPDATE USING (auth.uid() = id);
|
||||||
|
|
||||||
-- ============================================
|
|
||||||
-- PROFILES TABLE
|
|
||||||
-- ============================================
|
|
||||||
CREATE TABLE IF NOT EXISTS profiles (
|
|
||||||
id UUID PRIMARY KEY REFERENCES auth.users(id),
|
|
||||||
name TEXT,
|
|
||||||
avatar_url TEXT,
|
|
||||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
||||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
||||||
);
|
|
||||||
|
|
||||||
-- ============================================
|
-- ============================================
|
||||||
-- SESSIONS TABLE
|
-- SESSIONS TABLE
|
||||||
-- ============================================
|
-- ============================================
|
||||||
@ -91,12 +83,16 @@ CREATE POLICY "Service role manages reset tokens" ON password_reset_tokens
|
|||||||
-- ============================================
|
-- ============================================
|
||||||
CREATE TABLE IF NOT EXISTS projects (
|
CREATE TABLE IF NOT EXISTS projects (
|
||||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
legacy_id TEXT UNIQUE, -- For migration from SQLite
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
description TEXT,
|
description TEXT,
|
||||||
color TEXT NOT NULL,
|
color TEXT NOT NULL,
|
||||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
-- Create index for legacy ID lookups
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_projects_legacy_id ON projects(legacy_id);
|
||||||
|
|
||||||
-- Enable RLS
|
-- Enable RLS
|
||||||
ALTER TABLE projects ENABLE ROW LEVEL SECURITY;
|
ALTER TABLE projects ENABLE ROW LEVEL SECURITY;
|
||||||
|
|
||||||
@ -121,6 +117,7 @@ CREATE POLICY "Authenticated users can delete projects" ON projects
|
|||||||
-- ============================================
|
-- ============================================
|
||||||
CREATE TABLE IF NOT EXISTS sprints (
|
CREATE TABLE IF NOT EXISTS sprints (
|
||||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
legacy_id TEXT UNIQUE, -- For migration from SQLite
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
goal TEXT,
|
goal TEXT,
|
||||||
start_date DATE NOT NULL,
|
start_date DATE NOT NULL,
|
||||||
@ -132,6 +129,7 @@ CREATE TABLE IF NOT EXISTS sprints (
|
|||||||
|
|
||||||
-- Create indexes
|
-- Create indexes
|
||||||
CREATE INDEX IF NOT EXISTS idx_sprints_project_id ON sprints(project_id);
|
CREATE INDEX IF NOT EXISTS idx_sprints_project_id ON sprints(project_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_sprints_legacy_id ON sprints(legacy_id);
|
||||||
CREATE INDEX IF NOT EXISTS idx_sprints_dates ON sprints(start_date, end_date);
|
CREATE INDEX IF NOT EXISTS idx_sprints_dates ON sprints(start_date, end_date);
|
||||||
|
|
||||||
-- Enable RLS
|
-- Enable RLS
|
||||||
@ -146,6 +144,7 @@ CREATE POLICY "Authenticated users can manage sprints" ON sprints
|
|||||||
-- ============================================
|
-- ============================================
|
||||||
CREATE TABLE IF NOT EXISTS tasks (
|
CREATE TABLE IF NOT EXISTS tasks (
|
||||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||||
|
legacy_id TEXT UNIQUE, -- For migration from SQLite
|
||||||
title TEXT NOT NULL,
|
title TEXT NOT NULL,
|
||||||
description TEXT,
|
description TEXT,
|
||||||
type TEXT NOT NULL CHECK (type IN ('idea', 'task', 'bug', 'research', 'plan')),
|
type TEXT NOT NULL CHECK (type IN ('idea', 'task', 'bug', 'research', 'plan')),
|
||||||
@ -156,8 +155,15 @@ CREATE TABLE IF NOT EXISTS tasks (
|
|||||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||||
created_by_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
created_by_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
||||||
|
created_by_name TEXT,
|
||||||
|
created_by_avatar_url TEXT,
|
||||||
updated_by_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
updated_by_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
||||||
|
updated_by_name TEXT,
|
||||||
|
updated_by_avatar_url TEXT,
|
||||||
assignee_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
assignee_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
||||||
|
assignee_name TEXT,
|
||||||
|
assignee_email TEXT,
|
||||||
|
assignee_avatar_url TEXT,
|
||||||
due_date DATE,
|
due_date DATE,
|
||||||
comments JSONB NOT NULL DEFAULT '[]'::jsonb,
|
comments JSONB NOT NULL DEFAULT '[]'::jsonb,
|
||||||
tags JSONB NOT NULL DEFAULT '[]'::jsonb,
|
tags JSONB NOT NULL DEFAULT '[]'::jsonb,
|
||||||
@ -171,6 +177,7 @@ CREATE INDEX IF NOT EXISTS idx_tasks_assignee_id ON tasks(assignee_id);
|
|||||||
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
||||||
CREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority);
|
CREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority);
|
||||||
CREATE INDEX IF NOT EXISTS idx_tasks_due_date ON tasks(due_date);
|
CREATE INDEX IF NOT EXISTS idx_tasks_due_date ON tasks(due_date);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_tasks_legacy_id ON tasks(legacy_id);
|
||||||
CREATE INDEX IF NOT EXISTS idx_tasks_updated_at ON tasks(updated_at DESC);
|
CREATE INDEX IF NOT EXISTS idx_tasks_updated_at ON tasks(updated_at DESC);
|
||||||
|
|
||||||
-- Create trigger to auto-update updated_at
|
-- Create trigger to auto-update updated_at
|
||||||
@ -195,6 +202,26 @@ ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;
|
|||||||
CREATE POLICY "Authenticated users can manage tasks" ON tasks
|
CREATE POLICY "Authenticated users can manage tasks" ON tasks
|
||||||
FOR ALL USING (auth.role() = 'authenticated');
|
FOR ALL USING (auth.role() = 'authenticated');
|
||||||
|
|
||||||
|
-- ============================================
|
||||||
|
-- META TABLE (for app state like lastUpdated)
|
||||||
|
-- ============================================
|
||||||
|
CREATE TABLE IF NOT EXISTS meta (
|
||||||
|
key TEXT PRIMARY KEY,
|
||||||
|
value TEXT NOT NULL,
|
||||||
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Enable RLS
|
||||||
|
ALTER TABLE meta ENABLE ROW LEVEL SECURITY;
|
||||||
|
|
||||||
|
-- Policy: All authenticated users can manage meta
|
||||||
|
CREATE POLICY "Authenticated users can manage meta" ON meta
|
||||||
|
FOR ALL USING (auth.role() = 'authenticated');
|
||||||
|
|
||||||
|
-- Insert initial lastUpdated value
|
||||||
|
INSERT INTO meta (key, value) VALUES ('lastUpdated', extract(epoch from now()) * 1000)
|
||||||
|
ON CONFLICT (key) DO UPDATE SET value = excluded.value;
|
||||||
|
|
||||||
-- ============================================
|
-- ============================================
|
||||||
-- FUNCTIONS
|
-- FUNCTIONS
|
||||||
-- ============================================
|
-- ============================================
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user