summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-02-15 01:00:13 +0000
committersoryu <soryu@soryu.co>2026-02-15 01:00:13 +0000
commit33a16597aaca4179707d66e5052d4512218627c6 (patch)
treece5bbf6f9ec1b1ab4bc2568a21fb4cf5dd0f9dd0
parent9aadbc7958d39d181c0dd0600e2b7c30bb6c391a (diff)
downloadsoryu-33a16597aaca4179707d66e5052d4512218627c6.tar.gz
soryu-33a16597aaca4179707d66e5052d4512218627c6.zip
Fixup: override order table
-rw-r--r--makima/migrations/20260214000000_create_orders.sql10
-rw-r--r--makima/migrations/20260215000000_create_orders.sql38
2 files changed, 43 insertions, 5 deletions
diff --git a/makima/migrations/20260214000000_create_orders.sql b/makima/migrations/20260214000000_create_orders.sql
index cb2fbae..cbccbe1 100644
--- a/makima/migrations/20260214000000_create_orders.sql
+++ b/makima/migrations/20260214000000_create_orders.sql
@@ -2,7 +2,7 @@
-- Orders represent planned work items (features, bugs, spikes) that can later be
-- attached to directives (as steps) or contracts for execution.
-CREATE TABLE orders (
+CREATE TABLE IF NOT EXISTS orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
owner_id UUID NOT NULL REFERENCES owners(id) ON DELETE CASCADE,
title VARCHAR(500) NOT NULL,
@@ -29,10 +29,10 @@ CREATE TABLE orders (
);
-- Index for listing orders by owner
-CREATE INDEX idx_orders_owner_id ON orders(owner_id);
+CREATE INDEX IF NOT EXISTS idx_orders_owner_id ON orders(owner_id);
-- Composite index for filtering by owner + status (common query pattern)
-CREATE INDEX idx_orders_owner_status ON orders(owner_id, status);
+CREATE INDEX IF NOT EXISTS idx_orders_owner_status ON orders(owner_id, status);
-- Index for looking up orders linked to a directive
-CREATE INDEX idx_orders_directive_id ON orders(directive_id);
+CREATE INDEX IF NOT EXISTS idx_orders_directive_id ON orders(directive_id);
-- Index for looking up orders linked to a contract
-CREATE INDEX idx_orders_contract_id ON orders(contract_id);
+CREATE INDEX IF NOT EXISTS idx_orders_contract_id ON orders(contract_id);
diff --git a/makima/migrations/20260215000000_create_orders.sql b/makima/migrations/20260215000000_create_orders.sql
new file mode 100644
index 0000000..d134801
--- /dev/null
+++ b/makima/migrations/20260215000000_create_orders.sql
@@ -0,0 +1,38 @@
+-- Orders system: card-based issue tracker (similar to Linear/Jira/GitHub Issues).
+-- Orders represent planned work items (features, bugs, spikes) that can later be
+-- attached to directives (as steps) or contracts for execution.
+
+CREATE TABLE orders (
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
+ owner_id UUID NOT NULL REFERENCES owners(id) ON DELETE CASCADE,
+ title VARCHAR(500) NOT NULL,
+ description TEXT,
+ -- Priority: critical > high > medium > low > none
+ priority VARCHAR(32) NOT NULL DEFAULT 'medium'
+ CHECK (priority IN ('critical', 'high', 'medium', 'low', 'none')),
+ -- Status lifecycle: open -> in_progress -> done | archived
+ status VARCHAR(32) NOT NULL DEFAULT 'open'
+ CHECK (status IN ('open', 'in_progress', 'done', 'archived')),
+ -- Type of work item
+ order_type VARCHAR(32) NOT NULL DEFAULT 'feature'
+ CHECK (order_type IN ('feature', 'bug', 'spike', 'chore', 'improvement')),
+ -- Flexible labels stored as JSON array of strings
+ labels JSONB NOT NULL DEFAULT '[]',
+ -- Optional links to directives, directive steps, and contracts
+ directive_id UUID REFERENCES directives(id) ON DELETE SET NULL,
+ directive_step_id UUID REFERENCES directive_steps(id) ON DELETE SET NULL,
+ contract_id UUID REFERENCES contracts(id) ON DELETE SET NULL,
+ -- Repository context
+ repository_url VARCHAR(512),
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
+);
+
+-- Index for listing orders by owner
+CREATE INDEX IF NOT EXISTS idx_orders_owner_id ON orders(owner_id);
+-- Composite index for filtering by owner + status (common query pattern)
+CREATE INDEX IF NOT EXISTS idx_orders_owner_status ON orders(owner_id, status);
+-- Index for looking up orders linked to a directive
+CREATE INDEX IF NOT EXISTS idx_orders_directive_id ON orders(directive_id);
+-- Index for looking up orders linked to a contract
+CREATE INDEX IF NOT EXISTS idx_orders_contract_id ON orders(contract_id);