Add production-ready SuperAdmin API features for tenants, SMS, servers, and plugins.
Includes mobile auth, get_user/get_version, SMS wallet parity endpoints, appearance backfill, and related Prisma migrations. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+27
-67
@@ -4,87 +4,47 @@ import * as bcrypt from 'bcrypt';
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
const email = (process.env.SEED_ADMIN_EMAIL || 'admin@abshode.local').toLowerCase();
|
||||
const mobile = (process.env.SEED_ADMIN_MOBILE || '09128081392').replace(/\D/g, '');
|
||||
const normalized =
|
||||
mobile.startsWith('98') && mobile.length >= 12
|
||||
? `0${mobile.slice(2)}`
|
||||
: mobile.startsWith('9') && mobile.length === 10
|
||||
? `0${mobile}`
|
||||
: mobile;
|
||||
const password = process.env.SEED_ADMIN_PASSWORD || 'Admin@12345';
|
||||
const name = process.env.SEED_ADMIN_NAME || 'Super Admin';
|
||||
const firstName = process.env.SEED_ADMIN_FIRST_NAME || 'مدیر';
|
||||
const lastName = process.env.SEED_ADMIN_LAST_NAME || 'اصلی';
|
||||
const email = (process.env.SEED_ADMIN_EMAIL || 'admin@abshode.local').toLowerCase();
|
||||
|
||||
const passwordHash = await bcrypt.hash(password, 10);
|
||||
|
||||
const user = await prisma.user.upsert({
|
||||
where: { email },
|
||||
update: { passwordHash, name, isActive: true, role: 'super_admin' },
|
||||
where: { mobile: normalized },
|
||||
update: {
|
||||
passwordHash,
|
||||
firstName,
|
||||
lastName,
|
||||
email,
|
||||
isActive: true,
|
||||
role: 'super_admin',
|
||||
},
|
||||
create: {
|
||||
mobile: normalized,
|
||||
firstName,
|
||||
lastName,
|
||||
email,
|
||||
passwordHash,
|
||||
name,
|
||||
role: 'super_admin',
|
||||
isActive: true,
|
||||
},
|
||||
});
|
||||
|
||||
// Extracted from Hamkar SettingsSeeder (bakhtargold) — real project defaults found in code
|
||||
const bakhtarSmsValues = {
|
||||
name_fa: 'باختر گلد',
|
||||
name_en: 'bakhtargold',
|
||||
app_url: 'bakhtargold.com',
|
||||
admin_url: 'https://bakhtargold.com/admin',
|
||||
sms_long: 'true',
|
||||
sms_panel: '',
|
||||
melipayamak_user: '',
|
||||
melipayamak_password: '',
|
||||
melipayamak_from: '',
|
||||
sms_panel_username: '',
|
||||
sms_panel_password: '',
|
||||
sms_panel_from: '',
|
||||
send_sms_on_customer_order: '',
|
||||
sms_charge_card: '',
|
||||
sms_charge_iban: '',
|
||||
sms_charge_account_holder: '',
|
||||
sms_charge_instruction: '',
|
||||
};
|
||||
|
||||
const bakhtar = await prisma.tenant.upsert({
|
||||
where: { slug: 'bakhtargold' },
|
||||
update: {
|
||||
nameFa: bakhtarSmsValues.name_fa,
|
||||
nameEn: bakhtarSmsValues.name_en,
|
||||
domain: 'bakhtargold.com',
|
||||
appUrl: bakhtarSmsValues.app_url,
|
||||
adminUrl: bakhtarSmsValues.admin_url,
|
||||
smsSettingsCache: {
|
||||
values: bakhtarSmsValues,
|
||||
wallet: null,
|
||||
source: 'hamkar/database/seeders/SettingsSeeder.php',
|
||||
syncedAt: new Date().toISOString(),
|
||||
note: 'استخراج از سیدر کد؛ برای داده زنده DB باید همگامسازی MySQL انجام شود',
|
||||
},
|
||||
smsSyncedAt: new Date(),
|
||||
},
|
||||
create: {
|
||||
product: 'hamkar',
|
||||
slug: 'bakhtargold',
|
||||
nameFa: bakhtarSmsValues.name_fa,
|
||||
nameEn: bakhtarSmsValues.name_en,
|
||||
domain: 'bakhtargold.com',
|
||||
primaryColor: '#20c997',
|
||||
nodeServer: 'https://bakhtargold.com/server',
|
||||
appUrl: bakhtarSmsValues.app_url,
|
||||
adminUrl: bakhtarSmsValues.admin_url,
|
||||
isActive: true,
|
||||
notes: 'نسخه استخراجشده از کد/سیدر همکار',
|
||||
smsSettingsCache: {
|
||||
values: bakhtarSmsValues,
|
||||
wallet: null,
|
||||
source: 'hamkar/database/seeders/SettingsSeeder.php',
|
||||
syncedAt: new Date().toISOString(),
|
||||
},
|
||||
smsSyncedAt: new Date(),
|
||||
},
|
||||
console.log('Seeded admin:', {
|
||||
id: user.id,
|
||||
mobile: user.mobile,
|
||||
name: `${user.firstName} ${user.lastName}`,
|
||||
});
|
||||
|
||||
console.log('Seeded admin:', { id: user.id, email: user.email });
|
||||
console.log('Seeded tenant:', { id: bakhtar.id, slug: bakhtar.slug });
|
||||
console.log('Login with:', email, '/', password);
|
||||
console.log('Login with:', normalized, '/', password);
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user