c
This commit is contained in:
1 parent
d3d9614825
commit
2e9c775599
34 files changed
+390
-1833
No files matched your search
+122
-12
@@ -1,16 +1,126 @@
|
||||
#!/bin/bash
|
||||
# Migration script — run once per server after deploying updated code.
|
||||
# Safe to re-run: each step checks whether it is needed before acting.
|
||||
|
||||
sqlite3 /4server/data/contracts.db <<EOF
|
||||
DB="/4server/data/contracts.db"
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# Helper: check whether a column exists
|
||||
# -----------------------------------------------------------------------
|
||||
has_column() {
|
||||
sqlite3 "$DB" "SELECT COUNT(*) FROM pragma_table_info('containers') WHERE name='$1';"
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# Step 1 — Add columns introduced over time (silently skip if present)
|
||||
# -----------------------------------------------------------------------
|
||||
echo "Step 1: adding missing columns..."
|
||||
sqlite3 "$DB" 2>/dev/null <<'EOF' || true
|
||||
ALTER TABLE containers ADD COLUMN env_list TEXT;
|
||||
UPDATE containers
|
||||
SET env_list = (
|
||||
SELECT group_concat(key || '=' || value, ', ')
|
||||
FROM json_each(containers.env)
|
||||
);
|
||||
ALTER TABLE containers ADD COLUMN secret_list TEXT;
|
||||
UPDATE containers
|
||||
SET secret_list = (
|
||||
SELECT group_concat(key || '=' || value, ', ')
|
||||
FROM json_each(containers.secret)
|
||||
);
|
||||
EOF
|
||||
sqlite3 "$DB" 2>/dev/null <<'EOF' || true
|
||||
ALTER TABLE containers ADD COLUMN secret_list TEXT;
|
||||
EOF
|
||||
sqlite3 "$DB" 2>/dev/null <<'EOF' || true
|
||||
ALTER TABLE containers ADD COLUMN utm_source text;
|
||||
EOF
|
||||
sqlite3 "$DB" 2>/dev/null <<'EOF' || true
|
||||
ALTER TABLE containers ADD COLUMN utm_medium text;
|
||||
EOF
|
||||
sqlite3 "$DB" 2>/dev/null <<'EOF' || true
|
||||
ALTER TABLE containers ADD COLUMN utm_campaign text;
|
||||
EOF
|
||||
sqlite3 "$DB" 2>/dev/null <<'EOF' || true
|
||||
ALTER TABLE containers ADD COLUMN container_id CHAR(50);
|
||||
EOF
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# Step 2 — Backfill container_id from UUID
|
||||
# -----------------------------------------------------------------------
|
||||
echo "Step 2: backfilling container_id from UUID..."
|
||||
sqlite3 "$DB" <<'EOF'
|
||||
UPDATE containers
|
||||
SET container_id = UUID
|
||||
WHERE container_id IS NULL OR container_id = '';
|
||||
EOF
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# Step 3 — Backfill utm_* from old affiliate JSON (if column still exists)
|
||||
# -----------------------------------------------------------------------
|
||||
if [ "$(has_column affiliate)" = "1" ]; then
|
||||
echo "Step 3: backfilling utm fields from affiliate JSON..."
|
||||
sqlite3 "$DB" <<'EOF'
|
||||
UPDATE containers
|
||||
SET utm_source = COALESCE(utm_source, json_extract(affiliate, '$.utm_source')),
|
||||
utm_medium = COALESCE(utm_medium, json_extract(affiliate, '$.utm_medium')),
|
||||
utm_campaign = COALESCE(utm_campaign, json_extract(affiliate, '$.utm_campaign'))
|
||||
WHERE affiliate IS NOT NULL AND affiliate != '';
|
||||
EOF
|
||||
else
|
||||
echo "Step 3: affiliate column not present — skipping utm backfill."
|
||||
fi
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# Step 4 — Remove affiliate column via full table rebuild.
|
||||
# Also adds container_id UNIQUE constraint and locks in the canonical
|
||||
# column order to match init_db().
|
||||
# Only runs if affiliate still exists OR container_id lacks its UNIQUE index.
|
||||
# -----------------------------------------------------------------------
|
||||
NEEDS_REBUILD=0
|
||||
[ "$(has_column affiliate)" = "1" ] && NEEDS_REBUILD=1
|
||||
|
||||
# If affiliate is already gone, the rebuild already ran — no need to repeat
|
||||
# (container_id UNIQUE is guaranteed by the rebuild itself)
|
||||
|
||||
if [ "$NEEDS_REBUILD" = "1" ]; then
|
||||
echo "Step 4: rebuilding table (remove affiliate, add container_id UNIQUE)..."
|
||||
sqlite3 "$DB" <<'EOF'
|
||||
BEGIN;
|
||||
|
||||
CREATE TABLE containers_new (
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
UUID CHAR(50) UNIQUE,
|
||||
container_id CHAR(50) UNIQUE,
|
||||
email CHAR(100),
|
||||
expires DATE,
|
||||
tags TEXT,
|
||||
env TEXT,
|
||||
image CHAR(50),
|
||||
history TEXT,
|
||||
comment TEXT,
|
||||
domains TEXT,
|
||||
status CHAR(20),
|
||||
created DATE,
|
||||
bump DATE,
|
||||
secret TEXT,
|
||||
contract TEXT,
|
||||
git integer,
|
||||
backup_slots integer,
|
||||
hdd integer,
|
||||
workers integer,
|
||||
utm_source text,
|
||||
utm_medium text,
|
||||
utm_campaign text,
|
||||
domains_slots integer,
|
||||
secret_list TEXT,
|
||||
env_list TEXT
|
||||
);
|
||||
|
||||
INSERT INTO containers_new
|
||||
SELECT ID, UUID, container_id, email, expires, tags, env, image, history,
|
||||
comment, domains, status, created, bump, secret, contract, git,
|
||||
backup_slots, hdd, workers, utm_source, utm_medium, utm_campaign,
|
||||
domains_slots, secret_list, env_list
|
||||
FROM containers;
|
||||
|
||||
DROP TABLE containers;
|
||||
ALTER TABLE containers_new RENAME TO containers;
|
||||
|
||||
COMMIT;
|
||||
EOF
|
||||
echo "Step 4: table rebuilt."
|
||||
else
|
||||
echo "Step 4: table already up to date — skipping rebuild."
|
||||
fi
|
||||
|
||||
echo "Migration complete."
|
||||
Reference in new issue
Block a user