From 18ac137e25d17ca77e58bc658fe6d7cc1d53a083 Mon Sep 17 00:00:00 2001 From: adonis Date: Tue, 8 Sep 2026 11:00:59 +0330 Subject: [PATCH] fix(plugins): seed all SuperAdmin khanegi setting keys into the store catalog Co-authored-by: Cursor --- src/plugins/plugin-catalog.seed.ts | 12 ++++++++++++ src/plugins/plugin-store.service.ts | 21 ++++++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/plugins/plugin-catalog.seed.ts b/src/plugins/plugin-catalog.seed.ts index 6b3135e..e2cb14c 100644 --- a/src/plugins/plugin-catalog.seed.ts +++ b/src/plugins/plugin-catalog.seed.ts @@ -78,6 +78,16 @@ export const PLUGIN_CATALOG_SEED: Array<{ titleFa: 'نمایش چت به کاربران', description: 'نمایش چت پشتیبانی در اپ مشتری.', }, + { + settingKey: 'has_landing', + titleFa: 'لندینگ وبسایت', + description: 'صفحهٔ لندینگ نسخهٔ خانگی.', + }, + { + settingKey: 'permision__enabled', + titleFa: 'نمایش منوی مجوزها', + description: 'منوی مجوزها در ادمین و اپ.', + }, ]; export function daysToPlanMonths(days: number): 1 | 3 | 6 | 12 { @@ -105,6 +115,8 @@ export function inferSettingKeyFromName(name: string): string | null { [/قلک/, 'enable_product_funds'], [/هشدار قیمت/, 'has_page_price_trigger'], [/نمایش چت|چت به کاربر/, 'show_to_users_chat'], + [/لندینگ/, 'has_landing'], + [/مجوز/, 'permision__enabled'], ]; for (const [re, key] of rules) { if (re.test(n)) return key; diff --git a/src/plugins/plugin-store.service.ts b/src/plugins/plugin-store.service.ts index cd01d04..1b48c8c 100644 --- a/src/plugins/plugin-store.service.ts +++ b/src/plugins/plugin-store.service.ts @@ -23,6 +23,7 @@ import { AdminNotifyService } from '../notifications/admin-notify.service'; import { CentralSmsService } from '../notifications/central-sms.service'; import { ProgramSettingsService } from '../program-settings/program-settings.service'; import { PLUGIN_STORE_SETTING_KEY } from '../program-settings/runtime-setting-keys'; +import { DEPLOY_SETTING_CATALOG_KEYS } from '../program-settings/deploy-setting-catalog-keys'; import { addIranMonths, addIranPlanExpiry, @@ -80,16 +81,26 @@ export class PluginStoreService implements OnModuleInit, OnModuleDestroy { } async seedCatalog() { - for (const row of PLUGIN_CATALOG_SEED) { + const templates = await this.prisma.settingTemplate.findMany({ + where: { key: { in: [...DEPLOY_SETTING_CATALOG_KEYS] } }, + select: { key: true, titleFa: true, description: true }, + }); + const templateByKey = new Map(templates.map((row) => [row.key, row])); + const seedByKey = new Map(PLUGIN_CATALOG_SEED.map((row) => [row.settingKey, row])); + const keys = new Set([...DEPLOY_SETTING_CATALOG_KEYS, ...seedByKey.keys()]); + + for (const settingKey of keys) { const existing = await this.prisma.pluginCatalogItem.findUnique({ - where: { settingKey: row.settingKey }, + where: { settingKey }, }); if (existing) continue; + const seed = seedByKey.get(settingKey); + const template = templateByKey.get(settingKey); await this.prisma.pluginCatalogItem.create({ data: { - settingKey: row.settingKey, - titleFa: row.titleFa, - description: row.description, + settingKey, + titleFa: seed?.titleFa || template?.titleFa || settingKey, + description: seed?.description || template?.description || '', inStore: true, prices: { create: PLUGIN_STORE_DURATIONS.map((durationDays) => ({