first commit
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
import bcrypt from 'bcrypt';
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
const ITEMS = [
|
||||
{ name: 'Dust Fragment', rarity: 'Consumer', marketValue: 5, imageUrl: '' },
|
||||
{ name: 'Scrap Token', rarity: 'Consumer', marketValue: 8, imageUrl: '' },
|
||||
{ name: 'Plain Cap', rarity: 'Consumer', marketValue: 12, imageUrl: '' },
|
||||
{ name: 'Blue Softpack', rarity: 'Industrial', marketValue: 25, imageUrl: '' },
|
||||
{ name: 'Steel Badge', rarity: 'Industrial', marketValue: 35, imageUrl: '' },
|
||||
{ name: 'Signal Chip', rarity: 'Industrial', marketValue: 40, imageUrl: '' },
|
||||
{ name: 'Azure Coil', rarity: 'MilSpec', marketValue: 80, imageUrl: '' },
|
||||
{ name: 'Navy Grip', rarity: 'MilSpec', marketValue: 95, imageUrl: '' },
|
||||
{ name: 'Pulse Meter', rarity: 'MilSpec', marketValue: 110, imageUrl: '' },
|
||||
{ name: 'Violet Core', rarity: 'Restricted', marketValue: 220, imageUrl: '' },
|
||||
{ name: 'Phantom Lens', rarity: 'Restricted', marketValue: 280, imageUrl: '' },
|
||||
{ name: 'Neon Circuit', rarity: 'Restricted', marketValue: 320, imageUrl: '' },
|
||||
{ name: 'Pink Dynamo', rarity: 'Classified', marketValue: 650, imageUrl: '' },
|
||||
{ name: 'Ruby Flux', rarity: 'Classified', marketValue: 800, imageUrl: '' },
|
||||
{ name: 'Crimson Edge', rarity: 'Covert', marketValue: 1800, imageUrl: '' },
|
||||
{ name: 'Blood Ember', rarity: 'Covert', marketValue: 2400, imageUrl: '' },
|
||||
{ name: 'Golden Relic', rarity: 'Extraordinary', marketValue: 12000, imageUrl: '' },
|
||||
{ name: 'Mythic Blade', rarity: 'Extraordinary', marketValue: 25000, imageUrl: '' },
|
||||
];
|
||||
|
||||
async function main() {
|
||||
await prisma.transaction.deleteMany();
|
||||
await prisma.inventoryItem.deleteMany();
|
||||
await prisma.caseItem.deleteMany();
|
||||
await prisma.case.deleteMany();
|
||||
await prisma.item.deleteMany();
|
||||
await prisma.user.deleteMany();
|
||||
|
||||
const adminHash = await bcrypt.hash('admin123', 10);
|
||||
const userHash = await bcrypt.hash('player123', 10);
|
||||
|
||||
await prisma.user.create({
|
||||
data: {
|
||||
username: 'admin',
|
||||
passwordHash: adminHash,
|
||||
balance: 0,
|
||||
role: 'admin',
|
||||
},
|
||||
});
|
||||
|
||||
const demo = await prisma.user.create({
|
||||
data: {
|
||||
username: 'player',
|
||||
passwordHash: userHash,
|
||||
balance: 10000,
|
||||
role: 'user',
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.transaction.create({
|
||||
data: {
|
||||
userId: demo.id,
|
||||
type: 'seed_credit',
|
||||
amount: 10000,
|
||||
meta: JSON.stringify({ reason: 'demo_seed' }),
|
||||
},
|
||||
});
|
||||
|
||||
const items = [];
|
||||
for (const data of ITEMS) {
|
||||
items.push(await prisma.item.create({ data }));
|
||||
}
|
||||
|
||||
const byName = Object.fromEntries(items.map((i) => [i.name, i]));
|
||||
|
||||
const starter = await prisma.case.create({
|
||||
data: {
|
||||
name: 'Starter Crate',
|
||||
imageUrl: '',
|
||||
price: 100,
|
||||
active: true,
|
||||
},
|
||||
});
|
||||
|
||||
const arsenal = await prisma.case.create({
|
||||
data: {
|
||||
name: 'Arsenal Case',
|
||||
imageUrl: '',
|
||||
price: 250,
|
||||
active: true,
|
||||
},
|
||||
});
|
||||
|
||||
const vault = await prisma.case.create({
|
||||
data: {
|
||||
name: 'Gold Vault',
|
||||
imageUrl: '',
|
||||
price: 500,
|
||||
active: true,
|
||||
},
|
||||
});
|
||||
|
||||
const drops = [
|
||||
[starter, 'Dust Fragment', 40],
|
||||
[starter, 'Scrap Token', 30],
|
||||
[starter, 'Plain Cap', 15],
|
||||
[starter, 'Blue Softpack', 8],
|
||||
[starter, 'Azure Coil', 5],
|
||||
[starter, 'Violet Core', 1.5],
|
||||
[starter, 'Crimson Edge', 0.4],
|
||||
[starter, 'Golden Relic', 0.1],
|
||||
|
||||
[arsenal, 'Steel Badge', 35],
|
||||
[arsenal, 'Signal Chip', 25],
|
||||
[arsenal, 'Navy Grip', 18],
|
||||
[arsenal, 'Pulse Meter', 12],
|
||||
[arsenal, 'Phantom Lens', 6],
|
||||
[arsenal, 'Pink Dynamo', 2.5],
|
||||
[arsenal, 'Blood Ember', 1.2],
|
||||
[arsenal, 'Mythic Blade', 0.3],
|
||||
|
||||
[vault, 'Neon Circuit', 40],
|
||||
[vault, 'Ruby Flux', 30],
|
||||
[vault, 'Crimson Edge', 18],
|
||||
[vault, 'Blood Ember', 8],
|
||||
[vault, 'Golden Relic', 3],
|
||||
[vault, 'Mythic Blade', 1],
|
||||
];
|
||||
|
||||
for (const [c, name, dropRate] of drops) {
|
||||
await prisma.caseItem.create({
|
||||
data: {
|
||||
caseId: c.id,
|
||||
itemId: byName[name].id,
|
||||
dropRate,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
console.log('Seed complete.');
|
||||
console.log(' admin / admin123');
|
||||
console.log(' player / player123 (balance: 100.00)');
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
Reference in New Issue
Block a user