| 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") |
| } |
|
|