50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import 'reflect-metadata'
|
|
import { DataSource } from 'typeorm'
|
|
import { app } from 'electron'
|
|
import path from 'path'
|
|
import { ReadingReflectionTaskBatch } from './entities/ReadingReflectionTaskBatch'
|
|
import { ReadingReflectionTaskItem } from './entities/ReadingReflectionTaskItem'
|
|
import { ReadingPersona } from './entities/ReadingPersona' // 必须导入
|
|
import { DatabaseConnectionError } from '@main/utils/errors/databaseError'
|
|
import { ErrorHandler } from '@main/utils/errorHandler'
|
|
import logger from '@shared/utils/logger'
|
|
|
|
const dbPath = app.isPackaged
|
|
? path.join(app.getPath('userData'), 'reflections.db')
|
|
: path.join(process.cwd(), 'db.sqlite')
|
|
|
|
export const AppDataSource = new DataSource({
|
|
type: 'better-sqlite3', // better-sqlite3 性能优于 sqlite3
|
|
database: dbPath,
|
|
synchronize: true,
|
|
logging: process.env.NODE_ENV === 'development', // 仅开发环境开启日志
|
|
entities: [
|
|
ReadingReflectionTaskBatch,
|
|
ReadingReflectionTaskItem,
|
|
ReadingPersona // 注册实体
|
|
]
|
|
})
|
|
|
|
export const initDB = async () => {
|
|
if (!AppDataSource.isInitialized) {
|
|
try {
|
|
await AppDataSource.initialize()
|
|
logger.info('DATABASE_INITIALIZED', {
|
|
message: 'Database initialized successfully',
|
|
path: dbPath
|
|
})
|
|
} catch (err: any) {
|
|
const error = new DatabaseConnectionError('数据库初始化失败', {
|
|
originalError: err.message,
|
|
stack: err.stack,
|
|
path: dbPath
|
|
}, {
|
|
cause: err
|
|
})
|
|
ErrorHandler.handleError(error)
|
|
throw error
|
|
}
|
|
}
|
|
return AppDataSource
|
|
}
|