Files
LNpaywall/backend/prisma/seed.js
2025-12-14 23:08:45 -03:00

98 lines
2.9 KiB
JavaScript

import { PrismaClient } from '@prisma/client';
import bcrypt from 'bcryptjs';
const prisma = new PrismaClient();
async function main() {
console.log('🌱 Seeding database...');
// Create admin user
const adminPassword = await bcrypt.hash('admin123', 12);
const admin = await prisma.user.upsert({
where: { email: 'admin@lnpaywall.com' },
update: {},
create: {
email: 'admin@lnpaywall.com',
passwordHash: adminPassword,
displayName: 'Admin',
role: 'ADMIN',
emailVerified: true,
},
});
console.log('✅ Created admin user:', admin.email);
// Create demo creator
const creatorPassword = await bcrypt.hash('demo123', 12);
const creator = await prisma.user.upsert({
where: { email: 'creator@demo.com' },
update: {},
create: {
email: 'creator@demo.com',
passwordHash: creatorPassword,
displayName: 'Demo Creator',
role: 'CREATOR',
emailVerified: true,
lightningAddress: 'demo@getalby.com',
},
});
console.log('✅ Created demo creator:', creator.email);
// Create sample paywalls
const paywalls = [
{
title: 'Complete Bitcoin Development Course',
description: 'Learn to build on Bitcoin and Lightning Network from scratch. 10+ hours of video content.',
originalUrl: 'https://example.com/bitcoin-course',
originalUrlType: 'URL',
priceSats: 5000,
slug: 'bitcoin-course',
coverImageUrl: 'https://images.unsplash.com/photo-1621761191319-c6fb62004040?w=800',
},
{
title: 'Exclusive Trading Strategy PDF',
description: 'My personal trading strategy that generates consistent returns. Includes spreadsheet templates.',
originalUrl: 'https://example.com/trading-guide.pdf',
originalUrlType: 'PDF',
priceSats: 2100,
slug: 'trading-strategy',
coverImageUrl: 'https://images.unsplash.com/photo-1611974789855-9c2a0a7236a3?w=800',
},
{
title: 'Private Notion Template Library',
description: 'Access my complete collection of 50+ Notion templates for productivity and business.',
originalUrl: 'https://notion.so/template-library',
originalUrlType: 'NOTION',
priceSats: 1000,
slug: 'notion-templates',
coverImageUrl: 'https://images.unsplash.com/photo-1484480974693-6ca0a78fb36b?w=800',
},
];
for (const paywallData of paywalls) {
const paywall = await prisma.paywall.upsert({
where: { slug: paywallData.slug },
update: {},
create: {
...paywallData,
creatorId: creator.id,
},
});
console.log('✅ Created paywall:', paywall.title);
}
console.log('\n🎉 Seeding complete!');
console.log('\n📝 Test accounts:');
console.log(' Admin: admin@lnpaywall.com / admin123');
console.log(' Creator: creator@demo.com / demo123');
}
main()
.catch((e) => {
console.error('❌ Seed error:', e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});