159 lines
4.4 KiB
JavaScript
159 lines
4.4 KiB
JavaScript
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,
|
|
osuBalance: 100,
|
|
role: 'user',
|
|
},
|
|
});
|
|
|
|
await prisma.transaction.create({
|
|
data: {
|
|
userId: demo.id,
|
|
type: 'seed_credit',
|
|
amount: 10000,
|
|
meta: JSON.stringify({ reason: 'demo_seed' }),
|
|
},
|
|
});
|
|
|
|
await prisma.transaction.create({
|
|
data: {
|
|
userId: demo.id,
|
|
type: 'seed_osu',
|
|
amount: 100,
|
|
meta: JSON.stringify({ reason: 'demo_osu' }),
|
|
},
|
|
});
|
|
|
|
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, osu: 100)');
|
|
}
|
|
|
|
main()
|
|
.catch((e) => {
|
|
console.error(e);
|
|
process.exit(1);
|
|
})
|
|
.finally(async () => {
|
|
await prisma.$disconnect();
|
|
});
|