feat: Add equipment level data and update script
All checks were successful
Deploy Dimension47 / deploy (push) Successful in 34s
All checks were successful
Deploy Dimension47 / deploy (push) Successful in 34s
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
1
server/prisma/data/equipmentlevel.json
Normal file
1
server/prisma/data/equipmentlevel.json
Normal file
File diff suppressed because one or more lines are too long
108
server/prisma/update-equipment-levels.ts
Normal file
108
server/prisma/update-equipment-levels.ts
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
import 'dotenv/config';
|
||||||
|
import * as fs from 'fs';
|
||||||
|
import * as path from 'path';
|
||||||
|
import { PrismaClient } from '../src/generated/prisma/client.js';
|
||||||
|
import { PrismaPg } from '@prisma/adapter-pg';
|
||||||
|
|
||||||
|
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL });
|
||||||
|
const prisma = new PrismaClient({ adapter });
|
||||||
|
|
||||||
|
interface EquipmentLevel {
|
||||||
|
name: string;
|
||||||
|
level: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateEquipmentLevels() {
|
||||||
|
// Read the JSON file from project root
|
||||||
|
const dataPath = path.join(__dirname, '..', '..', 'equipmentlevel.json');
|
||||||
|
|
||||||
|
if (!fs.existsSync(dataPath)) {
|
||||||
|
console.error('❌ equipmentlevel.json not found at:', dataPath);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const data: EquipmentLevel[] = JSON.parse(fs.readFileSync(dataPath, 'utf-8'));
|
||||||
|
console.log(`📦 Found ${data.length} equipment entries with levels`);
|
||||||
|
|
||||||
|
let updated = 0;
|
||||||
|
let notFound = 0;
|
||||||
|
let errors = 0;
|
||||||
|
|
||||||
|
// Process in batches for better performance
|
||||||
|
const batchSize = 100;
|
||||||
|
for (let i = 0; i < data.length; i += batchSize) {
|
||||||
|
const batch = data.slice(i, i + batchSize);
|
||||||
|
|
||||||
|
await Promise.all(
|
||||||
|
batch.map(async (item) => {
|
||||||
|
try {
|
||||||
|
// Parse level - handle "-1", "0", "1", etc.
|
||||||
|
const level = parseInt(item.level, 10);
|
||||||
|
if (isNaN(level)) {
|
||||||
|
console.warn(`⚠️ Invalid level for "${item.name}": ${item.level}`);
|
||||||
|
errors++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update equipment by name
|
||||||
|
const result = await prisma.equipment.updateMany({
|
||||||
|
where: { name: item.name },
|
||||||
|
data: { level },
|
||||||
|
});
|
||||||
|
|
||||||
|
if (result.count > 0) {
|
||||||
|
updated++;
|
||||||
|
} else {
|
||||||
|
// Try case-insensitive search
|
||||||
|
const equipment = await prisma.equipment.findFirst({
|
||||||
|
where: {
|
||||||
|
name: {
|
||||||
|
equals: item.name,
|
||||||
|
mode: 'insensitive',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (equipment) {
|
||||||
|
await prisma.equipment.update({
|
||||||
|
where: { id: equipment.id },
|
||||||
|
data: { level },
|
||||||
|
});
|
||||||
|
updated++;
|
||||||
|
} else {
|
||||||
|
notFound++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`❌ Error updating "${item.name}":`, err);
|
||||||
|
errors++;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
// Progress update
|
||||||
|
const progress = Math.min(i + batchSize, data.length);
|
||||||
|
process.stdout.write(`\r⏳ Processing: ${progress}/${data.length} (${Math.round(progress / data.length * 100)}%)`);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('\n');
|
||||||
|
console.log('✅ Update complete!');
|
||||||
|
console.log(` Updated: ${updated}`);
|
||||||
|
console.log(` Not found in DB: ${notFound}`);
|
||||||
|
console.log(` Errors: ${errors}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
console.log('🔄 Updating equipment levels from equipmentlevel.json...\n');
|
||||||
|
|
||||||
|
try {
|
||||||
|
await updateEquipmentLevels();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Fatal error:', error);
|
||||||
|
process.exit(1);
|
||||||
|
} finally {
|
||||||
|
await prisma.$disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
Reference in New Issue
Block a user