48 lines
1.8 KiB
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';
|