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 (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
legacy_id TEXT UNIQUE, -- For migration from SQLite
|
||||
name TEXT NOT NULL,
|
||||
email TEXT NOT NULL UNIQUE,
|
||||
avatar_url TEXT,
|
||||
password_hash TEXT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 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_legacy_id ON users(legacy_id);
|
||||
|
||||
-- Enable RLS
|
||||
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
|
||||
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
|
||||
-- ============================================
|
||||
@ -91,12 +83,16 @@ CREATE POLICY "Service role manages reset tokens" ON password_reset_tokens
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS projects (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
legacy_id TEXT UNIQUE, -- For migration from SQLite
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
color TEXT NOT NULL,
|
||||
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
|
||||
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 (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
legacy_id TEXT UNIQUE, -- For migration from SQLite
|
||||
name TEXT NOT NULL,
|
||||
goal TEXT,
|
||||
start_date DATE NOT NULL,
|
||||
@ -132,6 +129,7 @@ CREATE TABLE IF NOT EXISTS sprints (
|
||||
|
||||
-- Create indexes
|
||||
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);
|
||||
|
||||
-- Enable RLS
|
||||
@ -146,6 +144,7 @@ CREATE POLICY "Authenticated users can manage sprints" ON sprints
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS tasks (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
legacy_id TEXT UNIQUE, -- For migration from SQLite
|
||||
title TEXT NOT NULL,
|
||||
description TEXT,
|
||||
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(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
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_name TEXT,
|
||||
updated_by_avatar_url TEXT,
|
||||
assignee_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
||||
assignee_name TEXT,
|
||||
assignee_email TEXT,
|
||||
assignee_avatar_url TEXT,
|
||||
due_date DATE,
|
||||
comments 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_priority ON tasks(priority);
|
||||
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 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
|
||||
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
|
||||
-- ============================================
|
||||
|
||||
Loading…
Reference in New Issue
Block a user