34 lines
968 B
TypeScript
34 lines
968 B
TypeScript
import mongoose from "mongoose";
|
|
import { Report } from "./models/report.js";
|
|
|
|
let isConnected = false;
|
|
|
|
export async function initDb(): Promise<void> {
|
|
if (isConnected || mongoose.connection.readyState >= 1) return;
|
|
|
|
const {
|
|
MONGO_HOST = 'localhost',
|
|
MONGO_USER,
|
|
MONGO_PASS,
|
|
MONGO_NAME = 'tracreport',
|
|
MONGO_OPTS = '',
|
|
} = process.env
|
|
|
|
const credentials = MONGO_USER && MONGO_PASS
|
|
? `${encodeURIComponent(MONGO_USER)}:${encodeURIComponent(MONGO_PASS)}@`
|
|
: '';
|
|
|
|
const MONGO_URI = `mongodb://${credentials}${MONGO_HOST}/${MONGO_NAME}${MONGO_OPTS ? '?' + MONGO_OPTS : ''}`;
|
|
|
|
try {
|
|
await mongoose.connect(MONGO_URI);
|
|
isConnected = true;
|
|
console.log('✅ MongoDB connected');
|
|
await Report.syncIndexes();
|
|
console.log('✅ Indexes synced');
|
|
} catch (err) {
|
|
console.error('❌ MongoDB connection error:', err)
|
|
process.exit(1);
|
|
}
|
|
}
|