first commit
This commit is contained in:
174
prisma/seed.js
Normal file
174
prisma/seed.js
Normal file
@@ -0,0 +1,174 @@
|
||||
const { PrismaClient } = require('@prisma/client');
|
||||
const bcrypt = require('bcrypt');
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
console.log('🌱 Starting database seed...');
|
||||
|
||||
// Create admin user
|
||||
const adminPasswordHash = await bcrypt.hash('admin123', 12);
|
||||
const admin = await prisma.user.upsert({
|
||||
where: { email: 'admin@vaishnavi.com' },
|
||||
update: {},
|
||||
create: {
|
||||
email: 'admin@vaishnavi.com',
|
||||
passwordHash: adminPasswordHash,
|
||||
firstName: 'Admin',
|
||||
lastName: 'User',
|
||||
username: 'admin',
|
||||
role: 'ADMIN',
|
||||
isVerified: true,
|
||||
isActive: true,
|
||||
},
|
||||
});
|
||||
|
||||
// Create test customer
|
||||
const customerPasswordHash = await bcrypt.hash('customer123', 12);
|
||||
const customer = await prisma.user.upsert({
|
||||
where: { email: 'customer@example.com' },
|
||||
update: {},
|
||||
create: {
|
||||
email: 'customer@example.com',
|
||||
passwordHash: customerPasswordHash,
|
||||
firstName: 'John',
|
||||
lastName: 'Doe',
|
||||
username: 'johndoe',
|
||||
role: 'CUSTOMER',
|
||||
isVerified: true,
|
||||
isActive: true,
|
||||
},
|
||||
});
|
||||
|
||||
// Create categories
|
||||
const categories = [
|
||||
{
|
||||
name: 'Women\'s Clothing',
|
||||
slug: 'womens-clothing',
|
||||
description: 'Beautiful women\'s fashion and apparel',
|
||||
metaTitle: 'Women\'s Clothing - Vaishnavi Creation',
|
||||
metaDescription: 'Discover our collection of women\'s clothing and fashion items.',
|
||||
},
|
||||
{
|
||||
name: 'Men\'s Clothing',
|
||||
slug: 'mens-clothing',
|
||||
description: 'Stylish men\'s fashion and apparel',
|
||||
metaTitle: 'Men\'s Clothing - Vaishnavi Creation',
|
||||
metaDescription: 'Explore our range of men\'s clothing and fashion items.',
|
||||
},
|
||||
{
|
||||
name: 'Accessories',
|
||||
slug: 'accessories',
|
||||
description: 'Fashion accessories and jewelry',
|
||||
metaTitle: 'Accessories - Vaishnavi Creation',
|
||||
metaDescription: 'Complete your look with our fashion accessories.',
|
||||
},
|
||||
{
|
||||
name: 'Shoes',
|
||||
slug: 'shoes',
|
||||
description: 'Comfortable and stylish footwear',
|
||||
metaTitle: 'Shoes - Vaishnavi Creation',
|
||||
metaDescription: 'Find the perfect pair of shoes for any occasion.',
|
||||
},
|
||||
];
|
||||
|
||||
for (const categoryData of categories) {
|
||||
await prisma.category.upsert({
|
||||
where: { slug: categoryData.slug },
|
||||
update: {},
|
||||
create: categoryData,
|
||||
});
|
||||
}
|
||||
|
||||
// Create sample coupons
|
||||
const coupons = [
|
||||
{
|
||||
code: 'WELCOME10',
|
||||
description: '10% off for new customers',
|
||||
type: 'PERCENTAGE',
|
||||
value: 10,
|
||||
minOrderAmount: 50,
|
||||
maxUses: 1000,
|
||||
validFrom: new Date(),
|
||||
validUntil: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000), // 30 days
|
||||
isActive: true,
|
||||
},
|
||||
{
|
||||
code: 'FREESHIP',
|
||||
description: 'Free shipping on orders over $100',
|
||||
type: 'FREE_SHIPPING',
|
||||
value: 0,
|
||||
minOrderAmount: 100,
|
||||
maxUses: null,
|
||||
validFrom: new Date(),
|
||||
validUntil: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000), // 90 days
|
||||
isActive: true,
|
||||
},
|
||||
];
|
||||
|
||||
for (const couponData of coupons) {
|
||||
await prisma.coupon.upsert({
|
||||
where: { code: couponData.code },
|
||||
update: {},
|
||||
create: couponData,
|
||||
});
|
||||
}
|
||||
|
||||
// Create system configuration
|
||||
const systemConfigs = [
|
||||
{
|
||||
key: 'site_name',
|
||||
value: 'Vaishnavi Creation',
|
||||
type: 'STRING',
|
||||
},
|
||||
{
|
||||
key: 'site_description',
|
||||
value: 'Your premier destination for fashion and style',
|
||||
type: 'STRING',
|
||||
},
|
||||
{
|
||||
key: 'currency',
|
||||
value: 'USD',
|
||||
type: 'STRING',
|
||||
},
|
||||
{
|
||||
key: 'tax_rate',
|
||||
value: '10',
|
||||
type: 'NUMBER',
|
||||
},
|
||||
{
|
||||
key: 'free_shipping_threshold',
|
||||
value: '100',
|
||||
type: 'NUMBER',
|
||||
},
|
||||
{
|
||||
key: 'maintenance_mode',
|
||||
value: 'false',
|
||||
type: 'BOOLEAN',
|
||||
},
|
||||
];
|
||||
|
||||
for (const configData of systemConfigs) {
|
||||
await prisma.systemConfig.upsert({
|
||||
where: { key: configData.key },
|
||||
update: {},
|
||||
create: configData,
|
||||
});
|
||||
}
|
||||
|
||||
console.log('✅ Database seeded successfully!');
|
||||
console.log(`👤 Admin user created: admin@vaishnavi.com / admin123`);
|
||||
console.log(`👤 Customer user created: customer@example.com / customer123`);
|
||||
console.log(`📦 ${categories.length} categories created`);
|
||||
console.log(`🎫 ${coupons.length} coupons created`);
|
||||
console.log(`⚙️ ${systemConfigs.length} system configs created`);
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((e) => {
|
||||
console.error('❌ Seed failed:', e);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
Reference in New Issue
Block a user