Lb1/packages/database/prisma/seed.js

157 lines
7.2 KiB
JavaScript

"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