Init All Docs
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
-- Rollback: Remove status and letter_incoming_id columns from letter_incoming_dispositions_department table
|
||||
|
||||
-- Drop the constraint first
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
DROP CONSTRAINT IF EXISTS check_disposition_department_status;
|
||||
|
||||
-- Drop indexes
|
||||
DROP INDEX IF EXISTS idx_letter_incoming_dispositions_department_status;
|
||||
DROP INDEX IF EXISTS idx_letter_incoming_dispositions_department_letter_id;
|
||||
|
||||
-- Drop the columns
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
DROP COLUMN IF EXISTS status;
|
||||
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
DROP COLUMN IF EXISTS letter_incoming_id;
|
||||
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
DROP COLUMN IF EXISTS read_at;
|
||||
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
DROP COLUMN IF EXISTS completed_at;
|
||||
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
DROP COLUMN IF EXISTS updated_at;
|
||||
@@ -0,0 +1,38 @@
|
||||
-- Add status and letter_incoming_id columns to letter_incoming_dispositions_department table
|
||||
|
||||
-- Add letter_incoming_id column
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
ADD COLUMN IF NOT EXISTS letter_incoming_id UUID NOT NULL REFERENCES letters_incoming(id);
|
||||
|
||||
-- Add status column with default value
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
ADD COLUMN IF NOT EXISTS status VARCHAR(50) NOT NULL DEFAULT 'pending';
|
||||
|
||||
-- Add read_at column
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
ADD COLUMN IF NOT EXISTS read_at TIMESTAMP;
|
||||
|
||||
-- Add completed_at column
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
ADD COLUMN IF NOT EXISTS completed_at TIMESTAMP;
|
||||
|
||||
-- Add updated_at column
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
-- Create index for faster queries
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_incoming_dispositions_department_status
|
||||
ON letter_incoming_dispositions_department(department_id, status);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_incoming_dispositions_department_letter_id
|
||||
ON letter_incoming_dispositions_department(letter_incoming_id);
|
||||
|
||||
-- Update existing records to have status 'dispositioned' (assuming existing records are already dispositioned)
|
||||
UPDATE letter_incoming_dispositions_department
|
||||
SET status = 'dispositioned'
|
||||
WHERE status = 'pending';
|
||||
|
||||
-- Add constraint to ensure valid status values
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
ADD CONSTRAINT check_disposition_department_status
|
||||
CHECK (status IN ('pending', 'dispositioned', 'read', 'completed'));
|
||||
@@ -0,0 +1,12 @@
|
||||
BEGIN;
|
||||
|
||||
-- Delete new setting
|
||||
DELETE FROM app_settings WHERE key = 'INCOMING_LETTER_DEPARTMENT_RECIPIENTS';
|
||||
|
||||
-- Restore old setting
|
||||
INSERT INTO app_settings(key, value)
|
||||
VALUES
|
||||
('INCOMING_LETTER_RECIPIENTS', '{"department_codes": ["aslog"]}'::jsonb)
|
||||
ON CONFLICT (key) DO NOTHING;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,18 @@
|
||||
BEGIN;
|
||||
|
||||
-- Delete old setting if exists
|
||||
DELETE FROM app_settings WHERE key = 'INCOMING_LETTER_RECIPIENTS';
|
||||
|
||||
-- Insert new setting with department IDs as a direct array
|
||||
-- Using empty array as placeholder that should be replaced with actual department IDs
|
||||
INSERT INTO app_settings(key, value)
|
||||
VALUES
|
||||
('INCOMING_LETTER_DEPARTMENT_RECIPIENTS', '[]'::jsonb)
|
||||
ON CONFLICT (key) DO NOTHING;
|
||||
|
||||
-- Example to set actual department IDs (uncomment and modify as needed):
|
||||
-- UPDATE app_settings
|
||||
-- SET value = '["ae66af10-bcb7-4939-8110-940d2a387e19"]'::jsonb
|
||||
-- WHERE key = 'INCOMING_LETTER_DEPARTMENT_RECIPIENTS';
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,16 @@
|
||||
BEGIN;
|
||||
|
||||
-- Drop indexes
|
||||
DROP INDEX IF EXISTS idx_users_email;
|
||||
DROP INDEX IF EXISTS idx_user_department_user_id;
|
||||
DROP INDEX IF EXISTS idx_user_department_department_id;
|
||||
DROP INDEX IF EXISTS idx_letter_outgoing_recipients_user_id;
|
||||
DROP INDEX IF EXISTS idx_letter_outgoing_recipients_letter_id;
|
||||
DROP INDEX IF EXISTS idx_letters_outgoing_status;
|
||||
DROP INDEX IF EXISTS idx_letters_outgoing_deleted_at;
|
||||
DROP INDEX IF EXISTS idx_letters_incoming_status;
|
||||
DROP INDEX IF EXISTS idx_letters_incoming_deleted_at;
|
||||
DROP INDEX IF EXISTS idx_letter_incoming_recipients_dept_id;
|
||||
DROP INDEX IF EXISTS idx_letter_incoming_recipients_user_id;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,26 @@
|
||||
BEGIN;
|
||||
|
||||
-- Add index for users.email for faster email lookups
|
||||
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
|
||||
|
||||
-- Add indexes for user_department relationship (singular table name)
|
||||
CREATE INDEX IF NOT EXISTS idx_user_department_user_id ON user_department(user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_user_department_department_id ON user_department(department_id);
|
||||
|
||||
-- Add indexes for letter_outgoing_recipients for faster joins
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_outgoing_recipients_user_id ON letter_outgoing_recipients(user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_outgoing_recipients_letter_id ON letter_outgoing_recipients(letter_id);
|
||||
|
||||
-- Add index for letters_outgoing status queries
|
||||
CREATE INDEX IF NOT EXISTS idx_letters_outgoing_status ON letters_outgoing(status) WHERE deleted_at IS NULL;
|
||||
CREATE INDEX IF NOT EXISTS idx_letters_outgoing_deleted_at ON letters_outgoing(deleted_at);
|
||||
|
||||
-- Add index for letters_incoming status queries
|
||||
CREATE INDEX IF NOT EXISTS idx_letters_incoming_status ON letters_incoming(status) WHERE deleted_at IS NULL;
|
||||
CREATE INDEX IF NOT EXISTS idx_letters_incoming_deleted_at ON letters_incoming(deleted_at);
|
||||
|
||||
-- Add index for letter_incoming_recipients for department lookups
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_incoming_recipients_dept_id ON letter_incoming_recipients(recipient_department_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_incoming_recipients_user_id ON letter_incoming_recipients(recipient_user_id);
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,9 @@
|
||||
BEGIN;
|
||||
|
||||
-- Drop indexes
|
||||
DROP INDEX IF EXISTS idx_user_profiles_user_id;
|
||||
DROP INDEX IF EXISTS idx_departments_id;
|
||||
DROP INDEX IF EXISTS idx_user_department_composite;
|
||||
DROP INDEX IF EXISTS idx_users_id_not_deleted;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,11 @@
|
||||
BEGIN;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_user_profiles_user_id ON user_profiles(user_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_departments_id ON departments(id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_user_department_composite ON user_department(user_id, department_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_users_id_not_deleted ON users(id);
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,20 @@
|
||||
BEGIN;
|
||||
|
||||
-- Remove system user from department (cascade should handle this, but being explicit)
|
||||
DELETE FROM user_department
|
||||
WHERE user_id = '11111111-2222-3333-4444-555555555555'::uuid
|
||||
AND department_id = '11111111-2222-3333-4444-555555555555'::uuid;
|
||||
|
||||
-- Remove system user profile
|
||||
DELETE FROM user_profiles
|
||||
WHERE user_id = '11111111-2222-3333-4444-555555555555'::uuid;
|
||||
|
||||
-- Remove system user
|
||||
DELETE FROM users
|
||||
WHERE id = '11111111-2222-3333-4444-555555555555'::uuid;
|
||||
|
||||
-- Remove system department
|
||||
DELETE FROM departments
|
||||
WHERE id = '11111111-2222-3333-4444-555555555555'::uuid;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,88 @@
|
||||
BEGIN;
|
||||
|
||||
INSERT INTO departments (id, name, code, path, created_at, updated_at)
|
||||
VALUES (
|
||||
'11111111-2222-3333-4444-555555555555'::uuid,
|
||||
'System',
|
||||
'SYSTEM',
|
||||
'system'::ltree,
|
||||
CURRENT_TIMESTAMP,
|
||||
CURRENT_TIMESTAMP
|
||||
) ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
INSERT INTO users (
|
||||
id,
|
||||
username,
|
||||
email,
|
||||
name,
|
||||
password_hash,
|
||||
status,
|
||||
is_active,
|
||||
created_at,
|
||||
updated_at
|
||||
)
|
||||
VALUES (
|
||||
'11111111-2222-3333-4444-555555555555'::uuid,
|
||||
'system',
|
||||
'system@eslogad.internal',
|
||||
'System User',
|
||||
'$2a$10$SYSTEM.USER.SHOULD.NEVER.LOGIN.WITH.PASSWORD.HASH',
|
||||
'active',
|
||||
true,
|
||||
CURRENT_TIMESTAMP,
|
||||
CURRENT_TIMESTAMP
|
||||
) ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- Create user profile for system user
|
||||
INSERT INTO user_profiles (
|
||||
user_id,
|
||||
full_name,
|
||||
display_name,
|
||||
job_title,
|
||||
preferences,
|
||||
notification_prefs,
|
||||
created_at,
|
||||
updated_at
|
||||
)
|
||||
VALUES (
|
||||
'11111111-2222-3333-4444-555555555555'::uuid,
|
||||
'System User',
|
||||
'System',
|
||||
'Automated Process',
|
||||
'{}'::jsonb,
|
||||
'{}'::jsonb,
|
||||
CURRENT_TIMESTAMP,
|
||||
CURRENT_TIMESTAMP
|
||||
) ON CONFLICT (user_id) DO NOTHING;
|
||||
|
||||
-- Link system user to system department
|
||||
INSERT INTO user_department (
|
||||
id,
|
||||
user_id,
|
||||
department_id,
|
||||
is_primary,
|
||||
assigned_at,
|
||||
removed_at
|
||||
)
|
||||
VALUES (
|
||||
gen_random_uuid(),
|
||||
'11111111-2222-3333-4444-555555555555'::uuid,
|
||||
'11111111-2222-3333-4444-555555555555'::uuid,
|
||||
true,
|
||||
CURRENT_TIMESTAMP,
|
||||
NULL
|
||||
) ON CONFLICT (user_id, department_id) WHERE removed_at IS NULL DO NOTHING;
|
||||
|
||||
-- Optionally, create a system role if your application uses roles
|
||||
-- Uncomment and modify if needed:
|
||||
-- INSERT INTO roles (id, code, name, description, created_at, updated_at)
|
||||
-- VALUES (
|
||||
-- gen_random_uuid(),
|
||||
-- 'SYSTEM',
|
||||
-- 'System Role',
|
||||
-- 'Role for system automated processes',
|
||||
-- CURRENT_TIMESTAMP,
|
||||
-- CURRENT_TIMESTAMP
|
||||
-- ) ON CONFLICT (code) DO NOTHING;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,10 @@
|
||||
BEGIN;
|
||||
|
||||
-- Drop the index first
|
||||
DROP INDEX IF EXISTS idx_letter_incoming_disposition_dept_status_notes;
|
||||
|
||||
-- Remove notes column from letter_incoming_disposition_department table
|
||||
ALTER TABLE letter_incoming_disposition_department
|
||||
DROP COLUMN IF EXISTS notes;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,12 @@
|
||||
BEGIN;
|
||||
|
||||
-- Add notes column to letter_incoming_dispositions_department table
|
||||
ALTER TABLE letter_incoming_dispositions_department
|
||||
ADD COLUMN IF NOT EXISTS notes TEXT;
|
||||
|
||||
-- Add index for better performance when querying by status with notes
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_incoming_disposition_dept_status_notes
|
||||
ON letter_incoming_dispositions_department(status)
|
||||
WHERE notes IS NOT NULL;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,17 @@
|
||||
-- Drop indexes for letter_incoming_recipients
|
||||
DROP INDEX IF EXISTS idx_letter_incoming_recipients_archived;
|
||||
DROP INDEX IF EXISTS idx_letter_incoming_recipients_user_archived;
|
||||
DROP INDEX IF EXISTS idx_letter_incoming_recipients_letter_archived;
|
||||
DROP INDEX IF EXISTS idx_letter_incoming_recipients_dept_archived;
|
||||
|
||||
-- Drop indexes for letter_outgoing_recipients
|
||||
DROP INDEX IF EXISTS idx_letter_outgoing_recipients_archived;
|
||||
DROP INDEX IF EXISTS idx_letter_outgoing_recipients_user_archived;
|
||||
DROP INDEX IF EXISTS idx_letter_outgoing_recipients_letter_archived;
|
||||
|
||||
-- Drop the is_archived columns
|
||||
ALTER TABLE letter_incoming_recipients
|
||||
DROP COLUMN IF EXISTS is_archived;
|
||||
|
||||
ALTER TABLE letter_outgoing_recipients
|
||||
DROP COLUMN IF EXISTS is_archived;
|
||||
@@ -0,0 +1,36 @@
|
||||
-- Add is_archived column to letter_incoming_recipients if it doesn't exist
|
||||
ALTER TABLE letter_incoming_recipients
|
||||
ADD COLUMN IF NOT EXISTS is_archived BOOLEAN DEFAULT FALSE;
|
||||
|
||||
-- Add is_archived column to letter_outgoing_recipients if it doesn't exist
|
||||
ALTER TABLE letter_outgoing_recipients
|
||||
ADD COLUMN IF NOT EXISTS is_archived BOOLEAN DEFAULT FALSE;
|
||||
|
||||
-- Add indexes for efficient archiving queries on letter_incoming_recipients
|
||||
-- Note: letter_incoming_recipients uses recipient_user_id and recipient_department_id
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_incoming_recipients_archived
|
||||
ON letter_incoming_recipients(is_archived, recipient_user_id, letter_id)
|
||||
WHERE is_archived = false;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_incoming_recipients_user_archived
|
||||
ON letter_incoming_recipients(recipient_user_id, is_archived, letter_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_incoming_recipients_letter_archived
|
||||
ON letter_incoming_recipients(letter_id, is_archived);
|
||||
|
||||
-- Add indexes for efficient archiving queries on letter_outgoing_recipients
|
||||
-- Note: letter_outgoing_recipients uses user_id and department_id
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_outgoing_recipients_archived
|
||||
ON letter_outgoing_recipients(is_archived, user_id, letter_id)
|
||||
WHERE is_archived = false;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_outgoing_recipients_user_archived
|
||||
ON letter_outgoing_recipients(user_id, is_archived, letter_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_outgoing_recipients_letter_archived
|
||||
ON letter_outgoing_recipients(letter_id, is_archived);
|
||||
|
||||
-- Add composite index for filtering non-archived letters by department
|
||||
CREATE INDEX IF NOT EXISTS idx_letter_incoming_recipients_dept_archived
|
||||
ON letter_incoming_recipients(recipient_department_id, is_archived, letter_id)
|
||||
WHERE is_archived = false;
|
||||
Reference in New Issue
Block a user