This commit is contained in:
2026-06-06 16:05:40 +03:30
parent 08f2f475ed
commit 5b36f2847f
16 changed files with 214 additions and 102 deletions
+67 -6
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
"""
Generate client merge SQL (settings + const) from:
- goldAli catalog template (abshode_rahimi_merge_goldali_catalog.sql UPDATE blocks)
- reference catalog template (abshode_rahimi_merge_goldali_catalog.sql UPDATE blocks)
- client JSON: { "settings": [...], "const": [...] }
Usage:
@@ -25,7 +25,7 @@ CONST_CATALOG: list[dict] = [
{"key": "header_banner", "title_fa": "بنر بالای صفحه", "default": ""},
{"key": "app_closed", "title_fa": "بسته بودن اپ", "default": "false"},
{"key": "main_product", "title_fa": "محصول آبشده پیش‌فرض", "default": "13"},
{"key": "gram", "title_fa": "گرم ثبت‌نام", "default": ""},
{"key": "gram", "title_fa": "گرم ثبت‌نام", "default": "0"},
{"key": "first_customer_wallet_value", "title_fa": "حداقل اولین خرید", "default": ""},
{"key": "jibit_counter", "title_fa": "شمارنده جیبیت", "default": "0"},
{"key": "price", "title_fa": "لیست قیمت TGJU (JSON)", "default": "[]"},
@@ -41,8 +41,45 @@ SETTINGS_SKIP = {
"montzar_order_response",
"montzar_last_product_log",
"liman_token",
"is_requaire_referral",
}
# metadata overrides for catalog keys (e.g. editable in admin panel)
SETTINGS_META_OVERRIDES: dict[str, dict] = {
"referral_id": {
"can_edit": 1,
"description": "required = اجباری؛ خالی = اختیاری|required,",
},
}
LEGACY_SETTINGS_DELETE = ("is_requaire_referral",)
def legacy_referral_migration_sql() -> list[str]:
"""اگر is_requaire_referral قدیمی روشن بود → referral_id = required"""
return [
"-- legacy is_requaire_referral → referral_id",
"UPDATE `settings` AS r",
"SET",
" r.`value` = 'required',",
" r.`is_active` = 1,",
" r.`updated_at` = NOW()",
"WHERE r.`key` = 'referral_id'",
" AND EXISTS (",
" SELECT 1",
" FROM (",
" SELECT `value`, `is_active`",
" FROM `settings`",
" WHERE `key` = 'is_requaire_referral'",
" LIMIT 1",
" ) AS leg",
" WHERE leg.`is_active` = 1",
" AND LOWER(TRIM(COALESCE(leg.`value`, ''))) IN ('true', '1', 'yes')",
" )",
" AND TRIM(COALESCE(r.`value`, '')) <> 'required';",
"",
]
CONST_SKIP_PREFIXES = ("goldir",)
CONST_SKIP_KEYS = {"log", "last_order_log"}
@@ -168,7 +205,7 @@ def generate_settings_sql(
) -> str:
lines: list[str] = [
"-- =============================================================================",
f"-- {client_name_fa} — ادغام settings با کاتالوگ goldAliii",
f"-- {client_name_fa} — ادغام settings با کاتالوگ واحد",
"--",
f"-- منبع مقادیر: {client_name}_client.json",
f"-- قالب کلیدها: goldali ({len(catalog)} کلید)",
@@ -176,6 +213,7 @@ def generate_settings_sql(
"-- قوانین:",
"-- • کلید مشترک → value از کلاینت، metadata از کاتالوگ",
"-- • کلید کاتالوگ بدون مقدار در کلاینت → value=''، is_active=0",
"-- • هر setting با value پر → is_active=1 (الزام ConfigService)",
"-- • کلیدهای اضافی کلاینت → DELETE",
"--",
f"-- قبل از اجرا: USE دیتابیس {client_name_fa} + بکاپ",
@@ -197,7 +235,9 @@ def generate_settings_sql(
catalog_keys = sorted(catalog.keys())
for key in catalog_keys:
meta = catalog[key]
meta = dict(catalog[key])
if key in SETTINGS_META_OVERRIDES:
meta.update(SETTINGS_META_OVERRIDES[key])
val = client_settings.get(key)
if val is None:
val = ""
@@ -214,7 +254,9 @@ def generate_settings_sql(
lines.extend(["", "-- 2) UPDATE", ""])
for key in catalog_keys:
meta = catalog[key]
meta = dict(catalog[key])
if key in SETTINGS_META_OVERRIDES:
meta.update(SETTINGS_META_OVERRIDES[key])
val = client_settings.get(key)
if val is None:
val = ""
@@ -243,6 +285,11 @@ def generate_settings_sql(
" `updated_at` = NOW()",
"WHERE `key` LIKE 'logo_login%' AND `key` <> 'logo_login';",
"",
"-- 3b) legacy is_requaire_referral → referral_id (قبل از DELETE)",
"",
])
lines.extend(legacy_referral_migration_sql())
lines.extend([
"-- 4) DELETE extras",
"",
"DELETE FROM `settings`",
@@ -256,6 +303,20 @@ def generate_settings_sql(
"",
"DELETE FROM `settings` WHERE `key` = 'price_method';",
"",
"-- 4b) حذف کلیدهای legacy",
"",
])
for legacy_key in LEGACY_SETTINGS_DELETE:
lines.append(f"DELETE FROM `settings` WHERE `key` = {sql_str(legacy_key)};")
lines.extend([
"",
"-- 5) is_active — ConfigService فقط وقتی is_active=1 و value پر باشد می‌خواند",
"",
"UPDATE `settings` SET",
" `is_active` = 1,",
" `updated_at` = NOW()",
"WHERE TRIM(COALESCE(`value`, '')) <> '';",
"",
"COMMIT;",
"",
])
@@ -269,7 +330,7 @@ def generate_const_sql(
) -> str:
lines: list[str] = [
"-- =============================================================================",
f"-- {client_name_fa} — ادغام const با کاتالوگ goldAliii",
f"-- {client_name_fa} — ادغام const با کاتالوگ واحد",
"--",
f"-- منبع مقادیر: {client_name}_client.json",
"-- قالب: 10 کلید goldali",