52 lines
2.7 KiB
SQL
52 lines
2.7 KiB
SQL
CREATE TABLE IF NOT EXISTS channel_api (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
inbox_id BIGINT NOT NULL UNIQUE REFERENCES inboxes(id) ON DELETE CASCADE,
|
|
webhook_url VARCHAR(512),
|
|
secret VARCHAR(255),
|
|
hmac_token VARCHAR(255),
|
|
hmac_mandatory BOOLEAN DEFAULT FALSE,
|
|
additional_attributes JSONB DEFAULT '{}'::jsonb,
|
|
identifier VARCHAR(255),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS channel_shangwutong_configs (
|
|
inbox_id BIGINT PRIMARY KEY REFERENCES inboxes(id) ON DELETE CASCADE,
|
|
session_id VARCHAR(64) NOT NULL,
|
|
username VARCHAR(255) NOT NULL,
|
|
password TEXT NOT NULL,
|
|
desired_presence VARCHAR(20) NOT NULL DEFAULT 'online',
|
|
config_version BIGINT NOT NULL DEFAULT 1,
|
|
actual_presence VARCHAR(20) NOT NULL DEFAULT 'offline',
|
|
connection_status VARCHAR(40) NOT NULL DEFAULT 'pending',
|
|
credential_status VARCHAR(40) NOT NULL DEFAULT 'pending',
|
|
last_heartbeat_at TIMESTAMPTZ,
|
|
last_error_code VARCHAR(255),
|
|
status_updated_at TIMESTAMPTZ,
|
|
deleted_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT ck_channel_shangwutong_desired_presence CHECK (desired_presence IN ('online', 'busy', 'away', 'offline')),
|
|
CONSTRAINT ck_channel_shangwutong_actual_presence CHECK (actual_presence IN ('online', 'busy', 'away', 'offline')),
|
|
CONSTRAINT ck_channel_shangwutong_connection_status CHECK (connection_status IN ('pending', 'logging_in', 'connected', 'degraded', 'relogin_required', 'verification_required', 'auth_failed', 'disabled', 'offline')),
|
|
CONSTRAINT ck_channel_shangwutong_credential_status CHECK (credential_status IN ('pending', 'verifying', 'applied', 'rejected', 'verification_required'))
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS uq_channel_shangwutong_active_identity
|
|
ON channel_shangwutong_configs(session_id, username)
|
|
WHERE deleted_at IS NULL;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_channel_shangwutong_deleted_at
|
|
ON channel_shangwutong_configs(deleted_at);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_channel_shangwutong_config_version
|
|
ON channel_shangwutong_configs(config_version, inbox_id);
|
|
|
|
ALTER TABLE messages
|
|
ADD COLUMN IF NOT EXISTS external_request_hash VARCHAR(64);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_messages_swt_source
|
|
ON messages(inbox_id, source_id)
|
|
WHERE source_id LIKE 'swt:%';
|