114 lines
3.1 KiB
JavaScript
114 lines
3.1 KiB
JavaScript
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()
|
||
|
|
})
|