81 lines
2.3 KiB
SQL
81 lines
2.3 KiB
SQL
-- Add full-snapshot versioning for local configurations (SQLite)
|
|
-- 1) Create local_configuration_versions
|
|
-- 2) Add current_version_id to local_configurations
|
|
-- 3) Backfill v1 snapshots from existing local_configurations
|
|
|
|
PRAGMA foreign_keys = ON;
|
|
|
|
BEGIN TRANSACTION;
|
|
|
|
CREATE TABLE local_configuration_versions (
|
|
id TEXT PRIMARY KEY,
|
|
configuration_uuid TEXT NOT NULL,
|
|
version_no INTEGER NOT NULL,
|
|
data TEXT NOT NULL,
|
|
change_note TEXT NULL,
|
|
created_by TEXT NULL,
|
|
app_version TEXT NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (configuration_uuid) REFERENCES local_configurations(uuid),
|
|
UNIQUE(configuration_uuid, version_no)
|
|
);
|
|
|
|
ALTER TABLE local_configurations
|
|
ADD COLUMN current_version_id TEXT NULL;
|
|
|
|
CREATE INDEX idx_lcv_config_created
|
|
ON local_configuration_versions(configuration_uuid, created_at DESC);
|
|
|
|
CREATE INDEX idx_lcv_config_version
|
|
ON local_configuration_versions(configuration_uuid, version_no DESC);
|
|
|
|
-- Backfill v1 snapshot for every existing configuration.
|
|
INSERT INTO local_configuration_versions (
|
|
id,
|
|
configuration_uuid,
|
|
version_no,
|
|
data,
|
|
change_note,
|
|
created_by,
|
|
app_version,
|
|
created_at
|
|
)
|
|
SELECT
|
|
uuid || '-v1' AS id,
|
|
uuid AS configuration_uuid,
|
|
1 AS version_no,
|
|
json_object(
|
|
'uuid', uuid,
|
|
'server_id', server_id,
|
|
'name', name,
|
|
'items', CASE WHEN json_valid(items) THEN json(items) ELSE items END,
|
|
'total_price', total_price,
|
|
'custom_price', custom_price,
|
|
'notes', notes,
|
|
'is_template', is_template,
|
|
'server_count', server_count,
|
|
'price_updated_at', price_updated_at,
|
|
'created_at', created_at,
|
|
'updated_at', updated_at,
|
|
'synced_at', synced_at,
|
|
'sync_status', sync_status,
|
|
'original_user_id', original_user_id,
|
|
'original_username', original_username,
|
|
'app_version', NULL
|
|
) AS data,
|
|
'Initial snapshot backfill (v1)' AS change_note,
|
|
NULL AS created_by,
|
|
NULL AS app_version,
|
|
COALESCE(created_at, CURRENT_TIMESTAMP) AS created_at
|
|
FROM local_configurations;
|
|
|
|
UPDATE local_configurations
|
|
SET current_version_id = (
|
|
SELECT lcv.id
|
|
FROM local_configuration_versions lcv
|
|
WHERE lcv.configuration_uuid = local_configurations.uuid
|
|
AND lcv.version_no = 1
|
|
);
|
|
|
|
COMMIT;
|