generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" url = env("DATABASE_URL") } model User { id String @id @default(cuid()) email String @unique name String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt aiLearningData AILearningData[] apiKeys ApiKey[] automationSessions AutomationSession[] trades Trade[] journals TradingJournal[] settings UserSettings? @@map("users") } model ApiKey { id String @id @default(cuid()) userId String provider String keyName String encryptedKey String isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([userId, provider, keyName]) @@map("api_keys") } model UserSettings { id String @id @default(cuid()) userId String @unique autoTrading Boolean @default(false) tradingAmount Float @default(100) riskPercentage Float @default(2) maxDailyTrades Int @default(5) enableNotifications Boolean @default(true) automationMode String @default("SIMULATION") autoTimeframe String @default("1h") autoSymbol String @default("SOLUSD") autoTradingEnabled Boolean @default(false) autoAnalysisEnabled Boolean @default(false) maxLeverage Float @default(3.0) stopLossPercent Float @default(2.0) takeProfitPercent Float @default(6.0) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@map("user_settings") } model Trade { id String @id @default(cuid()) userId String symbol String side String amount Float price Float status String @default("PENDING") driftTxId String? profit Float? fees Float? screenshotUrl String? aiAnalysis String? isAutomated Boolean @default(false) entryPrice Float? exitPrice Float? stopLoss Float? takeProfit Float? leverage Float? timeframe String? tradingMode String? confidence Float? marketSentiment String? outcome String? pnlPercent Float? actualRR Float? executionTime DateTime? learningData Json? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt executedAt DateTime? closedAt DateTime? user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@map("trades") } model TradingJournal { id String @id @default(cuid()) userId String date DateTime @default(now()) screenshotUrl String aiAnalysis String marketSentiment String? keyLevels Json? recommendation String confidence Float notes String? isAutomated Boolean @default(false) symbol String? timeframe String? tradingMode String? tradeId String? outcome String? actualPrice Float? priceAtAnalysis Float? accuracyScore Float? executionDelay Int? marketCondition String? sessionId String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@map("trading_journals") } model Screenshot { id String @id @default(cuid()) url String filename String fileSize Int mimeType String metadata Json? createdAt DateTime @default(now()) @@map("screenshots") } model SystemLog { id String @id @default(cuid()) level String message String metadata Json? createdAt DateTime @default(now()) @@map("system_logs") } model AutomationSession { id String @id @default(cuid()) userId String status String @default("ACTIVE") mode String @default("SIMULATION") symbol String timeframe String totalTrades Int @default(0) successfulTrades Int @default(0) failedTrades Int @default(0) totalPnL Float @default(0) totalPnLPercent Float @default(0) winRate Float @default(0) avgRiskReward Float @default(0) maxDrawdown Float @default(0) startBalance Float? currentBalance Float? settings Json? lastAnalysis DateTime? lastTrade DateTime? nextScheduled DateTime? errorCount Int @default(0) lastError String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt lastAnalysisData Json? user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([userId, symbol, timeframe]) @@map("automation_sessions") } model AILearningData { id String @id @default(cuid()) userId String sessionId String? tradeId String? analysisData Json marketConditions Json outcome String? actualPrice Float? predictedPrice Float? confidenceScore Float? accuracyScore Float? timeframe String symbol String screenshot String? feedbackData Json? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@map("ai_learning_data") } model DCARecord { id String @id @default(cuid()) tradeId String dcaAmount Float dcaPrice Float newAveragePrice Float newStopLoss Float? newTakeProfit Float? newLeverage Float? confidence Float? reasoning String? riskAssessment String? createdAt DateTime @default(now()) @@map("dca_records") }