chore(master-data): retire legacy asset sku group drift

This commit is contained in:
WuYongJie 2026-06-05 12:27:56 +08:00
parent 26e40b0e71
commit d38a373297

View File

@ -0,0 +1,80 @@
DO $$
BEGIN
IF to_regclass('public."AssetSkuGroup"') IS NOT NULL
AND EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'AssetVariant'
AND column_name = 'skuGroupId'
)
THEN
EXECUTE $SQL$
UPDATE "AssetVariant" AS variant
SET "businessData" = jsonb_set(
CASE
WHEN variant."businessData" IS NULL OR jsonb_typeof(variant."businessData") <> 'object'
THEN '{}'::jsonb
ELSE variant."businessData"
END,
'{legacySkuGroup}',
jsonb_build_object(
'id', sku_group.id,
'code', sku_group.code,
'name', sku_group.name,
'description', sku_group.description,
'sortOrder', sku_group."sortOrder",
'metadata', sku_group.metadata,
'assetFamilyId', sku_group."assetFamilyId",
'source', 'AssetSkuGroup.retired'
),
true
)
FROM "AssetSkuGroup" AS sku_group
WHERE variant."skuGroupId" = sku_group.id
$SQL$;
EXECUTE $SQL$
UPDATE "AssetFamily" AS family
SET metadata = jsonb_set(
CASE
WHEN family.metadata IS NULL OR jsonb_typeof(family.metadata) <> 'object'
THEN '{}'::jsonb
ELSE family.metadata
END,
'{legacySkuGroups}',
grouped.groups,
true
)
FROM (
SELECT
"assetFamilyId",
jsonb_agg(
jsonb_build_object(
'id', id,
'code', code,
'name', name,
'description', description,
'sortOrder', "sortOrder",
'metadata', metadata,
'source', 'AssetSkuGroup.retired'
)
ORDER BY "sortOrder", code
) AS groups
FROM "AssetSkuGroup"
GROUP BY "assetFamilyId"
) AS grouped
WHERE family.id = grouped."assetFamilyId"
$SQL$;
END IF;
END $$;
ALTER TABLE "AssetVariant"
DROP CONSTRAINT IF EXISTS "AssetVariant_skuGroupId_fkey";
DROP INDEX IF EXISTS "AssetVariant_skuGroupId_idx";
ALTER TABLE "AssetVariant"
DROP COLUMN IF EXISTS "skuGroupId";
DROP TABLE IF EXISTS "AssetSkuGroup";