Files
wehub-resource-sync 75f3dd141c
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CI and Release / lint-frontend (push) Has been cancelled
CI and Release / dockerfile-scan (push) Has been cancelled
CI and Release / test-frontend (push) Has been cancelled
CI and Release / lint-verification-agent (push) Has been cancelled
CI and Release / test-verification-agent (push) Has been cancelled
CI and Release / e2e-verification-agent (push) Has been cancelled
CI and Release / test-backend (push) Has been cancelled
CI and Release / build-dev-image (push) Has been cancelled
CI and Release / push-dev-image (push) Has been cancelled
CI and Release / build-image (push) Has been cancelled
CI and Release / build-verification-image (push) Has been cancelled
CI and Release / determine-version (push) Has been cancelled
CI and Release / push-image (push) Has been cancelled
CI and Release / push-verification-image (12) (push) Has been cancelled
CI and Release / lint-backend (push) Has been cancelled
CI and Release / push-verification-image (17) (push) Has been cancelled
CI and Release / push-verification-image (18) (push) Has been cancelled
CI and Release / release (push) Has been cancelled
CI and Release / publish-helm-chart (push) Has been cancelled
CI and Release / push-verification-image (13) (push) Has been cancelled
CI and Release / push-verification-image (14) (push) Has been cancelled
CI and Release / push-verification-image (15) (push) Has been cancelled
CI and Release / push-verification-image (16) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:11:07 +08:00

261 lines
7.6 KiB
SQL

-- +goose Up
-- +goose StatementBegin
-- Create users table
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT NOT NULL,
hashed_password TEXT NOT NULL,
password_creation_time TIMESTAMPTZ NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
role TEXT NOT NULL
);
CREATE UNIQUE INDEX users_email_idx ON users (email);
-- Create secret keys table
CREATE TABLE secret_keys (
secret TEXT NOT NULL
);
CREATE UNIQUE INDEX secret_keys_secret_idx ON secret_keys (secret);
-- Create notifiers table
CREATE TABLE notifiers (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
name VARCHAR(255) NOT NULL,
notifier_type VARCHAR(50) NOT NULL,
last_send_error TEXT
);
CREATE INDEX idx_notifiers_user_id ON notifiers (user_id);
-- Create telegram notifiers table
CREATE TABLE telegram_notifiers (
notifier_id UUID PRIMARY KEY,
bot_token TEXT NOT NULL,
target_chat_id TEXT NOT NULL
);
ALTER TABLE telegram_notifiers
ADD CONSTRAINT fk_telegram_notifiers_notifier
FOREIGN KEY (notifier_id)
REFERENCES notifiers (id)
ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-- Create email notifiers table
CREATE TABLE email_notifiers (
notifier_id UUID PRIMARY KEY,
target_email VARCHAR(255) NOT NULL,
smtp_host VARCHAR(255) NOT NULL,
smtp_port INTEGER NOT NULL,
smtp_user VARCHAR(255) NOT NULL,
smtp_password VARCHAR(255) NOT NULL
);
ALTER TABLE email_notifiers
ADD CONSTRAINT fk_email_notifiers_notifier
FOREIGN KEY (notifier_id)
REFERENCES notifiers (id)
ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-- Create storages table
CREATE TABLE storages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
type TEXT NOT NULL,
name TEXT NOT NULL,
last_save_error TEXT
);
CREATE INDEX idx_storages_user_id ON storages (user_id);
-- Create local storages table
CREATE TABLE local_storages (
storage_id UUID PRIMARY KEY
);
ALTER TABLE local_storages
ADD CONSTRAINT fk_local_storages_storage
FOREIGN KEY (storage_id)
REFERENCES storages (id)
ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-- Create S3 storages table
CREATE TABLE s3_storages (
storage_id UUID PRIMARY KEY,
s3_bucket TEXT NOT NULL,
s3_region TEXT NOT NULL,
s3_access_key TEXT NOT NULL,
s3_secret_key TEXT NOT NULL,
s3_endpoint TEXT
);
ALTER TABLE s3_storages
ADD CONSTRAINT fk_s3_storages_storage
FOREIGN KEY (storage_id)
REFERENCES storages (id)
ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-- Create intervals table
CREATE TABLE intervals (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
interval TEXT NOT NULL,
time_of_day TEXT,
weekday INT,
day_of_month INT
);
-- Create databases table
CREATE TABLE databases (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
name TEXT NOT NULL,
type TEXT NOT NULL,
backup_interval_id UUID NOT NULL,
storage_id UUID NOT NULL,
store_period TEXT NOT NULL,
last_backup_time TIMESTAMPTZ,
last_backup_error_message TEXT,
send_notifications_on TEXT NOT NULL DEFAULT ''
);
ALTER TABLE databases
ADD CONSTRAINT fk_databases_backup_interval_id
FOREIGN KEY (backup_interval_id)
REFERENCES intervals (id)
ON DELETE RESTRICT;
ALTER TABLE databases
ADD CONSTRAINT fk_databases_user_id
FOREIGN KEY (user_id)
REFERENCES users (id)
ON DELETE CASCADE;
ALTER TABLE databases
ADD CONSTRAINT fk_databases_storage_id
FOREIGN KEY (storage_id)
REFERENCES storages (id)
ON DELETE RESTRICT;
CREATE INDEX idx_databases_user_id ON databases (user_id);
CREATE INDEX idx_databases_storage_id ON databases (storage_id);
-- Create postgresql databases table
CREATE TABLE postgresql_databases (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
database_id UUID,
version TEXT NOT NULL,
host TEXT NOT NULL,
port INT NOT NULL,
username TEXT NOT NULL,
password TEXT NOT NULL,
database TEXT,
is_https BOOLEAN NOT NULL DEFAULT FALSE,
cpu_count INT NOT NULL,
restore_id UUID
);
ALTER TABLE postgresql_databases
ADD CONSTRAINT uk_postgresql_databases_database_id
UNIQUE (database_id);
CREATE INDEX idx_postgresql_databases_database_id ON postgresql_databases (database_id);
CREATE INDEX idx_postgresql_databases_restore_id ON postgresql_databases (restore_id);
-- Create database notifiers association table
CREATE TABLE database_notifiers (
database_id UUID NOT NULL,
notifier_id UUID NOT NULL,
PRIMARY KEY (database_id, notifier_id)
);
ALTER TABLE database_notifiers
ADD CONSTRAINT fk_database_notifiers_database_id
FOREIGN KEY (database_id)
REFERENCES databases (id)
ON DELETE CASCADE;
ALTER TABLE database_notifiers
ADD CONSTRAINT fk_database_notifiers_notifier_id
FOREIGN KEY (notifier_id)
REFERENCES notifiers (id)
ON DELETE RESTRICT;
CREATE INDEX idx_database_notifiers_database_id ON database_notifiers (database_id);
-- Create backups table
CREATE TABLE backups (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
database_id UUID NOT NULL,
storage_id UUID NOT NULL,
status TEXT NOT NULL,
fail_message TEXT,
backup_size_mb DOUBLE PRECISION NOT NULL DEFAULT 0,
backup_duration_ms BIGINT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
ALTER TABLE backups
ADD CONSTRAINT fk_backups_database_id
FOREIGN KEY (database_id)
REFERENCES databases (id)
ON DELETE CASCADE;
ALTER TABLE backups
ADD CONSTRAINT fk_backups_storage_id
FOREIGN KEY (storage_id)
REFERENCES storages (id)
ON DELETE RESTRICT;
CREATE INDEX idx_backups_database_id_created_at ON backups (database_id, created_at DESC);
CREATE INDEX idx_backups_status_created_at ON backups (status, created_at DESC);
-- Create restores table
CREATE TABLE restores (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
backup_id UUID NOT NULL,
status TEXT NOT NULL,
fail_message TEXT,
restore_duration_ms BIGINT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
ALTER TABLE restores
ADD CONSTRAINT fk_restores_backup_id
FOREIGN KEY (backup_id)
REFERENCES backups (id)
ON DELETE CASCADE;
ALTER TABLE postgresql_databases
ADD CONSTRAINT fk_postgresql_databases_restore_id
FOREIGN KEY (restore_id)
REFERENCES restores (id)
ON DELETE CASCADE;
CREATE INDEX idx_restores_backup_id_created_at ON restores (backup_id, created_at);
CREATE INDEX idx_restores_status_created_at ON restores (status, created_at);
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS restores;
DROP TABLE IF EXISTS backups;
DROP TABLE IF EXISTS database_notifiers;
DROP TABLE IF EXISTS postgresql_databases;
DROP TABLE IF EXISTS databases;
DROP TABLE IF EXISTS intervals;
DROP TABLE IF EXISTS s3_storages;
DROP TABLE IF EXISTS local_storages;
DROP TABLE IF EXISTS storages;
DROP TABLE IF EXISTS email_notifiers;
DROP TABLE IF EXISTS telegram_notifiers;
DROP TABLE IF EXISTS notifiers;
DROP TABLE IF EXISTS secret_keys;
DROP TABLE IF EXISTS users;
-- +goose StatementEnd