42 lines
1.6 KiB
SQL
42 lines
1.6 KiB
SQL
-- Add project request/approval workflow fields
|
|
|
|
-- Create enum for project request status
|
|
CREATE TYPE project_request_status AS ENUM ('PENDING', 'APPROVED', 'REJECTED');
|
|
|
|
-- Add columns to projects table for request workflow
|
|
ALTER TABLE projects
|
|
ADD COLUMN IF NOT EXISTS requested_by INTEGER REFERENCES users(id) ON DELETE SET NULL,
|
|
ADD COLUMN IF NOT EXISTS approved_by INTEGER REFERENCES users(id) ON DELETE SET NULL,
|
|
ADD COLUMN IF NOT EXISTS request_status project_request_status,
|
|
ADD COLUMN IF NOT EXISTS requested_at TIMESTAMP,
|
|
ADD COLUMN IF NOT EXISTS approved_at TIMESTAMP,
|
|
ADD COLUMN IF NOT EXISTS rejection_reason TEXT;
|
|
|
|
-- Create index for request status for faster querying of pending requests
|
|
CREATE INDEX idx_projects_request_status ON projects(request_status) WHERE request_status IS NOT NULL;
|
|
CREATE INDEX idx_projects_requested_by ON projects(requested_by) WHERE requested_by IS NOT NULL;
|
|
|
|
-- Comment explaining the workflow:
|
|
-- When a CLIENT creates a project:
|
|
-- - request_status = 'PENDING'
|
|
-- - requested_by = client user_id
|
|
-- - requested_at = NOW()
|
|
-- - status = 'PLANNING'
|
|
--
|
|
-- When an ADMIN/STAFF creates a project:
|
|
-- - request_status = NULL (not a request, directly approved)
|
|
-- - approved_by = creator user_id
|
|
-- - approved_at = NOW()
|
|
-- - status = 'PLANNING'
|
|
--
|
|
-- When ADMIN/STAFF approves a client request:
|
|
-- - request_status = 'APPROVED'
|
|
-- - approved_by = approver user_id
|
|
-- - approved_at = NOW()
|
|
--
|
|
-- When ADMIN/STAFF rejects a client request:
|
|
-- - request_status = 'REJECTED'
|
|
-- - approved_by = approver user_id (who rejected)
|
|
-- - approved_at = NOW()
|
|
-- - rejection_reason = text explaining why
|