import { PrismaClient } from '@prisma/client' /** * Restore new.gholaktala.ir as Khanegi + newTheme (front: userTheme). * * On production: * cd /var/www/superadmin/api && git pull * set -a && . ./.env && set +a * node scripts/fix-gholaktala-to-khanegi-newtheme.mjs * node scripts/fix-gholaktala-to-khanegi-newtheme.mjs --apply * * Then verify: * curl -s 'https://adm.montzar.ir/get_user?domain=new.gholaktala.ir' | head -c 500 * Expect: "product":"khanegi" and "ui_variant":"newTheme" */ const prisma = new PrismaClient() const APPLY = process.argv.includes('--apply') const DOMAIN = 'new.gholaktala.ir' function bumpAppVersion(current) { const v = String(current || '1').trim() || '1' if (/^\d+$/.test(v)) return String(Number(v) + 1) const semver = v.match(/^(\d+)\.(\d+)\.(\d+)$/) if (semver) return `${semver[1]}.${semver[2]}.${Number(semver[3]) + 1}` return String(Date.now()) } async function main() { const tenants = await prisma.tenant.findMany({ where: { OR: [ { domain: { equals: DOMAIN, mode: 'insensitive' } }, { domains: { string_contains: DOMAIN } }, { domain: { contains: 'gholaktala', mode: 'insensitive' } }, { slug: { contains: 'gholak', mode: 'insensitive' } }, ], }, select: { id: true, nameFa: true, domain: true, slug: true, product: true, uiVariant: true, appVersion: true, notes: true, }, }) console.log('MATCHES', JSON.stringify(tenants, null, 2)) const tenant = tenants.find((t) => String(t.domain).toLowerCase() === DOMAIN) || tenants[0] if (!tenant) throw new Error(`Tenant not found for ${DOMAIN}`) const alreadyOk = tenant.product === 'khanegi' && tenant.uiVariant === 'newTheme' console.log('SELECTED', { id: tenant.id, domain: tenant.domain, nameFa: tenant.nameFa, product: tenant.product, uiVariant: tenant.uiVariant, alreadyOk, expected: { product: 'khanegi', ui_variant: 'newTheme', frontend: 'KhanegiModular/userTheme (NOT userModular, NOT Hamkar)', api: '/server/api/get_settings', }, }) if (!APPLY) { console.log('DRY_RUN — re-run with --apply to set product=khanegi uiVariant=newTheme') return } const updated = await prisma.tenant.update({ where: { id: tenant.id }, data: { product: 'khanegi', uiVariant: 'newTheme', appVersion: alreadyOk ? tenant.appVersion : bumpAppVersion(tenant.appVersion), notes: [ String(tenant.notes || '') .replace(/\s*\|\s*product=hamkar[^\|]*/gi, '') .replace(/\s*\|\s*product=khanegi[^\|]*/gi, '') .trim(), 'product=khanegi uiVariant=newTheme (userTheme locked)', ] .filter(Boolean) .join(' | '), }, }) console.log('UPDATED', { id: updated.id, domain: updated.domain, product: updated.product, uiVariant: updated.uiVariant, appVersion: updated.appVersion, }) } main() .catch((e) => { console.error(e) process.exitCode = 1 }) .finally(async () => { await prisma.$disconnect() })