"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const client_1 = require("@prisma/client"); const argon2 = __importStar(require("argon2")); const prisma = new client_1.PrismaClient(); async function main() { console.log('🌱 Starting Luxe Platform Database Seeding...'); // 1. Seed Roles const rolesData = [ { name: 'Super Admin', code: client_1.RoleType.SUPER_ADMIN, description: 'Full system root access' }, { name: 'Admin', code: client_1.RoleType.ADMIN, description: 'Platform administration and management' }, { name: 'Moderator', code: client_1.RoleType.MODERATOR, description: 'Content and report moderation' }, { name: 'Content Moderator', code: client_1.RoleType.CONTENT_MODERATOR, description: 'Blog and forum moderation' }, { name: 'Finance Manager', code: client_1.RoleType.FINANCE, description: 'Wallet, ledger, transaction and invoice access' }, { name: 'Support Agent', code: client_1.RoleType.SUPPORT, description: 'User support and verification processing' }, { name: 'Agency Advertiser', code: client_1.RoleType.AGENCY, description: 'Agency advertiser account managing multiple staff' }, { name: 'Advertiser', code: client_1.RoleType.ADVERTISER, description: 'Individual advertiser listing creator' }, { name: 'Registered User', code: client_1.RoleType.USER, description: 'Standard platform member' }, { name: 'Guest', code: client_1.RoleType.GUEST, description: 'Unauthenticated visitor' }, ]; for (const role of rolesData) { await prisma.role.upsert({ where: { code: role.code }, update: { name: role.name, description: role.description }, create: role, }); } // 2. Seed Permissions const permissionsData = [ { resource: 'users', action: 'read', description: 'View user profiles' }, { resource: 'users', action: 'write', description: 'Modify users' }, { resource: 'users', action: 'ban', description: 'Ban user accounts' }, { resource: 'listings', action: 'create', description: 'Create marketplace listings' }, { resource: 'listings', action: 'approve', description: 'Approve pending listings' }, { resource: 'listings', action: 'delete', description: 'Delete marketplace listings' }, { resource: 'verifications', action: 'approve', description: 'Approve ID verifications' }, { resource: 'wallet', action: 'credit', description: 'Add bonus credits to user wallet' }, { resource: 'admin', action: 'view_dashboard', description: 'Access admin analytics overview' }, ]; for (const perm of permissionsData) { await prisma.permission.upsert({ where: { resource_action: { resource: perm.resource, action: perm.action } }, update: { description: perm.description }, create: perm, }); } // 3. Seed Super Admin User const superAdminPasswordHash = await argon2.hash('LuxeSuperAdmin2026Secure!'); const superAdminUser = await prisma.user.upsert({ where: { email: 'admin@luxe.com' }, update: {}, create: { email: 'admin@luxe.com', username: 'superadmin', passwordHash: superAdminPasswordHash, role: client_1.RoleType.SUPER_ADMIN, status: 'ACTIVE', emailVerifiedAt: new Date(), }, }); // Seed Wallet for Super Admin await prisma.wallet.upsert({ where: { userId: superAdminUser.id }, update: {}, create: { userId: superAdminUser.id, balance: 100000.0, credits: 5000.0, currency: 'USD', }, }); // 4. Seed Cities const cities = [ { name: 'New York', slug: 'new-york', state: 'NY', country: 'US' }, { name: 'Los Angeles', slug: 'los-angeles', state: 'CA', country: 'US' }, { name: 'Miami', slug: 'miami', state: 'FL', country: 'US' }, { name: 'London', slug: 'london', state: 'Greater London', country: 'UK' }, { name: 'Dubai', slug: 'dubai', state: 'Dubai', country: 'AE' }, ]; for (const city of cities) { await prisma.city.upsert({ where: { slug: city.slug }, update: {}, create: city, }); } // 5. Seed Categories const categories = [ { name: 'VIP Escorts', slug: 'vip-escorts', icon: 'crown', description: 'Premium verified VIP companionship' }, { name: 'Massage & Spa', slug: 'massage-spa', icon: 'sparkles', description: 'Relaxing holistic & therapeutic wellness' }, { name: 'Model & Hostess', slug: 'model-hostess', icon: 'camera', description: 'High fashion models for events & dates' }, { name: 'Nightlife Companions', slug: 'nightlife-companions', icon: 'glass-cheers', description: 'Party & event escorts' }, ]; for (const cat of categories) { await prisma.category.upsert({ where: { slug: cat.slug }, update: {}, create: cat, }); } // 6. Seed Feature Flags const featureFlags = [ { key: 'ENABLE_AI_IMAGE_MODERATION', isEnabled: true, description: 'Automatic NSFW and duplicate detection' }, { key: 'ENABLE_CRYPTO_PAYMENTS', isEnabled: false, description: 'Accept Web3 crypto payments for wallet recharge' }, { key: 'ENABLE_WHATSAPP_OTP', isEnabled: true, description: 'WhatsApp Business API for phone verification' }, ]; for (const flag of featureFlags) { await prisma.featureFlag.upsert({ where: { key: flag.key }, update: {}, create: flag, }); } console.log('✅ Database Seeding Completed Successfully!'); } main() .catch((e) => { console.error('❌ Seeding failed:', e); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); }); //# sourceMappingURL=seed.js.map