feat(db): initial schema migration

This commit is contained in:
2026-07-01 16:42:39 +07:00
parent 0b9d31bd15
commit edda3dc21f
2 changed files with 58 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
CREATE TABLE endpoints (
id BIGSERIAL PRIMARY KEY,
role_label TEXT NOT NULL,
host TEXT NOT NULL,
port INT NOT NULL,
tls_mode TEXT NOT NULL CHECK (tls_mode IN ('ssl','starttls','plain')),
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE tasks (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
src_endpoint_id BIGINT NOT NULL REFERENCES endpoints(id),
dst_endpoint_id BIGINT NOT NULL REFERENCES endpoints(id),
status TEXT NOT NULL DEFAULT 'draft',
folder_mapping JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE accounts (
id BIGSERIAL PRIMARY KEY,
task_id BIGINT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
src_login TEXT NOT NULL,
src_pass_enc TEXT NOT NULL,
dst_login TEXT NOT NULL,
dst_pass_enc TEXT NOT NULL,
test_src_status TEXT NOT NULL DEFAULT 'unknown',
test_dst_status TEXT NOT NULL DEFAULT 'unknown',
copied_count BIGINT NOT NULL DEFAULT 0,
skipped_count BIGINT NOT NULL DEFAULT 0,
error_count BIGINT NOT NULL DEFAULT 0,
status TEXT NOT NULL DEFAULT 'idle'
);
CREATE TABLE runs (
id BIGSERIAL PRIMARY KEY,
task_id BIGINT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
finished_at TIMESTAMPTZ,
status TEXT NOT NULL DEFAULT 'running',
total_copied BIGINT NOT NULL DEFAULT 0,
total_skipped BIGINT NOT NULL DEFAULT 0,
total_errors BIGINT NOT NULL DEFAULT 0
);
CREATE TABLE migrated_messages (
id BIGSERIAL PRIMARY KEY,
account_id BIGINT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
folder TEXT NOT NULL,
message_key TEXT NOT NULL,
copied_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE (account_id, message_key)
);