ultisuite-backend/migrations/000005_data_integrity.up.sql

64 lines
1.9 KiB
SQL

CREATE INDEX IF NOT EXISTS idx_mail_accounts_user_created
ON mail_accounts(user_id, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_messages_account_date
ON messages(account_id, date DESC);
CREATE INDEX IF NOT EXISTS idx_messages_folder_date
ON messages(folder_id, date DESC);
CREATE INDEX IF NOT EXISTS idx_mail_rules_user_active_priority
ON mail_rules(user_id, is_active, priority);
CREATE INDEX IF NOT EXISTS idx_webhook_templates_user_active
ON webhook_templates(user_id, is_active);
CREATE INDEX IF NOT EXISTS idx_outbox_status_created
ON outbox(status, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_outbox_account_status
ON outbox(account_id, status);
CREATE UNIQUE INDEX IF NOT EXISTS uq_mail_accounts_id_user
ON mail_accounts(id, user_id);
CREATE UNIQUE INDEX IF NOT EXISTS uq_mail_folders_id_account
ON mail_folders(id, account_id);
ALTER TABLE messages
ADD CONSTRAINT messages_folder_account_fk
FOREIGN KEY (folder_id, account_id)
REFERENCES mail_folders(id, account_id)
ON DELETE CASCADE
NOT VALID;
ALTER TABLE outbox
ADD CONSTRAINT outbox_account_user_fk
FOREIGN KEY (account_id, user_id)
REFERENCES mail_accounts(id, user_id)
ON DELETE CASCADE
NOT VALID;
ALTER TABLE mail_rules
ADD CONSTRAINT mail_rules_account_user_fk
FOREIGN KEY (account_id, user_id)
REFERENCES mail_accounts(id, user_id)
ON DELETE CASCADE
NOT VALID;
ALTER TABLE attachments
ADD CONSTRAINT attachments_size_nonnegative_chk
CHECK (size >= 0) NOT VALID;
ALTER TABLE messages
ADD CONSTRAINT messages_raw_size_nonnegative_chk
CHECK (raw_size >= 0) NOT VALID;
ALTER TABLE webhook_logs
ADD CONSTRAINT webhook_logs_duration_nonnegative_chk
CHECK (duration_ms >= 0) NOT VALID;
ALTER TABLE outbox
ADD CONSTRAINT outbox_retry_count_nonnegative_chk
CHECK (retry_count >= 0) NOT VALID;