/**
* Database IPC Handlers
* Handles all database-related IPC communication between main and renderer
processes
*/
import { ipcMain, BrowserWindow } from 'electron'
import { PrismaClient } from '@prisma/client'
// Initialize Prisma client
const prisma = new PrismaClient()
/**
* Register database-related IPC handlers
*/
export function registerDatabaseHandlers(
ipcMainInstance: typeof ipcMain,
mainWindow: BrowserWindow | null
): void {
/**
* Get database connection status
*/
[Link]('get-db-status', async () => {
try {
await prisma.$connect()
return {
success: true,
data: {
connected: true,
database: 'SQLite',
url: [Link].DATABASE_URL || 'file:./[Link]'
}
}
} catch (error) {
[Link]('Database connection failed:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Get cost presets
*/
[Link]('get-cost-presets', async (event, params) => {
try {
const { limit = 50, offset = 0 } = params
const presets = await [Link]({
take: limit,
skip: offset,
orderBy: { createdAt: 'desc' }
})
const total = await [Link]()
return {
success: true,
data: {
items: presets,
total,
limit,
offset
}
}
} catch (error) {
[Link]('Failed to get cost presets:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Create cost preset
*/
[Link]('create-cost-preset', async (event, params) => {
try {
const { name, tonerCostC, tonerCostM, tonerCostY, tonerCostK, paperCost,
maintenanceCost, pageYield } = params
const preset = await [Link]({
data: {
name,
tonerCostC,
tonerCostM,
tonerCostY,
tonerCostK,
paperCost,
maintenanceCost,
pageYield,
createdAt: new Date(),
updatedAt: new Date()
}
})
return {
success: true,
data: preset
}
} catch (error) {
[Link]('Failed to create cost preset:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Update cost preset
*/
[Link]('update-cost-preset', async (event, params) => {
try {
const { id, name, tonerCostC, tonerCostM, tonerCostY, tonerCostK, paperCost,
maintenanceCost, pageYield } = params
const preset = await [Link]({
where: { id },
data: {
name,
tonerCostC,
tonerCostM,
tonerCostY,
tonerCostK,
paperCost,
maintenanceCost,
pageYield,
updatedAt: new Date()
}
})
return {
success: true,
data: preset
}
} catch (error) {
[Link]('Failed to update cost preset:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Delete cost preset
*/
[Link]('delete-cost-preset', async (event, id) => {
try {
await [Link]({
where: { id }
})
return {
success: true,
data: { deleted: true }
}
} catch (error) {
[Link]('Failed to delete cost preset:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Get analysis history
*/
[Link]('get-analysis-history-db', async (event, params) => {
try {
const { limit = 50, offset = 0, startDate, endDate } = params
const where: any = {}
if (startDate || endDate) {
[Link] = {}
if (startDate) [Link] = new Date(startDate)
if (endDate) [Link] = new Date(endDate)
}
const history = await [Link]({
where,
take: limit,
skip: offset,
orderBy: { createdAt: 'desc' }
})
const total = await [Link]({ where })
return {
success: true,
data: {
items: history,
total,
limit,
offset
}
}
} catch (error) {
[Link]('Failed to get analysis history:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Create analysis history entry
*/
[Link]('create-analysis-history', async (event, params) => {
try {
const {
fileName,
fileSize,
settings,
results,
processingTime
} = params
const history = await [Link]({
data: {
fileName,
fileSize,
settings: [Link](settings),
results: [Link](results),
processingTime,
createdAt: new Date()
}
})
return {
success: true,
data: history
}
} catch (error) {
[Link]('Failed to create analysis history:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Get analysis history by ID
*/
[Link]('get-analysis-history-by-id', async (event, id) => {
try {
const history = await [Link]({
where: { id }
})
if (!history) {
throw new Error('Analysis history not found')
}
return {
success: true,
data: history
}
} catch (error) {
[Link]('Failed to get analysis history by ID:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Delete analysis history
*/
[Link]('delete-analysis-history', async (event, id) => {
try {
await [Link]({
where: { id }
})
return {
success: true,
data: { deleted: true }
}
} catch (error) {
[Link]('Failed to delete analysis history:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Get application settings
*/
[Link]('get-app-settings', async () => {
try {
const settings = await [Link]()
if (!settings) {
// Create default settings
const defaultSettings = await [Link]({
data: {
theme: 'light',
language: 'en',
autoSave: true,
notifications: true,
createdAt: new Date(),
updatedAt: new Date()
}
})
return {
success: true,
data: defaultSettings
}
}
return {
success: true,
data: settings
}
} catch (error) {
[Link]('Failed to get app settings:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Update application settings
*/
[Link]('update-app-settings', async (event, params) => {
try {
const {
theme,
language,
autoSave,
notifications
} = params
const settings = await [Link]({
where: { id: 'default' },
update: {
theme,
language,
autoSave,
notifications,
updatedAt: new Date()
},
create: {
id: 'default',
theme,
language,
autoSave,
notifications,
createdAt: new Date(),
updatedAt: new Date()
}
})
return {
success: true,
data: settings
}
} catch (error) {
[Link]('Failed to update app settings:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Database cleanup
*/
[Link]('cleanup-database', async (event, params) => {
try {
const { olderThanDays = 30 } = params
const cutoffDate = new Date()
[Link]([Link]() - olderThanDays)
const deleted = await [Link]({
where: {
createdAt: {
lt: cutoffDate
}
}
})
return {
success: true,
data: {
deletedCount: [Link],
cutoffDate
}
}
} catch (error) {
[Link]('Failed to cleanup database:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
/**
* Get database statistics
*/
[Link]('get-db-stats', async () => {
try {
const [
analysisCount,
presetCount,
recentAnalysis,
oldestAnalysis
] = await [Link]([
[Link](),
[Link](),
[Link]({
orderBy: { createdAt: 'desc' }
}),
[Link]({
orderBy: { createdAt: 'asc' }
})
])
return {
success: true,
data: {
analysisCount,
presetCount,
recentAnalysis,
oldestAnalysis
}
}
} catch (error) {
[Link]('Failed to get database stats:', error)
return {
success: false,
error: error instanceof Error ? [Link] : 'Unknown error occurred'
}
}
})
}