42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import Database from 'better-sqlite3';
|
|
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
import { migrate } from 'drizzle-orm/better-sqlite3/migrator';
|
|
import * as schema from './schema';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
|
|
const dbPath = path.join(process.cwd(), 'data', 'battery_tracker.db');
|
|
|
|
// Ensure data directory exists
|
|
const dataDir = path.dirname(dbPath);
|
|
if (!fs.existsSync(dataDir)) {
|
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
}
|
|
|
|
const sqlite = new Database(dbPath);
|
|
sqlite.pragma('foreign_keys = ON');
|
|
|
|
const db = drizzle(sqlite, { schema });
|
|
|
|
// Run migrations
|
|
console.log('Running migrations...');
|
|
migrate(db, { migrationsFolder: './drizzle' });
|
|
console.log('Migrations complete.');
|
|
|
|
// Seed default battery types
|
|
const defaultTypes = ['AA', 'AAA', '18650', 'CR2032', '9V', 'C', 'D', '14500', '16340', '21700'];
|
|
|
|
console.log('Seeding default battery types...');
|
|
for (const typeName of defaultTypes) {
|
|
try {
|
|
db.insert(schema.batteryTypes).values({ name: typeName, isCustom: false }).run();
|
|
console.log(` Added: ${typeName}`);
|
|
} catch {
|
|
// Already exists, skip
|
|
console.log(` Skipped (exists): ${typeName}`);
|
|
}
|
|
}
|
|
|
|
console.log('Seed complete!');
|
|
sqlite.close();
|