generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" url = "file:./data/tinker.db" relationMode = "prisma" } model User { id String @id @default(cuid()) name String? email String @unique password String? emailVerified DateTime? image String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt subscription String @default("free") credits Int @default(10) maxDeals Int @default(5) accounts Account[] sessions Session[] deals Deal[] scanLogs ScanLog[] negotiations Negotiation[] transactions Transaction[] queueItems QueueItem[] @@map("users") } model Account { id String @id @default(cuid()) userId String type String provider String providerAccountId String refresh_token String? access_token String? expires_at Int? token_type String? scope String? id_token String? session_state String? user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([provider, providerAccountId]) @@map("accounts") } model Session { id String @id @default(cuid()) sessionToken String @unique userId String expires DateTime user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@map("sessions") } model Deal { id String @id @default(cuid()) userId String title String sourceUrl String marketplace String buyPrice Float estimatedSell Float profitMargin Float confidence Float @default(0) status String @default("pending") scrapedAt DateTime @default(now()) analyzedAt DateTime? negotiatedAt DateTime? transactedAt DateTime? sellerContact String? notes String? user User @relation(fields: [userId], references: [id], onDelete: Cascade) negotiations Negotiation[] transaction Transaction? @@index([userId, status]) @@map("deals") } model ScanLog { id String @id @default(cuid()) userId String? marketplace String itemsScanned Int @default(0) dealsFound Int @default(0) duration Int status String @default("completed") error String? createdAt DateTime @default(now()) user User? @relation(fields: [userId], references: [id], onDelete: SetNull) @@index([createdAt]) @@map("scan_logs") } model Negotiation { id String @id @default(cuid()) dealId String userId String message String response String? offeredPrice Float? acceptedPrice Float? status String @default("pending") turn Int @default(1) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deal Deal @relation(fields: [dealId], references: [id], onDelete: Cascade) user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@index([dealId]) @@map("negotiations") } model Transaction { id String @id @default(cuid()) dealId String @unique userId String amount Float fee Float @default(0) netProfit Float paymentMethod String paymentStatus String @default("pending") shippingAddress String? trackingNumber String? status String @default("pending") createdAt DateTime @default(now()) completedAt DateTime? deal Deal @relation(fields: [dealId], references: [id], onDelete: Cascade) user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@index([userId, status]) @@map("transactions") } model QueueItem { id String @id @default(cuid()) userId String dealId String? action String priority Int @default(5) status String @default("queued") data String? error String? retries Int @default(0) maxRetries Int @default(3) scheduled DateTime? startedAt DateTime? finishedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@index([status, priority]) @@map("queue_items") }