47 lines
1.9 KiB
TypeScript
47 lines
1.9 KiB
TypeScript
import Database from 'better-sqlite3';
|
|
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
import { migrate } from 'drizzle-orm/better-sqlite3/migrator';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { settings } from './schema';
|
|
|
|
// DATA_DIR lets the deployment point the SQLite file + uploads at a mounted
|
|
// volume (see docker-compose.yml). Falling back to ../data keeps local dev
|
|
// (server/data) unchanged. Resolved against the compiled file's location,
|
|
// which differs between `tsx` (source) and `node dist/...` (build) — hence the
|
|
// explicit env override for production rather than a path that assumes either.
|
|
export const dataDir = process.env.DATA_DIR
|
|
? path.resolve(process.env.DATA_DIR)
|
|
: path.join(__dirname, '..', 'data');
|
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
|
|
export const uploadsDir = path.join(dataDir, 'uploads');
|
|
fs.mkdirSync(uploadsDir, { recursive: true });
|
|
|
|
export const dbPath = path.join(dataDir, 'mykindlebox.db');
|
|
|
|
const sqlite = new Database(dbPath);
|
|
|
|
export const db = drizzle(sqlite);
|
|
|
|
migrate(db, { migrationsFolder: path.join(__dirname, 'migrations') });
|
|
|
|
const defaultSettings = [
|
|
{ key: 'rabbitry_name', value: 'My Rabbitry' },
|
|
{ key: 'weight_unit', value: 'decimal_lbs' },
|
|
{ key: 'kit_prefix', value: '' },
|
|
{ key: 'theme', value: 'confetti-system' },
|
|
// Pre-fills the breed field on new rabbits (most herds are a single breed).
|
|
// Defaults to Holland Lop, the current dataset's breed; editable in Settings.
|
|
{ key: 'default_breed', value: 'Holland Lop' },
|
|
// Global, never-resetting sequence used to name auto-generated kits
|
|
// (see routes/litters.ts) — intentionally not in settings.ts's editable
|
|
// ALLOWED_KEYS, since it's bookkeeping rather than a user preference.
|
|
{ key: 'kit_counter', value: '0' },
|
|
];
|
|
for (const setting of defaultSettings) {
|
|
sqlite
|
|
.prepare('INSERT OR IGNORE INTO settings (key, value) VALUES (?, ?)')
|
|
.run(setting.key, setting.value);
|
|
}
|