Files
PriceForge/migrations/006_add_local_configuration_versions.sql
Michael Chus 20309d1f0e Fork from QuoteForge → PriceForge
Renamed module path git.mchus.pro/mchus/quoteforge → git.mchus.pro/mchus/priceforge,
renamed package quoteforge → priceforge, moved binary from cmd/qfs to cmd/pfs.
2026-02-07 21:42:26 +03:00

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;