Files
silo/migrations/007_revision_status.sql

48 lines
1.8 KiB
SQL

-- Migration: Add revision status, labels, and comparison support
-- Phase 1 of enhanced revision control
-- Add status field to revisions
-- Values: 'draft' (default), 'review', 'released', 'obsolete'
ALTER TABLE revisions ADD COLUMN IF NOT EXISTS status TEXT NOT NULL DEFAULT 'draft';
-- Add labels array for arbitrary tags (e.g., 'prototype', 'v1.0', 'customer-approved')
ALTER TABLE revisions ADD COLUMN IF NOT EXISTS labels TEXT[] NOT NULL DEFAULT '{}';
-- Add index for filtering by status
CREATE INDEX IF NOT EXISTS idx_revisions_status ON revisions(status);
-- Add index for label searches (GIN index for array containment queries)
CREATE INDEX IF NOT EXISTS idx_revisions_labels ON revisions USING GIN(labels);
-- Add composite index for common query pattern (item + status)
CREATE INDEX IF NOT EXISTS idx_revisions_item_status ON revisions(item_id, status);
-- Create a view for easy revision comparison data
CREATE OR REPLACE VIEW revision_summary AS
SELECT
r.id,
r.item_id,
i.part_number,
r.revision_number,
r.status,
r.labels,
r.file_key IS NOT NULL AS has_file,
r.file_size,
r.file_checksum,
r.created_at,
r.created_by,
r.comment,
jsonb_object_keys(r.properties) AS property_keys,
(SELECT COUNT(*) FROM jsonb_object_keys(r.properties)) AS property_count
FROM revisions r
JOIN items i ON i.id = r.item_id;
-- Add check constraint for valid status values
ALTER TABLE revisions DROP CONSTRAINT IF EXISTS revisions_status_check;
ALTER TABLE revisions ADD CONSTRAINT revisions_status_check
CHECK (status IN ('draft', 'review', 'released', 'obsolete'));
-- Comment on new columns
COMMENT ON COLUMN revisions.status IS 'Workflow status: draft, review, released, obsolete';
COMMENT ON COLUMN revisions.labels IS 'Arbitrary tags/labels for categorization';